Hallo,
zur Erläuterung der Frage:
Der Befehl „login“ ist eine richtige Binär Datei im Verzeichnis /bin.
Der Befehl „logout“ ist anscheinend nur eine Scriptdatei, aber keine Binar-Datei.
Logout schreibt zum Schluss in die Dateien ‚utmp’ und ‚wtmp’.
Aber auf Grundlage welcher Befehle (Kommandos) denn?
Hintergrund:
Ich schütze mein System mit LIDS. Dazu muss die beiden Dateien ‚utmp’ und ‚wtmp’ während des Abmeldens für einen Prozess zum schreiben freigeben.
Aber da ‚logout’ keine Binär Datei ist herkömmlichen Sinne ist, weiß ich nicht, welchen Prozesse in ‚utmp’ und ‚wtmp’ reinschreiben.
Danke
Dirk
Was ist der Befehl „logout“?
logout ist shell-intern. Der Befehl macht meines Wissens nichts weiteres, als zu schauen, ob die Shell eine Loginshell ist (anstatt eine Subshell). Ist es eine Subshell, bricht er ab, ansonsten beendet er die shell wie exit auch.
/bin/login, welches ja die shell aufgerufen hat, merkt nun, dass sich diese beendet hat und passt wtmp und utmp an.
/bin/login, welches ja die shell aufgerufen hat, merkt nun, dass sich diese beendet hat und passt wtmp und utmp an.
dachte ich vorhin auch, habe das ganze aber jetzt mit strace untersuchtJoghurt hat geschrieben:/bin/login, welches ja die shell aufgerufen hat, merkt nun, dass sich diese beendet hat und passt wtmp und utmp an.
Code: Alles auswählen
root@gms1:~# ps aux | grep login
root 4759 0.0 0.2 2632 1144 tty1 Ss Jan25 0:00 /bin/login --
root 8155 0.0 0.1 3688 808 pts/3 R+ 16:24 0:00 grep login
root@gms1:~# strace -p 4759 -o login.trc
Process 4759 attached - interrupt to quit
Process 4759 detached
root@gms1:~# cat login.trc
wait4(-1, NULL, 0, NULL) = 3816
--- SIGCHLD (Child exited) @ 0 (0) ---
getuid32() = 0
time([1138634683]) = 1138634683
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=801, ...}) = 0
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=801, ...}) = 0
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=801, ...}) = 0
send(5, "<38>Jan 30 16:24:43 login[4759]:"..., 76, MSG_NOSIGNAL) = 76
munmap(0xb7f06000, 10068) = 0
munmap(0xb7f09000, 4096) = 0
exit_group(0) = ?
Die Begründung habe ich daraufhin auch in den Manpages gefunden:
man login hat geschrieben: Es liegt NICHT in der Verantwortung von login, Nutzer von der
utmp-Datei zu entfernen. Sowohl getty( 8 ) als auch init( 8 ) sind dafür
zuständig, die Eigentümerschaft einer Terminalsitzung aufzuräumen.
Grußman init hat geschrieben: Jedesmal, wenn ein Kindprozeß terminiert, hält init diese Tatsache und
den Grund, weshalb der Kindprozeß gestorben ist, in den Dateien
/var/run/utmp und /var/log/wtmp fest, falls diese Dateien existieren.
gms