フォーク爆弾の保護が機能していない:プロセス数に制限がない


8

私のシステムがユーザーあたりのプロセス数を適切に制限していないため、ユーザーがフォークボムを実行してシステム全体をクラッシュさせることを妨げていないことに気づきました。

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などのシステムクリティカルなものを含むすべてのプロセスを強制終了します。

すべてのユーザーがシステムをクラッシュさせる可能性があります。


-nは、プロセスではなくファイル記述子の数です。あなたが欲しいulimit -u
psusi

@psusi、ありがとうございますが、同じ結果が得られます:suser@thebe:~$ ulimit -u 1024
d_inevitable

実行するulimit -uと31325になります。実行するulimit -u 512と512になります。そのフォーク爆弾を実行すると、システムの残りの部分は問題なく動作します。
psusi 2012年

回答:


8

それ/etc/security/limits.confは機能することがわかりましたが、解釈される前に再起動が必要です。ログアウトでは不十分です。

私は設定ファイルの制限に誰にもお勧めします

user hard nproc 512

user制限したいユーザー名に置き換えます。

または、より良い:

@group hard nproc 512

group制限するユーザーグループに置き換えます。


使用するソフトウェアによっては、シングルユーザーシステムでも512以上のプロセスが必要になる場合があります。これを実装した後、不思議なことに機能しない場合は、許可するプロセスの実際の数を調整する必要があります。
Zeiss Ikon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.