Я просто пришел к выводу, что моя система не ограничивает количество процессов на пользователя должным образом, таким образом, не препятствуя тому, чтобы пользователь делал вилочную бомбу и разрушал всю систему:
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 и т. Д.
Любой пользователь может сбить систему.
источник
ulimit -u
user@thebe:~$ ulimit -u
1024
ulimit -u
я получаю 31325. Когда я бегу,ulimit -u 512
он идет 512. Когда я запускаю эту бомбу, остальная часть моей системы просто в порядке.Ответы:
Оказывается,
/etc/security/limits.conf
это работает, но нуждается в перезагрузке, прежде чем это будет интерпретировано. Выйти не достаточно.Рекомендую кому-нибудь ограничить конфигурационный файл вроде
Замените
user
любое имя пользователя, которое вы хотите ограничить.Или лучше:
Замените
group
на любую группу пользователей, которую вы хотите ограничить.источник