Welche Auswirkung hat es auf einen Server, wenn Sie alle Root-Prozesse beenden?

9

Es waren andere Entwickler als root angemeldet, die ich rausschmeißen wollte.

Also habe ich ausgestellt

pkill -KILL -u root

Dann wurde mir klar, dass ich wahrscheinlich alle Arten von Wurzelprozessen getötet habe.

Habe ich mein System beschädigt? Ich kann es jetzt nicht über SSH erreichen.

UPDATE: Der Webserver läuft noch. Aber ich kann jetzt keine Verbindung über SSH herstellen. Ich habe keine Ahnung, was ich getan habe.

Buttle Butkus
quelle
1
Sie müssen es mit ziemlicher Sicherheit neu starten. Wenn Sie können, senden Sie ihm ein ACPI-Abschaltsignal, anstatt nur den Stecker zu ziehen.
Skyhawk
1
Iain, IME, das ist nicht ganz richtig. Sie müssen als Root beginnen, um sich an die privilegierten Ports zu binden, aber dann eine ganze Reihe von Prozessen starten, die einem nicht-privaten Benutzer gehören, der für die Privilegientrennung konfiguriert ist. Im Fall von Apache steht jedoch normalerweise immer noch ein einziger Root-Prozess an der Spitze. Ich stimme Ihnen jedoch zu, dass alle Prozesse, die das eigentliche Web-Serving ausführen, nicht im Root-Besitz sind.
MadHatter
5
Fehler zu machen ist der beste Weg zu lernen . Bitte stimmen Sie nicht einfach ab, weil jemand einen schweren Fehler gemacht hat. Diese Frage ist umstritten, sollte aber nicht geschlossen werden. Stattdessen fordere ich Sie auf, den Gedanken hinter der Frage genauer zu lesen und zu erklären: Was passiert, wenn ich alle Root-Prozesse töte? Warum lebt der Gastgeber noch? Warum kann SSHD keine Anfragen bedienen, der Webserver jedoch? Wie ist es möglich, dass der Webserver überhaupt lebt? Wir sehen keine gute kanonische Antwort auf diese Art von Fragen. Die Antworten könnten wertvolle Erklärungen zur Funktionsweise von Unix liefern.
Stefan Lasiewski
2
Vielen Dank, Stefan, dass du deinen Kopf und dein Herz benutzt und nicht zwanghaft auf den Downvote-Button geklickt hast, wie es so viele andere tun. Wenn niemand jemals Fragen zu seinen Fehlern auf Stackexchange-Sites veröffentlicht, aus Angst, herabgestuft zu werden, wird niemand von ihnen lernen. Ich helfe Menschen bei meiner Frage und sollte nicht dafür bestraft werden.
Buttle Butkus
1
Ich habe die Frage positiv bewertet, weil sie gut zum Lachen war, keine Beleidigung. Es ist, als würde man sich ein Video ansehen, in dem jemand beim Schreiben einer SMS in ein Loch fällt.
UncaAlby

Antworten:

15

Eine schnelle Antwort ist, dass Sie sshd getötet haben (und Lord weiß, was noch) und sich nicht mit SSH wieder beim System anmelden können. Sofern Sie keine andere Methode haben, um Zugriff auf das System zu erhalten (z. B. Remote-Konsole, IPMI usw.), müssen Sie das System neu starten, um den SSH-Dienst und andere Dienste wiederherzustellen.

Hoffentlich haben Sie physischen Zugriff auf die Box. In diesem Fall müssen Sie wahrscheinlich nur den Netzschalter drücken. Stellen Sie fest, dass Sie viele Prozesse beendet haben, und seien Sie auf Korruption vorbereitet. Linux wurde entwickelt, um sich von einem Systemabsturz zu erholen, und Sie haben im Wesentlichen einen manuellen Absturz ausgelöst. Die meisten Dinge sollten sich nach einem Neustart gut erholen. Möglicherweise haben Sie alle möglichen interessanten Fehlermeldungen in den Protokolldateien.


Lange Antwort:

Dies ist ein großartiges Gedankenexperiment und eine gute Frage zum Vorstellungsgespräch. "Was passiert, wenn Sie X gemacht haben ..." Dies ist eine unterhaltsame Sache, die Sie auf Ihrer eigenen privaten virtuellen Maschine ausprobieren können, sollte aber niemals auf einer realen Box durchgeführt werden. Jeder macht Fehler. Denken Sie daran und lernen Sie aus Ihrem Fehler. Fehler zu machen ist der beste Weg zu lernen. Fehler in der Produktion zu machen ist eine schmerzhafte Lektion, die gelegentlich in Ihrer Karriere vorkommen wird.

pkill -KILL -u Wurzel

Dieser Befehl sendet ein 'SIGKILL' (z kill -9. B. KILL ist ein Alias ​​für SIGKILL) an alle Prozesse, deren Eigentümer root ist. Es ist eine sehr schlechte Sache, auf einem System zu tun. kill -9sollte vermieden werden, außer als letztes Mittel.

