Dockerコンテナー内のフォーク爆弾を防ぐ


8

私は現在、私が呼び出したユーザーのプロセス数を制限することに苦労していますsandbox

私は/etc/security/limits.confこのように内部でプロセス制限を構成しました:

sandbox            hard    nproc            100

しかし、sandboxユーザーとしてコンテナーに接続したい場合、sshは次を返します:

shell request failed on channel 0

としてログインしてrootsandboxユーザーごとに実行されているプロセスの数を確認しましたが、5未満です。

では、sshを介してログインできない理由は何ですか?
制限を設定しなくても、sandboxユーザーのsshログインは問題なく動作します。

またはフォーク爆弾攻撃を防ぐ他の方法はありますか?

回答:


2

sshdへの接続時のエラーは/var/log/auth.logに記録されます(debianベースのOS、またはredhatベースのシステムのセキュリティ)。

そうでない場合は、sshdを設定LogLevel VERBOSE/etc/ssh/sshd_configて再ロードします。これは、sshdが次に接続を拒否する理由を示します。

とはいえ、フォークボムリミッターに戻ります。Dockerマシンは、LinuxのコンテナーシステムであるLXCに基づいています。LXCはCGROUPSを使用して、各コンテナのリソース制限を管理しています。

/ sys / fs / cgroupsで、実行中のLXCの制限を設定できます。/Var/lib/lxc/vmname/configで、ブート時に適用される制限を設定できます。

cgroup内のプロセス数の制限は、タスクカウンターサブシステムによって行われます(2011年にLinuxカーネルに追加されましたhttp://lkml.iu.edu//hypermail/linux/kernel/1109.0/01455.html

最近の十分なLinuxカーネルでは、cgroupに許可されるプロセスの数を制限するために、次のような行をlxcの構成ファイルに追加します。

lxc.cgroup.tasks.limit = 1024 

最大1024プロセス

(免責事項:情報は実際のマシンでは確認されませんが、確認する必要があります)


1
ありがとう。最新のDockerコンテナーはLXCに基づいていないため、LXCはドライバーとして使用できます。Dockerコンテナーのネイティブドライバーは、カーネルの名前空間に直接基づいています。しかし、私はcgroupのアイデアが本当に好きです。プロセス数を制限できる可能性があることを知りませんでした。ぜひやってみます。
eXPi 14年

2
今日の時点で、タスクカウンターサブシステムはまだ公式カーネルに含まれていません。
Fabian Jakobs、2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.