staging.inyokaproject.org

bash script soll einloggen eines users erkennen!?

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

cold28

Anmeldungsdatum:
2. Dezember 2018

Beiträge: 25

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: 11278

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:

1
/bin/rootlogin.sh schlug fehl: Fehlercode 2

habe in der /etc/pam.d/common-session folgendes stehen:

1
2
....
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 Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

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: 11278

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....

Antworten |