Hallo Robert,
On Wed, Apr 06, 2011 at 08:10:03 +0100, Robert wrote:
vs2801:~# ps ax|grep buum 21820 pts/8 S+ 0:00 grep buum
vs2801:~# ps -eaf | grep bumm root 11967 765 0 08:03 pts/8 00:00:00 grep bumm
Okay, ein kleiner Test mit Debian Lenny in qemu-kvm: User "dummy" ist eingerichtet, dieser loggt sich auf tty2 ein, startet eine screen-Sitzung, darin startet er top.
lentest:~# grep dummy /etc/passwd dummy:x:1001:1001:Crash T. Dummy,,,:/home/dummy:/bin/bash
lentest:~# ps aux | grep dummy dummy 2418 0.0 2.2 5492 2796 tty2 S 09:22 0:00 -bash dummy 2453 0.0 0.7 4104 980 tty2 S+ 09:22 0:00 screen dummy 2454 0.0 0.8 4236 1116 ? Ss 09:22 0:00 SCREEN dummy 2455 0.0 2.1 5488 2752 pts/0 Ss 09:22 0:00 /bin/bash dummy 2466 0.1 0.8 2388 1072 pts/0 S+ 09:23 0:00 top root 2479 0.0 0.5 3140 748 tty1 S+ 09:33 0:00 grep dummy
Nun versucht root, den User dummy zu loeschen.
lentest:~# userdel dummy userdel: Benutzer dummy ist derzeit angemeldet
lentest:~# pkill -KILL -u dummy (Uebrigens, erst -TERM und dann -KILL ist besser, dazu spaeter mehr)
lentest:~# userdel dummy userdel: Benutzer dummy ist derzeit angemeldet
lentest:~# deluser dummy Entferne Benutzer dummy ... Warning: group `dummy' has no more members. userdel: Benutzer dummy ist derzeit angemeldet /usr/sbin/deluser: `/usr/sbin/userdel' dummy gab den Fehlercode 8 zurueck. Programmende.
lentest:~# grep dummy /etc/passwd dummy:x:1001:1001:Crash T. Dummy,,,:/home/dummy:/bin/bash
lentest:~# last | head -n 3 dummy tty2 Wed Apr 6 09:22 - 09:38 (00:15) dummy tty2 Wed Apr 6 09:22 - 09:22 (00:00) root tty1 Wed Apr 6 09:20 still logged in
Laut last ist der User dummy nicht mehr eingeloggt. Na sowas.
Dass /var/log/wtmp bei Dir fehlt, koennte damit zusammenhaengen, dass es ein vserver ist (oder interpretiere ich den hostnamen "vs2801" falsch?). Auch das hier muesste vserver-spezifisch sein: vs2801:~# fuser -k buum Cannot stat file /proc/1/fd/10: Keine Berechtigung
Aber zurueck zu userdel.
lentest:~# strace -o log userdel dummy
Untersuchen der strace-Ausgabe in log zeigt, dass userdel die Datei /var/run/utmp oeffnet. Diese Datei zeigt die momentan eingeloggten User, waehrend /var/log/wtmp die Login-History speichert. Aus /var/run/utmp bezieht auch pinky (rein lokal arbeitende Version des Kommandos finger) seine Information. Auch pinky zeigt den User dummy noch als eingeloggt an:
lentest:~# pinky Login Name TTY Idle When Where root root *tty1 Apr 6 09:20 dummy Crash T. Dummy ?pts/0 ??? Apr 6 09:22 :tty2:S.0
Das Problem ist also, dass der Login-Status aus /var/run/utmp nicht korrekt entfernt wurde. Und jetzt kommen wir zurueck zum pkill -KILL. Prozesse immer gleich mit Signal 9 (SIGKILL) zu beenden ist Mist, typisches Halbwissen aus Webforen. SIGKILL hindert den jeweiligen Prozess daran sich geordnet zu beenden, Temporaerdateien zu loeschen, etc.
Statt gleich mit pkill -KILL Rambo zu spielen, erstmal SIGTERM und _danach_ SIGKILL schicken, dann klappt's auch mit /var/run/utmp.
lentest:~# pkill -TERM -u dummy lentest:~# pkill -KILL -u dummy lentest:~# pinky Login Name TTY Idle When Where root root *tty1 Apr 6 09:20
lentest:~# userdel dummy
Na geht doch.
Ansonsten willst Du Dir die Manpage von userdel durchlesen, speziell die Option -f wird Dich interessieren.
Gruss, Chris