私のシステムがユーザーあたりのプロセス数を適切に制限していないため、ユーザーがフォークボムを実行してシステム全体をクラッシュさせることを妨げていないことに気づきました。
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のRAMがあり、フォーク爆弾を落としたときは4GBしか使用していませんでした。
編集:
私はなんとかライブCDでこれを再現しました。これはバグだと思います。基本的には、X11、SSHDなどのシステムクリティカルなものを含むすべてのプロセスを強制終了します。
すべてのユーザーがシステムをクラッシュさせる可能性があります。
@psusi、ありがとうございますが、同じ結果が得られます:s
—
d_inevitable
user@thebe:~$ ulimit -u
1024
実行する
—
psusi 2012年
ulimit -u
と31325になります。実行するulimit -u 512
と512になります。そのフォーク爆弾を実行すると、システムの残りの部分は問題なく動作します。
ulimit -u