叉炸弹保护不起作用:进程数量不受限制

我刚刚意识到我的系统并没有正确限制每个用户的进程数量,因此不会阻止用户使用分叉炸弹并使整个系统崩溃:

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替换为您要限制的任何用户组。