2012-05-13 18 views
1

私はUbuntu 12.04でコンピューティングサービスをホストしています。私がユーザーを凍結させないようにする方法が必要です。私は現在、Linuxでsetrlimit(RLIMIT_NPROC)を使用しています。ただし、これは実際には、指定されたUIDのプロセス数にグローバルな制限を設定します。私のサービスは多くの並列ジョブを持ち、すべて同じUIDで実行されているため、1つのプロセスがDOS全体でサービスを実行できます。フォーク/子プロキシの制限数

代わりに私は制限を設定する方法を探しています。現在のプロセスの子プロセスの再帰的な数。私はLinuxを調べるように言われているcgroups/libcgroupしかし、私は正直なところ、これが私の問題を解決する方法を本当に理解していない。任意のヒント?

答えて

1

インターネットでは、フォークボンズを防止する(読み取る:緩和する)唯一の方法は、RLIMIT_NPROCを設定することです。おそらく、ユーザIDが "これまでに分岐したプロセス"を呼び出す唯一の実用的な場所だからです。

提案:サービスをいくつかのUIDの下で実行し、サービスを呼び出すたびにそのサービスを選択してください。フォーク爆弾によるDOSへの不正クライアントの能力は、使用されるUIDの数に比例して制限されます。

サービスの最上位プロセスがルートとして実行されていない限り(通常は悪い考えとして)、SUIDヘルパープログラムが必要になるでしょう。