La protection contre les bombes à fourche ne fonctionne pas: le nombre de processus n'est pas limité

8

Je viens de réaliser que mon système ne limite pas correctement la quantité de processus par utilisateur, ce qui n'empêche pas un utilisateur de lancer une bombe fourchette et de planter le système entier:

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.

Est-ce un bug ou pourquoi ignore-t-il la limite limits.confet pourquoi n'applique-t-il pas la limite qui le ulimit -nprétend?

PS: Je ne pense vraiment pas que la limite de mémoire soit atteinte avant la limite de processus. Cette machine a 8 Go de RAM et n'en utilisait que 4% au moment où j'ai lâché la bombe à fourche.

ÉDITER:

J'ai réussi à reproduire cela sur un CD live. Je suppose donc que cela doit être un bug. Il finit par tuer tous les processus, y compris les éléments critiques du système comme X11, SSHD, etc.

Tout utilisateur peut planter le système.

d_inevitable
la source
-n est le nombre de descripteurs de fichiers, pas de processus. Vous voulezulimit -u
psusi
@psusi, merci, mais cela donne le même résultat: suser@thebe:~$ ulimit -u 1024
d_inevitable
Quand je cours, ulimit -uj'obtiens 31325. Quand je cours, ulimit -u 512ça passe à 512. Quand je lance cette fourche-bombe, le reste de mon système est très bien.
psusi

Réponses:

8

Il s'avère que /etc/security/limits.confcela fonctionne, mais doit être redémarré avant d'être interprété. Une déconnexion n'est pas suffisante.

Je recommande à tout le monde de limiter le fichier de configuration comme

user hard nproc 512

Remplacez userpar n'importe quel nom d'utilisateur que vous souhaitez limiter.

Ou mieux:

@group hard nproc 512

Remplacez grouppar n'importe quel groupe d'utilisateurs que vous souhaitez limiter.

d_inevitable
la source
Selon le logiciel que vous utilisez, même un système mono-utilisateur peut nécessiter plus de 512 processus. Si vous trouvez que les choses ne fonctionnent mystérieusement pas après avoir été implémentées, vous devrez peut-être ajuster le nombre réel de processus que vous autorisez.
Zeiss Ikon