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

d_i*_*ble 8 process ulimit resource-limiting

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

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.
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是为什么它忽略了限制limits.conf,为什么不应用ulimit -n声称的限制?

PS:我真的不认为在进程限制之前达到内存限制。这台机器有 8GB 内存,当我扔下叉形炸弹时,它只使用了 4%。

编辑:

我设法在现场 CD 上重现了它。所以我想这一定是一个错误。它基本上最终会杀死所有进程,包括系统关键的东西,如 X11、SSHD 等。

任何用户都可能使系统崩溃。

d_i*_*ble 8

事实证明这/etc/security/limits.conf确实有效,但需要在解释之前重新启动。注销是不够的。

我建议任何人限制配置文件,例如

user hard nproc 512
Run Code Online (Sandbox Code Playgroud)

替换user为您想要限制的任何用户名。

或更好:

@group hard nproc 512
Run Code Online (Sandbox Code Playgroud)

替换group为您要限制的任何用户组。