我刚意识到我的系统并没有适当地限制每个用户的进程数量,因此也不能防止用户进行分叉炸弹并使整个系统崩溃:
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上重现了这一点。所以我想这一定是一个错误。基本上,它最终杀死了所有进程,包括X11,SSHD等对系统至关重要的事物。
任何用户都可能使系统崩溃。
@psusi,谢谢,但是得到的结果相同:s
—
d_inevitable 2012年
user@thebe:~$ ulimit -u
1024
当我运行时,
—
psusi 2012年
ulimit -u
我得到了31325。当我运行时,ulimit -u 512
它得到了512。当我运行该叉子炸弹时,我系统的其余部分就很好了。
ulimit -u