Senden Sie einen Linux-Server ins Trudeln
11 marzo 2008, 6:54 Shell , System- , Tips & Tricks 11. März 2008, 06.54 UhrHeute morgen las ich einen Beitrag, dass eine scheinbare Verletzlichkeit von Linux-Systemen beschreibt. Dies ist eigentlich eine Folge von Zeichen, dass - wenn von der Kommandozeile aus gestartet - schafft eine Endlosschleife, was in der Sättigung der Block-RAM und CPU. Das ist also nicht ein Mangel an Linux, sondern eine offensichtliche logischer Fehlschluss dieser startet die Zeichenfolge auf jedem Betriebssystem, das ausgestattet ist bash. Der Autor des post legt jedoch nahe, die einfachste und effektivste Weg, um die Auswirkungen der mikroskopischen, aber gefährliche Skripte zu lindern.
Vielleicht dieses Artikels kann nützlich sein, um etwas zu dämpfen "apologetischen Tönen, mit denen er lobt die Stahl-Betriebssystem GNU / Linux: Es gibt eine Folge von Zeichen, die nur wenige, wenn in das Terminal eingegeben haben, senden Sie das gesamte System ins Trudeln. Hier wird der säumige Code:
: () { : | : & };: Wie ist es möglich, dass diese kurze und rätselhaften String kann solche Verwüstung verursachen?
In Wirklichkeit, was passiert, ist ganz normal, und die Erklärung, für Menschen mit Lese-Bash-Skript ist wie folgt: die Funktionen in bash.
Die Funktionen in bash, sind mit der Syntax deklariert:
nomeFunzione() { comando1; comando2; ... comandoN; }
nomeFunzione() { comando1; comando2; ... comandoN; } und schreiben ihre Namen werden als normale Befehle aufgerufen.
So zum Beispiel den folgenden Code:
saluta(){ echo "ciao"; };saluta tut nichts erklären, die Funktion hallo, das druckt das Wort Hallo auf dem Terminal, und aufzurufen.
Offending Code in die Funktion aufgerufen wird: (Doppelpunkt).
Nun ja, obwohl es ein besonders exotischer offizielle Bezeichnung für ein bash-Funktion ist.
Wie Sie jetzt sehen können, in Anbetracht der obigen, ruft die Funktion (früher) selbst und leitet die Ausgabe an einen anderen Aufruf von selbst durch das Rohr (vertikaler Strich). Wenn Sie nicht wissen, das Rohr, auf die es keine Notwendigkeit, im Detail für die Zwecke der Erläuterung (und auf denen gibt es reichlich Dokumentation rund) wohnen, es genügt zu sagen, dass der Effekt der Öffnung der beiden Befehle parallel in welcher sie erscheinen, so Code: |: Erscheinen in den Körper der Funktion zweimal und rufen Sie diese Funktion in parallel, was zu einer (Doppel-) Rekursion.
Schließlich hat die Mail & am Ende des Befehls die Wirkung der im Hintergrund laufen.
Nun: Wenn die Funktion gestartet wird, nennt sich selbst zweimal in parallel was zu einer Bifurkation (Gabelung), jede der beiden Verzweigungen, die wiederum spaltet und so weiter. Die Tatsache, dass die Funktionen im Hintergrund laufen wird sichergestellt, dass eine Kündigung (zum Beispiel mit dem Befehl kill), diejenigen, die Sie erstellt haben (so die beiden Verzweigungen und deren Nachkommen) noch nicht abgeschlossen, wie es in der Regel wiederum würde. Dieser unaufhaltsame Start-Funktionen, die exponentiell verläuft, schließlich Sättigung der Ressourcen (CPU und Speicher) und nach einer Weile "Zeit kommt das Einfrieren des Systems.
Das Gegenmittel. Für mehr Angst: das Gegenmittel für diese Fork-Bomben, und es ist einfach ein Limit für die Anzahl der Prozesse können von einem Benutzer gestartet werden.
Original Post:
http://www.tuxbay.org/index.php?option=com_content&task=view&id=152&Itemid=1














