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 等。
任何用户都可能使系统崩溃。
事实证明这/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
为您要限制的任何用户组。