Ich habe das vor einiger Zeit gegoogelt und ein paar Dinge bemerkt, aber ich vermute, dass Google nicht alle kennt. Wie können Sie Benutzer von Ihrer Linux-Box abbringen? auch, wie gehen Sie vor, um zu sehen, dass sie an erster Stelle angemeldet sind? und verwandte ... funktioniert Ihre Methode, wenn der Benutzer in einem X11 DE angemeldet ist (keine Anforderung, auf die ich nur neugierig bin)?
users
administration
Xenoterracid
quelle
quelle
who(1)
oder gefunden werdenw(1)
. Die einzige idiotensichere Möglichkeit, potenzielle Rootkits zu entfernen, besteht darin, das System vollständig zu bereinigen und neu zu installieren.Antworten:
Es gibt wahrscheinlich einen einfacheren Weg, aber ich mache das:
Sehen Sie, wer an Ihrem Computer angemeldet ist - verwenden Sie
who
oderw
:Suchen Sie die Prozess-ID der Shell, mit der das TTY verbunden ist:
Über die bevorstehende Trennung lachen (dieser Schritt ist optional, wird aber empfohlen)
Beenden Sie den entsprechenden Vorgang:
Ich habe gerade herausgefunden, dass Sie die Schritte 1 und 2 kombinieren können, indem Sie
who
die-u
Flagge geben. Die PID ist die Zahl rechts davon:quelle
kill -9
huh? Sie befinden sich in diesem Fall wirklich im BOFH-Modus.kill -9
und beginne stattdessen mit sanfteren Signalen , aber in diesem Zusammenhang ist es wahrscheinlich nicht so wichtig. Ich hinterlasse nur einen Kommentar, falls die Leute den Witz verpassen.Wie Micheal bereits betont hat, können Sie mithilfe
who
von ermitteln, wer angemeldet ist. Wenn jedoch mehrere Prozesse vorhanden sind, gibt es eine bequemere Möglichkeit, als jeden Prozess einzelnkillall -u username
zu beenden : Mit dieser Option können Sie alle Prozesse dieses Benutzers beenden.quelle
killall
ist auch in grafischen Umgebungen etwas geeigneter, da mehr als nur eine Shell zu töten ist.Nekromantie!
Ich schätze den Humor der akzeptierten Antwort, aber beruflich kann ich es nicht befürworten.
Die anmutigste Methode, die mir bekannt ist, besteht darin, ein -HUP an die Shell zu senden, um ein Auflegen eines Benutzers zu simulieren. Sie können dies an den inaktiven sshd des Benutzers senden, um den Verbindungsverlust zu simulieren, wodurch eine Bereinigung der gesamten Shell-Umgebung (einschließlich der untergeordneten Shells) ausgelöst wird, oder dies an bestimmte verschachtelte Shells senden (z. B. diejenigen, die sich in einem getrennten Terminal-Multiplexer befinden) verhindern, dass Sie ein Dateisystem aushängen, wenn Sie wirklich präzise sein möchten.
Mit
write
Nachrichten unheilbar Leerlauf ptys zu senden , bevor Sie sie starten ist zwar ein Spaß Hobby.quelle
echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP
Melden Sie den Benutzer 'Benutzername' ab:
Sehen
man skill
quelle
Ein weiterer nützlicher Befehl ist
pkill
hierpkill -u username && pkill -9 -u username
.killall
haben den Nachteil, dass es unter Solaris IIRC etwas völlig anderes bedeutet -pkill
haben auch etwas fortgeschrittenere Optionen.quelle
Dies deutet zunächst auf ein größeres Problem hin. Wenn Sie Benutzer haben, denen Sie nicht vertrauen, sollten Sie diese wahrscheinlich anpassen und ein neues Image erstellen.
In diesem Sinne können Sie einige oder alle der folgenden Aktionen ausführen:
quelle
you have users that you don't trust on your system
... Oder es könnte einfach sein, dass Sie eine als Botschaft an die anderen töten. Ist das Bekenntnis des Systemadministrators schließlich nicht "Es ist besser, gefürchtet zu werden, als geliebt zu werden"? Abgesehen von allen Witzen sollte Machiavelli ein O'Reilly-Buch schreiben.Ich habe mich umgesehen und konnte kein einziges Skript finden, um diese Aufgabe zu automatisieren.
Basierend auf den hier vorgeschlagenen Lösungen habe ich alles in einem interaktiven Bash-Skript gemischt , das die Benutzer und Sitzungen auflistet, aus denen
who -u
der Benutzer auswählen kann, was zu tun ist.Sie können dann entweder:
killall -u <username> -HUP
kill <PID>
Alle erforderlichen Informationen stammen von
who -u
und werden dann mitmapfile
und analysiertawk
.Ich werde die Möglichkeit hinzufügen,
write
später eine Nachricht zu senden (Verzögern des Vorgangs).Ich werde wahrscheinlich die Option hinzufügen, mit der auch eine bestimmte Sitzung beendet werden kann
kill -9
. Aber ich hatte keine Probleme damitkill
und sollte, wie von anderen angedeutet,kill -9
nach Möglichkeit vermieden werden.Sie können den Code auf Github überprüfen, wenn Sie es versuchen möchten, oder mehr darüber erfahren, wie ich es auf automatisierte Weise mache:
quelle
Am Ende geht es darum, die Prozesse zu identifizieren und zu beenden, die einer Benutzer-ID gehören, zugeordnet sind oder aus dieser hervorgehen. Welche Befehle Sie verwenden, um dieses Ziel zu erreichen, ist nicht unbedingt wichtig, solange Sie dort ankommen.
Grundsätzlich zwei Antworten ...
Option A: Veranlassen einer Abmeldung von diesem Benutzer, für welche und wie viele Anmeldungen er auch immer hat. Dies würde also bedeuten, die Prozesse zu identifizieren, die einem Benutzer gehören, von der UID nachverfolgt werden können und als Teil eines Anmeldeprozesses für die von Ihnen ausgeführte Linux-Distribution klassifiziert sind. Beachten Sie, dass es vor dem "Login" übergeordnete Prozesse wie SSH oder VNC und nach dem "Login" untergeordnete Prozesse wie GDM gibt. Wenn Sie einen übergeordneten Prozess beenden, wird der untergeordnete Prozess normalerweise beendet, aber nicht immer. Sie möchten also diese anderen Prozesse beenden, die nach dem Abmelden offensichtlich nicht mehr benötigt werden. Auf diese Weise werden Hintergrundjobs weiter ausgeführt, da dies ein harmloser Benutzer ist und Sie ihn möglicherweise nur abmelden möchten. Soweit ich weiß
/usr/bin/w
und/usr/bin/who
berichten werde, wer den Anmeldevorgang durchlaufen hat.Option B: Beenden Sie alle Prozesse, die einer bestimmten Benutzer-ID gehören, vollständig. Dies würde lediglich bedeuten, dass alle Prozesse, die diesem Benutzer gehören, beendet werden. Dies würde sie auch abmelden , wenn sie angemeldet sind . Das muss nur einfach sein
ps -ef | grep <uid>
und dann all diese Prozesse auf jede akzeptable Weise beenden.fwiw in SLES 11 berichtet es
kill -9
FTW!quelle
Meiner Meinung nach ist es nicht wirklich nützlich, es zu verwenden,
killall -u username
da Sie sich selbst auf den Kopf stellen werden, wenn es derselbe Benutzer ist wie Sie. Sokill
wird der Prozess eine bessere Lösung.quelle
Dieser Befehl funktionierte hervorragend für die Benutzeroberfläche.
Einige Umleitungen, falls Sie sie brauchen.
quelle