Was ist der Befehl „logout“?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
Pix
Beiträge: 275
Registriert: 31.01.2003 14:22:21

Was ist der Befehl „logout“?

Beitrag von Pix » 30.01.2006 14:53:55

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

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 30.01.2006 15:50:42

logout ist ein "builtin command" in der Shell (siehe auch "man bash")

Gruß
gms

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 30.01.2006 15:53:25

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.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 30.01.2006 16:36:56

Joghurt hat geschrieben:/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 untersucht

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)                           = ?
der Login Prozeß sendet anscheinend weiter
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.
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.
Gruß
gms

Antworten