Die “Fork Bomb” und die limits.conf

Ich wurde heute gebeten, doch mal folgende Zeile in der nächstbesten Shell auszuführen:

$ :(){ :|:& };:

Ich könnte nun die Zeile unerklärt lassen. Wissend, dass andere Nutzer der Shell diese aus lauter neugierde ausprobieren. Mache ich aber nicht. Punkt.

Der Anschauligkeit halber hier das Script erst noch einmal in der Standartnotation:

:() {
: | : &
};
:

Dieses kleine Script erzeugt eine Funktion namens “:”, welche sich selbst rekursiv aufruft. Zwei mal. Im Hintergrund. Weil sich die Funktion (ewig) immer und immer wieder selbst aufruft, frisst das sehr schnell eine menge Systemressourcen. Deswegen der Name “Fork Bomb”.

Wer das immer noch nicht versteht, hier eine noch einfachere Version:

forkbomb() {
forkbomb | forkbomb &
};
forkbomb

In der Funktion wird eine sogenannte Pipe erzeugt, welche zwei weitere Instanzen der Funktion (jede wird ein eigener Prozess, nicht nur ein “Child”, welches wenn der Urprozess gekillt, ebenfalls beendet wird.) in den Hintergrund forkt. Für jede Instanz der Funktion entstehen Zwei neue. Das Ergebnis ist eine gewaltige Nummer von Prozessen, welche sehr schnell erzeugt werden.

Wie also unschwer zu erkennen ist, sollte das nicht leichtsinnig ausprobiert werden.

Übrigens sind damit, gerade auf Multiusersystemen fürchterliche Horrorszenarien (für den admin, versteht sich) denkbar. Die Zahl der Prozesse, die ein User maximal gleichzeitig aufrufen kann lässt sich unter Debian (und Derivaten wie Ubuntu) in der Datei /etc/security/limits.conf festlegen. Mehr dazu gibt es hier und hier.

(Dieser Beitrag steht unter einer Creative-Commons-Lizenz und wurde erstmals am Mittwoch, dem 27. Juni 2007 um 1:44 auf jeremy.lonien.de veröffentlicht.)


Über diesen Beitrag


  1. jeremy.lonien 2.7.2007 / 16:13

    Die “Fork Bomb” und die limits.conf

    Ich wurde heute gebeten, doch mal folgende Zeile in der nächstbesten Shell auszuführen:
    $ :(){ :|:& };:
    Ich könnte nun die Zeile unerklärt lassen. Wissend, dass andere Nutzer der Shell diese aus lauter neugierde ausprobieren. Mache ich aber ni…

  2. Gregor 3.7.2007 / 0:01

    Hallo Jeremy,

    das haette ich nun aber nicht gedacht, das ein Einzeiler einen solchen Schaden anrichten kann.

    Guter Artikel .. dankesehr :)

    Gruß

    Gregor

  3. Jeremy 3.7.2007 / 0:13

    Man lernt nie aus. ;-)

  4. Nemesis#13 7.7.2007 / 2:54

    sehr informativ. dane schön. ich hatte keine ahnung, mit wiewenig man schon so viel schaden anrichten kann

  5. Christian 16.7.2007 / 21:09

    Author der originalen Fork-Bomb ist übrigens Jaromil (http://rastasoft.org) Urheber auch der Dyne::bolic Linuxdistribution.

    Show respect where its due ;-)

    Schöner Artikel, danke.

  6. Jeremy 16.7.2007 / 21:17

    @Christian: Danke, das wusste ich nicht. :-)

    (Allerdings wird bei einem 13-Zeichen-Einzeiler die Schöpfungshöhe nicht so ganz erreicht, findest du nicht?)

  7. calypso 23.9.2007 / 9:28

    @Jeremy
    Es kommt doch nicht auf die Länge an, sondern darauf, was man damit anzustellen in der Lage ist.

    (Doppeldeutigkeit ist im Deutschen eine Qual … ;-))

  8. m0e 12.11.2007 / 13:00

    “das haette ich nun aber nicht gedacht, das ein Einzeiler einen solchen Schaden anrichten kann.”

    rm -Rf /*

    Sehr fieser Einzeiler ^^

  9. anno nymus 16.12.2007 / 15:53

    … mit dem Unterschied, dass rm -Rf /* nur mit root-Rechten fatale Folgen hat, während die fork bomb unter Standardeinstellungen auch durch einen gewöhnlichen User ausgeführt werden kann.

  10. ich habe k(ein) Problem - Seite 2 - Linux: Linux-Forum 28.11.2010 / 10:56

    [...] [...]

  11. ich habe k(ein) Problem - Seite 3 - Linux: Linux-Forum 30.11.2010 / 16:13

    [...] [...]

Hinterlasse einen Kommentar

XHTML: Folgende Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>




Safari hates me