web-dev-qa-db-ja.com

Docker / LXC内のrootユーザーがシステム全体のセキュリティを破ることはできますか?

私の質問はおそらくDockerよりもLXCについてですが、Dockerイメージ内のrootユーザーがHost全体にアクセスするのを防ぐためのセキュリティメカニズムは何でしょうか。

もっと正確に言うと、危険なことができるようになるまでに、そのようなrootユーザーの能力の限界は何なのでしょうか。

通常、教育目的のために、Dockerイメージ内からカーネルモジュールをロードする必要があります。このカーネルモジュールはシステム全体からアクセスできますか?また、そうでない場合、制限はありますか?また、LXCはカーネル空間内のメモリ分離をどのように処理していますか?

簡単に言うと、システムに害を及ぼすことなくLXCをどこまで使用できるかを知りたいのです。

14
perror

簡単な回答:Dockerコンテナーのルートcan脱獄してシステムを危険にさらす

Dockerは、開発者とシステム管理者の生活を単純化することを目的としており、相互に分離されたプログラムを含むことを目的としていません。いくつかの安全機能が組み込まれていますが、それらは主な目的ではありません。アイデアは、アプリケーションとすべての必須コンポーネントが一緒にパックされたコンテナーを出荷し、ユーザーが問題なく起動できるようにすることで、誤動作しているユーザーやアプリケーションをチェックしないようにすることです。

コンテナー内でルートアプリケーションを実行しているユーザーがコンテナーから離れてホストを危険にさらすことを可能にするエクスプロイトがいくつかあります。 Dockerはこれらの抜け穴を修正するためにいくつかの対策を講じましたが、それらを採用するのは面倒です。

このDockerセキュリティ記事 は、ユーザーにモジュールをロードさせないように指示します。モジュールのロードを許可するには、ユーザーが簡単に刑務所から解放されるようにします。セキュリティが必要で、モジュールをロードできるようにする場合は、VMを使用します。

Xen、VirtualBox、またはKvmを使用して軽量の仮想マシンを作成でき、それらは互いに分離されます。すべてのユーザーにイメージのルートを与えることができ、ユーザーはお互いに、またはホストシステムを台無しにできなくなります。

13
ThoriumBR