Ihr Befehl hat alle Prozesse, die Root gehören, aggressiv beendet. Die Prozesse wurden sofort beendet und hatten keine Chance, aufzuräumen. Um einen Eindruck davon zu bekommen, was Sie getötet haben, melden Sie sich bei einer fehlerfreien Linux-Box an und listen Sie die Prozesse auf, deren Eigentümer root ist. Verwenden Sie dazu einen Befehl wie diesen. Sie müssen normalerweise nicht root sein, um diese Befehle auszuführen:

$ pgrep -u root -l
$ ps aux | grep root

Möglicherweise haben Sie Init (PID # 1) beendet, wodurch neue Prozesse entstehen. Ihr System kann möglicherweise keine neuen Prozesse erstellen. Es kann also vorerst weiter funktionieren, ist aber krank und muss so schnell wie möglich repariert werden. Mit der Zeit wird das System immer kranker. Je länger Sie warten, desto schlimmer wird es.

UPDATE: Der Webserver läuft noch. Aber ich kann jetzt keine Verbindung über SSH herstellen. Ich habe keine Ahnung, was ich getan habe.

Ich vermute, dass Sie Apache verwenden. Es scheint, dass die untergeordneten Prozesse des Webservers noch ausgeführt werden, da sie nicht dem Benutzer 'root' gehören. Der übergeordnete Webserver-Prozess gehört jedoch normalerweise root und Sie haben ihn beendet. Infolgedessen werden keine neuen untergeordneten Prozesse erzeugt. Dies ist eine Zeit lang in Ordnung, da Sie wahrscheinlich über genügend untergeordnete Prozesse verfügen, um Anforderungen zu bearbeiten. In der Regel bleiben diese untergeordneten Prozesse bestehen, bis sie beendet werden oder abstürzen. Die schnellste Lösung besteht wiederum darin, den Computer neu zu starten.

Stefan Lasiewski
quelle
Ich habe keinen physischen Zugang, aber ich werde etwas herausfinden. Ich war angenehm überrascht zu sehen, dass Apache immer noch funktioniert. Die Maschine läuft also gut ohne Root. PS: Wenn Sie die Frage abgelehnt haben, habe ich den Titel verbessert.
Buttle Butkus
1
@ ButtleButkus Ich habe die Frage nicht abgelehnt. Ich begann die Frage zu beantworten und interessierte mich dann ziemlich dafür, warum die Dinge so funktionieren, wie sie funktionieren.
Stefan Lasiewski
1
Stefan, danke für deine Antwort. Dies ist die einzige Antwort, die ich von Anfang an positiv bewertet habe, da sie sinnvoll war. Ich habe das System innerhalb von 10 Minuten neu gestartet und seitdem scheint alles wunderbar zu funktionieren.
Buttle Butkus
4

Sie müssen höchstwahrscheinlich Ihr System neu starten, da Sie so gut wie jeden kritischen Dienst auf dem System beendet haben. Wie Sie das tun, hängt davon ab, über welche Tools Sie verfügen oder welchen Transport Sie zum Rechenzentrum benötigen.

user9517
quelle
Es scheint nicht so, als hätte ich alle kritischen Prozesse beendet. Warum hätte der Webserver sonst immer noch perfekte Webseiten bereitgestellt?
Buttle Butkus
@ButtleButkus: Ihr Webserver wird nicht als Root ausgeführt.
user9517
@lain Wenn auch nur ein einziger "kritischer" Dienst beendet würde, würde der gesamte Server ausfallen. Es scheint, als hätte der Befehl tatsächlich keinen einzigen kritischen Dienst beendet. Es hat jedoch einen bequemen Dienst getötet: sshd.
Buttle Butkus
2
Nur weil ein kritischer Dienst beendet wird, bedeutet dies nicht, dass die Maschine sofort ausfällt. Ich würde zB meinen Lüftersteuerungsdämon als kritisch betrachten - wenn die CPU-Auslastung steigt, möchte ich, dass sich der Lüfter mehr dreht. Ich könnte den Dienst beenden und tagelang wenig CPU-Auslastung haben, dann greifen plötzlich 1000 Leute auf meine Website zu und meine CPU fängt Feuer. Und es gibt viel mehr weniger wahrnehmbare Möglichkeiten, Schaden anzurichten…
Unhammer
3

Das System wird ausgeführt, weil der Kernel ausgeführt wird. Sie können nicht auf sshd zugreifen, da Sie den Daemon beendet haben. Wahrscheinlich wurde init auch beendet, was bedeutet, dass Sie keine neuen Prozesse erstellen können. Daher werden möglicherweise keine neuen Apache-Verbindungen hergestellt (Konfigurationsparameter angewendet;)).

Sie können kein Signal an die Kernel-Threads senden. Aus diesem Grund wird das System ausgeführt, aber die Dienste im Root-Besitz wurden beendet. Für eine normale Wiederbelebung sollten Sie es neu starten.

Soham Chakraborty
quelle
Danke für die interessanten Details. Ich habe dir eine Gegenstimme gegeben, aber ich gebe Stefan das Häkchen.
Buttle Butkus