Der Standard
:(){ :|:& };:
Diese Implementierung einer Fork Bomb ist die klassische Methode, ein unioxides System direkt crashen zu lassen. In dem Augenblick, da die Bombe zündet, wird das System mit einer exponentiell wachsenden Anzahl an Prozessen überflutet.
Der Schläfer
:(){ sleep 2; :|:& };:
Es werden nach wie vor unendlich viele Child-Processes gestartet, allerdings dauert es jetzt ein klein wenig länger, ehe das System einfriert, denn es ist eine Wartedauer von 2 Sekunden pro Durchlauf eingestellt. Damit wird die Bombe zum Schläfer, denn das Ergebnis der gezündeten Bombe ist nicht sofort ersichtlich.
Der Ninja
:(){ :; };:
Erzeugt 100% CPU-Last mit einem einzigen Prozess, keinem wird es auf den ersten Blick auffallen.
Schutz-Stufe 1: Ressourcen der User begrenzen
ulimit -u
zeigt die Anzahl möglicher Tasks an, die ein User innerhalb seines Kontextes starten kann.
ulimit -u [$ZAHL]
legt die Anzahl möglicher User-Tasks fest.
Wieviel braucht ein normaler User im Alltag?
Eine typische Desktop-Session (GNOME, KDE, Cinnamon) erzeugt:
- 200–800 Prozesse direkt,
- Browser allein kann über 100–300 Prozesse erzeugen (Tabs sind isoliert),
- VSCode, Terminal, Docker, VMs etc. treiben die Zahl locker über 1000.
Daher sind Werte < 512 heute praktisch unbrauchbar.
Realistische Untergrenzen
| Nutzung | Empfehlung (ulimit -u) | Erklärung |
|---|---|---|
| Minimal-User / Server-User ohne GUI | 512–1024 | Reicht für Shell + Tools + kleine Skripte |
| Desktop-User normal | 2048–4096 | Browser, IDEs, systemd –user |
| Power-User / Dev | 4096–8192 | Docker, viele Browser-Tabs, VMs |
Mehr als ~8192 braucht man real eher selten, und je höher man bei den Tasks geht, desto weniger bringt es als Schutz.
Schutz-Stufe 2: systemweite Limits setzen
Anstatt nur ulimit in der Shell:/etc/security/limits.conf oder /etc/security/limits.d/90-hardening.conf:
* hard nproc 4096
* soft nproc 2048
root hard nproc unlimited
Damit gilt:
- Jeder normale User kann maximal 4096 Tasks erzeugen.
- Arbeiten ist jederzeit möglich.
- Eine Fork Bomb verpufft nach ~4096 Prozessen und killt nur den User selbst.
Bonus: systemd schützt dich zusätzlich
Wenn du Systemd-User-Services nutzt (z. B. Desktop-Systeme), kannst du noch härtere Grenzen setzen:
/etc/systemd/logind.conf:
UserTasksMax=4096
oder pro Benutzer in /etc/systemd/user.conf:
TasksMax=4096
Das ist ein realer Hardening-Mechanismus, den viele übersehen.