Ho appena capito che il mio sistema non sta limitando correttamente la quantità di processi per utente, quindi non impedisce a un utente di fare un fork-bomb e di far schiantare l'intero sistema:
user@thebe:~$ cat /etc/security/limits.conf | grep user
user hard nproc 512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.
Si tratta di un bug o perché ignora il limite limits.conf
e perché non si applica il limite che ulimit -n
afferma di essere?
PS: Non credo davvero che il limite di memoria sia stato raggiunto prima del limite di processo. Questa macchina ha 8 GB di ram e ne usava solo il 4% al momento in cui ho lasciato cadere la bomba.
MODIFICARE:
Sono riuscito a riprodurlo su un CD live. Quindi immagino che questo debba essere un bug. Fondamentalmente finisce per uccidere tutti i processi, compresi gli aspetti critici del sistema come X11, SSHD ecc.
Qualsiasi utente può arrestare il sistema in modo anomalo.
user@thebe:~$ ulimit -u
1024
ulimit -u
ottengo 31325. Quando corro ulimit -u 512
va 512. Quando corro quella bomba, il resto del mio sistema va bene.
ulimit -u