1

Ubuntu 12.04 でコンピューティング サービスをホストしていますが、ユーザーが forkbombing するのを防ぐ方法が必要です。私は現在setrlimit(RLIMIT_NPROC)Linuxで使用しています。ただし、これは実際には、特定の UID のプロセス数にグローバルな制限を設定します。私のサービスには多くの並列ジョブがあり、すべてが同じ UID で実行されているため、1 つのプロセスがサービス全体を DOS で実行できることを意味します。

代わりに、現在のプロセスの子プロシージャの再帰的な数などに制限を設定する方法を探しています。Linux を調べるように言われましたがcgroupslibcgroup正直なところ、これで問題がどのように解決されるのかよくわかりません。任意のヒント?

4

1 に答える 1

1

インターネットによると、フォーク爆弾を防ぐ (読む: 軽減する) 唯一の方法は、RLIMIT_NPROC を設定することです。おそらく、ユーザー ID が「これまでフォークされたプロセス」呼び出しをアタッチする唯一の実用的な場所であるためです。

提案: サービスをいくつかの uid の下で実行し、サービスの呼び出しごとに 1 つを選択します。次に、不正なクライアントが fork 爆撃を介して DOS にアクセスできる能力は、使用される UID の数に比例して制限されます。

サービスの最上位プロセスが root として実行されない限り (一般的に悪い考えと見なされます)、これを行うにはおそらく何らかの SUID ヘルパー プログラムが必要になるでしょう。

于 2012-05-13T07:46:07.677 に答える