Я просто пришел к пониманию, что моя система не ограничивает объем процессов на пользователя правильно таким образом не препятствование тому, чтобы пользователь делал fork-бомбу и разрушил всю систему:
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% из него в то время, когда я отбросил fork-бомбу.
Править:
Мне удалось воспроизвести это на живом CD. Таким образом, я предполагаю, что это должно быть ошибкой. Это в основном заканчивает тем, что уничтожило все процессы, включая систему критические вещи как X11, SSHD и т.д.
Любой пользователь может разрушить систему.
Оказывается, что /etc/security/limits.conf
работает, но нуждается в перезагрузке, прежде чем его интерпретируют. Выйти не достаточно.
Я рекомендую кому-либо ограничить конфигурационный файл, например
user hard nproc 512
Заменить user
любым именем пользователя, которое вы хотите ограничить.
Или, лучше:
@group hard nproc 512
Замените group
любой группой пользователей, которую вы хотите ограничить.