cold28
Anmeldungsdatum: 2. Dezember 2018
Beiträge: Zähle...
|
Hallo liebe Ubuntu Freunde, bin noch neu im Script schreiben und habe folgendes Problem.
Mit welchem Befehl kann ich das einloggen eines root users erkennen?
Also mein Script soll erkennen das ein root user sich eingeloggt hat und in eine andere Datei eine Meldung schreiben.
In eine andere Datei schreiben ist kein problem, nur wie lasse ich den Script das einloggen erkennen? vielen dank im voraus
|
TomLu
Anmeldungsdatum: 23. August 2014
Beiträge: 603
|
cold28 schrieb:
bin noch neu im Script schreiben und habe folgendes Problem.
Mit welchem Befehl kann ich das einloggen eines root users erkennen?
Der richtige Weg ist andersrum... und zwar, dass nach dem Einloggen eines Users (D)ein Script gestartet wird. Das geht über /etc/pam.d/common-session zusammen mit dem Modul pam_exec.so , und funktioniert unabhängig davon, wie der Login stattfindet, wie z.B. durch login-shell, tty, Display-Manager, switch user... etc.....
|
cold28
(Themenstarter)
Anmeldungsdatum: 2. Dezember 2018
Beiträge: 25
|
Vielen dank für deine Antwort. Muss ich in die pam_exec.so den Pfad des Skriptes eintragen, damit dieser bei jedem login gestartet wird?
Finde leider die datei pam_exec.so nicht.
Habe es mal unter der WIKI im board mit service units versucht. Hat aber leider auch nicht geklappt.
habe unter etc/systemd/system eine eigene xxxxxx.service datei erstellt. In der datei steht : ExecStart=Pfad/ZUM/Befehl Aber er startet den Skript nicht.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
cold28 schrieb: Muss ich in die pam_exec.so den Pfad des Skriptes eintragen, damit dieser bei jedem login gestartet wird?
Nein, in Shared Libraries schreibt man nicht einfach so herum - du solltest die Manpage lesen (man 8 pam_exec) und das so gewonnene Wissen anwenden... - ein Beispiel, das grob deinem Anwendungsfall entspricht gibt es z.B. in https://tblein.eu/~tblein/server/2016/Executing-a-command-at-login/
|
cold28
(Themenstarter)
Anmeldungsdatum: 2. Dezember 2018
Beiträge: 25
|
seahawk1986 schrieb:
. - ein Beispiel, das grob deinem Anwendungsfall entspricht gibt es z.B. in https://tblein.eu/~tblein/server/2016/Executing-a-command-at-login/ Ich hab es mal nach dem Beispiel versucht.
Nur bekomme ich bei jedem anmelden als root folgende fehlermeldung:
| /bin/rootlogin.sh schlug fehl: Fehlercode 2
|
habe in der /etc/pam.d/common-session folgendes stehen:
| ....
session optional pam_exec.so /bin/rootlogin.sh
|
meine rootlogin.sh sieht wie folgt aus: 1
2
3
4
5
6
7
8
9
10
11
12
13 | #!/bin/sh
if ([ "$PAM_TYPE" != "open_session" ] ||
([ "$PAM_USER" != "root" ])
then
exit 0
else
{
d=$(date +%d-%m-%Y_%H.%M)
echo -n $d >> /var/log/bs2.log
}
fi
exit 0
|
Die rootogin.sh habe ich auch ausführbar gemacht.
Gibt es irgendwo eine liste wo die fehlercodes erläutert werden?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Wenn ich sudo ls eingebe, taucht dies im Journal auf: Dez 03 13:46:15 robunt-01 sudo[14940]: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/ls
Dez 03 13:46:15 robunt-01 sudo[14940]: pam_unix(sudo:session): session opened for user root by (uid=0)
Dez 03 13:46:15 robunt-01 sudo[14940]: pam_unix(sudo:session): session closed for user root Was darüber hinaus benötigst Du denn sonst noch?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Lass dir die Ausgabe des Skripts anzeigen (die wird in der Voreinstellung auf /dev/null umgeleitet), dann solltest du im Skript auftretende Fehlermeldungen sehen können. Dafür gibt es wie in der Manpage beschrieben die Optionen stdout und file= /path/to/file. Also z.B.:
session optional pam_exec.so stdout /bin/rootlogin.sh
|
TomLu
Anmeldungsdatum: 23. August 2014
Beiträge: 603
|
@cold28
Ändere das Pam-Statement mal wie folgt:
session required pam_exec.so seteuid /usr/local/bin/rootlogin.sh Denn hier
/bin/rootlogin.sh
hat es eigentlich nichts zu suchen.
|
cold28
(Themenstarter)
Anmeldungsdatum: 2. Dezember 2018
Beiträge: 25
|
TomLu schrieb: @cold28
Ändere das Pam-Statement mal wie folgt:
session required pam_exec.so seteuid /usr/local/bin/rootlogin.sh Denn hier
/bin/rootlogin.sh
hat es eigentlich nichts zu suchen.
Jetzt startet mein Ubuntu System garnicht mehr ☹
Ubuntu Schrift bleibt am Display die ganze zeit stehen. Vorher konnte ich mich im Termnal nicht mehr als root anmelden.
Hab dann einen neustart gemacht und jetzt geht garnichts mehr. Bestimmt irgendwas verändert was nicht soll 😢
|
cold28
(Themenstarter)
Anmeldungsdatum: 2. Dezember 2018
Beiträge: 25
|
Konnte System wieder hochfahren. Verstehe nicht wie du das meinst???
rklm schrieb: Wenn ich sudo ls eingebe, taucht dies im Journal auf: Dez 03 13:46:15 robunt-01 sudo[14940]: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/ls
Dez 03 13:46:15 robunt-01 sudo[14940]: pam_unix(sudo:session): session opened for user root by (uid=0)
Dez 03 13:46:15 robunt-01 sudo[14940]: pam_unix(sudo:session): session closed for user root Was darüber hinaus benötigst Du denn sonst noch?
@TomLu
Wenn ich das mache startet mein System nicht mehr. Komme bis zum Anmeldefenster und wenn ich daas Password eingebe kommt die Meldung "Fehler /usr/local/bin/rootlogin.sh
TomLu schrieb: @cold28
Ändere das Pam-Statement mal wie folgt:
session required pam_exec.so seteuid /usr/local/bin/rootlogin.sh Denn hier
/bin/rootlogin.sh
hat es eigentlich nichts zu suchen.
|
TomLu
Anmeldungsdatum: 23. August 2014
Beiträge: 603
|
Du hast das Script aber auch nach/usr/local/bin rüberkopiert? Und die Rechte sind root:root 755? Wenn ja musst du beides getrennt voneinander untersuchen... also zuerst die pam-logik, und wenn das geht die Scriptfunktion. Trag also für Teil 1 der Diagnose nur einen einzigen Befehl in das Script ein, direkt unterhalb vom shebang nur ein "exit 0", so dass es definitiv keinen Syntaxfehler produzieren kann. Dann muss die Anmeldung wieder funktionieren, schau im Log nach, was bei der Anmeldung geloggt wird. Wenn das klappt, kümmern wir uns ums Script.
|
cold28
(Themenstarter)
Anmeldungsdatum: 2. Dezember 2018
Beiträge: 25
|
TomLu schrieb: Du hast das Script aber auch nach/usr/local/bin rüberkopiert? Und die Rechte sind root:root 755?
Ja, pfad stimmt, genauso habe ich es auch. Und rechte auch genauso vergeben. Hat aber leider nicht geklappt Mit der pam-logik meinst du den eintrag in der common-session???
Trag also für Teil 1 der Diagnose nur einen einzigen Befehl in das Script ein, direkt unterhalb vom shebang nur ein "exit 0", so dass es definitiv keinen Syntaxfehler produzieren kann.
Falls common-session gemeint ist habe ich es genauso gemacht. Da waren aber noch andere Befehle, die habe ich gelöscht so das unter dem shebang nur noch exit 0 steht.
Leider funktioniert es wieder nicht. Ubuntu startet wieder nicht. Habe aber zum glück eine kopie der common-session datei gemacht.
Dann muss die Anmeldung wieder funktionieren, schau im Log nach, was bei der Anmeldung geloggt wird.
Wenn das klappt, kümmern wir uns ums Script.
|
TomLu
Anmeldungsdatum: 23. August 2014
Beiträge: 603
|
Dann behaupte ich jetzt einfach mal, dass Du irgendwas falsch gemacht hast. Ich habe das gerade mit Ubuntu getestet, es funktioniert tadellos. Hier das Testszenario: cat /etc/pam.d/common-session | grep -v '#'
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so
session optional pam_systemd.so
session required pam_exec.so seteuid /usr/local/bin/sessiontest
ls -lah /usr/local/bin/sessiontest
-rwxr-xr-x 1 root root 147 Dez 3 18:40 /usr/local/bin/sessiontest
cat /usr/local/bin/sessiontest
#!/bin/bash
echo "started! PAM_USER=$PAM_USER PAM_TYPE=$PAM_TYPE PAM_SERVICE=$PAM_SERVICE" | systemd-cat -t "thlu:$(basename $0)" -p info
exit 0 Dann zum Testen eine An- und Abmeldung mit:
sudo su-
exit Der passende Journaleintrag durch das Script:
root@thomas:~# journalctl -b | grep sessiontest
Dez 03 18:40:25 thomas thlu:sessiontest[12331]: started! PAM_USER=root PAM_TYPE=open_session PAM_SERVICE=su
Dez 03 18:40:41 thomas thlu:sessiontest[12356]: started! PAM_USER=root PAM_TYPE=close_session PAM_SERVICE=su Funktioniert tadellos.
|
cold28
(Themenstarter)
Anmeldungsdatum: 2. Dezember 2018
Beiträge: 25
|
cold28 schrieb: TomLu schrieb: Trag also für Teil 1 der Diagnose nur einen einzigen Befehl in das Script ein, direkt unterhalb vom shebang nur ein "exit 0", so dass es definitiv keinen Syntaxfehler produzieren kann.
Du meintest mit Teil 1 "exit 0 eintragen die selbst erstellte script datei und nicht in die common-session. Richtig?
Also bei die sessiontest und bei mir rootlogin.sh!
Ich habe das nähmlich in der common-session eingetragen. Also shebang und darunter exit 0.
|
TomLu
Anmeldungsdatum: 23. August 2014
Beiträge: 603
|
😊 .... der war gut... echt.... *fg* Sorry... konnte grad nicht anders... ich habe Dir ja jetzt ein Beispiel geschickt.....damit gehts....
|