Dockerは巨大なセキュリティホールをインストールしますか?

Dockerは巨大なセキュリティホールをインストールしますか?

私がUbuntuシステムを持っているとしましょうsudo apt install docker.io。端末アクセス権を持つ人は、誰でもrootにエスカレーションできるようにシステムに大きなセキュリティホールを設定しましたか?

どのディレクトリでもコンテナ内のボリュームにマウントでき、コンテナ内のルートディレクトリに昇格でき、マウントされたボリュームで欲しいものは何でもできると思います。これらすべてが間違っているようで、何か欠けているような気がします。それとも、単純でUbuntuリポジトリにパスワードを持たない「sudo」の代替手段は実際にありますか?

答え1

正確ではありませんが、dockerグループ内の誰もがrootにアップグレードできるようにします。これは/usr/share/doc/docker.io/README.Debian:

アップストリーム文書に記載されているように(https://docs.docker.io)、Dockerは「docker」グループの非ルートユーザーが「docker.sock」にアクセスしてデーモンと通信できるようにします。 「docker」グループに自分自身を追加するには、次のコマンドを使用します。

adduser YOURUSER docker

アップストリームドキュメントに記載されているように、「docker」グループ(およびDocker APIにアクセスする他の方法)はルートと同じです。マシンがroot権限を持つユーザーを信頼していない場合、Dockerはそのユーザーを信頼しないでください。 Dockerセキュリティに関する追加情報に興味がある場合は、アップストリームドキュメントの「Dockerセキュリティ」ドキュメントをお読みください。

https://docs.docker.com/engine/security/security/

同等のルートを必要とせずに(ほとんどの)OCIコンテナを実行することに興味がある場合は、次の点を確認してください。ボードマン

答え2

カント。 Dockerをインストールすると、デフォルトでは誰もDockerを使用できません。

$ docker info  
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/info: dial unix /var/run/docker.sock: connect: permission denied

一般ユーザーはDockerデーモンに接続する権限もなく、コンテナに何かを実行するように指示することもできません。

一方、このグループdockerのすべてのユーザーは実際にホストに対するroot権限を持ちます。ユーザーがホストに対するroot権限を付与せずにDockerコンテナを作成できるようにすることは非常に困難です。コンテナ設定が安全な場合は、ユーザーがDockerコンテナでアプリケーションを実行できるようにすることができます。セキュリティ構成には、ホストの機密ファイルへのアクセスを許可しないでください。USERコンテナ内でルートアクセスを許可しないようにするための指示を含める必要があります。 (ルートがコンテナを脱出するのを防ぐことは可能ですが、難しいです。)

「sudoの交換」は設置だけではありませんadduser alice dockeralice ALL = ( : docker) docker/etc/sudoersdocker.io

答え3

はい、しかし思ったほど悪くないでしょう。他の回答からわかるように、いくつかのアクセス制御があるため、任意のローカルユーザー(アクセスリスト内のユーザーのみ)にすぐにrootアクセス権を付与することはありませんが、まだ大きな銃です。ドッカーはサンドボックスではありません、少なくとも標準構成ではありません。

可能であれば、読んで使用することを検討する必要があります。根のないドッカー、または少なくとも使用ユーザーの再マッピングモデル。これはサンドボックスのように機能し、慎重に設定すると、Dockerにアクセスできるユーザーがホストからroot権限を取得することを許可しません(少なくとも他のローカル脆弱性がない場合)。

関連情報