web-dev-qa-db-ja.com

rootユーザーまたは非rootユーザーとして「docker-compose up」?

いくつかの記事を読んだ後でも、Dockerコンテナーを実行するためにどのユーザーを使用すればよいかわかりません。 rootユーザーとしてdockerコンテナーを実行する場合、セキュリティ上の懸念はありますか?ルートユーザーとしてdockerコンテナーを実行してもよいですかOR通常のユーザーを使用し、「docker」グループに追加してからコンテナーを実行するOR dockerコンテナーを管理/作成するためだけに追加のユーザーを作成する必要がありますか?

root @ myDockerHost:/ opt/myDockerContainer#docker-compose up -d

VS

chris @ myDockerHost:/ opt/myDockerContainer#docker-compose up -d

VS

dockerusr @ myDockerHost:/ opt/myDockerContainer#docker-compose up -d

(私はドッカーホストのユーザーについて話している-コンテナー内のユーザーではない!)

5
r00tusr

r00tusr!

常に実行しているコンテナーを通常のユーザーとして投票します。

本番システムでは、コンテナはルートとして実行されません。非本番システムでも、コンテナを実行するユーザーはrootとしてプログラムを実行できない場合があります。

ですから、たとえ難しい場合でも、権限のないユーザーとして適切に機能させることが好きです。

また、セキュリティに関する考慮事項もあります。プロのシステム管理者が従う一般的なルールは、本当に必要な場合を除いて、ルートとして何かを実行することはありません。プログラムがrootとして実行されると、コンピューターを完全に制御できるようになり、そのコンピューターに対して実行するように指示されたすべてのことを実行できます。それが作者が意図した優れた作品であるか、作者が閉じるとは考えていなかった脆弱性を介して作者のプログラムに侵入するニードウェルによる悪質な作品であるかどうか。

最終的に、どのプログラムに欠陥があるのか​​を本当に予測することはできないことを学んだので、私たちはもうチャンスをつかみません。

ありがとう!マイク

2
Mike Diehn

それはほとんど違いがありません。 docker-composeコマンドは、すべてのコンテナーコマンドを実行するために、docker.sock(別名docker's API)に接続します。デフォルトでは、このAPIはLinuxのrootユーザーのみがアクセスできるため、Sudoでコマンドを実行している人がよく見かけます。

Root以外のユーザーがこのAPIにアクセスできるようにdockerを構成できます。APIがそのレベルのアクセスを提供するため、これらのユーザーがホストのrootアクセスで信頼できることを確認してください。ユーザーにこのアクセス権を与える方法の詳細については、 この回答 を参照してください。 dockerdデーモンは通常、rootとして実行するように構成されており、このAPIにアクセスするユーザーはほとんど違いがありません(現在、実験的なrootlessモードがあります)。

重要な詳細は、非rootユーザーとしてコンテナー内でアプリケーションを実行することです。これは、rootとして実行され、root以外のユーザーとしてプログラムを起動するsystemdに相当します。このユーザーは、Dockerfile、docker-compose.yml、またはdocker run -u CLIで構成します。

私が「わずかな違い」と言った理由は、構成ファイルが相対パスを持つホストマウントを構成できるためです。 rootまたは別のユーザーとしてdocker-composeコマンドを実行する場合、それらのホストマウントは別のパスである可能性があり、ファイルは別のUIDによって所有されている可能性があります。容器。それ以外は、docker-composeをユーザーとして実行するか、rootとして実行するかの違いは考えられません。

1
BMitch