Защита от вилочной бомбы не работает: количество процессов не ограничено

8

Я просто пришел к выводу, что моя система не ограничивает количество процессов на пользователя должным образом, таким образом, не препятствуя тому, чтобы пользователь делал вилочную бомбу и разрушал всю систему:

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.

Это ошибка или почему игнорируется лимит в limits.confи почему не применяется лимит, который ulimit -nутверждает, что это так?

PS: я действительно не думаю, что предел памяти достигнут предела процесса. Эта машина имеет 8 ГБ оперативной памяти, и она использовала только 4% в то время, когда я сбросил вилочную бомбу.

РЕДАКТИРОВАТЬ:

Мне удалось воспроизвести это на live CD. Так что я думаю, это должно быть ошибкой. В основном это приводит к уничтожению всех процессов, включая критичные для системы, такие как X11, SSHD и т. Д.

Любой пользователь может сбить систему.

d_inevitable
источник
-n - количество файловых дескрипторов, а не процессов. Вы хотитеulimit -u
psusi
@psusi, спасибо, но это дает тот же результат: suser@thebe:~$ ulimit -u 1024
d_inevitable
Когда я бегу, ulimit -uя получаю 31325. Когда я бегу, ulimit -u 512он идет 512. Когда я запускаю эту бомбу, остальная часть моей системы просто в порядке.
psusi

Ответы:

8

Оказывается, /etc/security/limits.confэто работает, но нуждается в перезагрузке, прежде чем это будет интерпретировано. Выйти не достаточно.

Рекомендую кому-нибудь ограничить конфигурационный файл вроде

user hard nproc 512

Замените userлюбое имя пользователя, которое вы хотите ограничить.

Или лучше:

@group hard nproc 512

Замените groupна любую группу пользователей, которую вы хотите ограничить.

d_inevitable
источник
В зависимости от программного обеспечения, которое вы используете, даже однопользовательской системе может потребоваться больше процессов, чем 512. Если после реализации этого вы обнаружите, что что-то таинственно не работает, вам, возможно, придется скорректировать фактическое количество процессов, которые вы разрешаете.
Zeiss Ikon