叉炸弹保护不起作用:进程数量不受限制
我刚刚意识到我的系统并没有正确限制每个用户的进程数量,因此不会阻止用户使用分叉炸弹并使整个系统崩溃:
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:我真的不认为在进程限制之前内存限制被击中。 这台机器有8GB的内存,当我放下叉式炸弹时它只使用了4%。
编辑:
我设法在现场CD上重现了这一点。 所以我想这一定是个bug。 它基本上会杀死所有进程,包括系统关键的东西,如X11,SSHD等。
任何用户都可能使系统崩溃。
事实certificate/etc/security/limits.conf
确实有效,但在解释之前需要重启。 注销是不够的。
我建议任何人限制配置文件,如
user hard nproc 512
将user
替换为您想要限制的任何用户名。
或更好:
@group hard nproc 512
将group
替换为您要限制的任何用户组。