Dockerコンテナープロセスをコンテナー内のルートとして実行することは安全ではないと見なされます。しかし、私がクリアする必要があるいくつかの疑問があります:
コンテナがドッカーソケットやルートファイルシステムの一部をホストからマウントできない場合でも、同じように安全ではありませんか?
コンテナーと仮想マシンの1対1のマッピングがある場合でも、同じように安全ではありませんか?たとえば、VMごとにコンテナを1つだけ実行していますか?
コンテナーが特権として実行されていない場合でも、安全ではありませんか?
ルートとして実行することと特権として実行することの違いは何ですか?
上記とは別に、偽のルートを偽る簡単な方法はありますか?ユーザーID 0をホスト上のより大きな番号1001のようにマッピングするにはどうすればよいですか?
あなたの質問に答える:
いいえ同じではありません。コンテナーがDockerソケットにアクセスするように設定しないと、コンテナーはホストDockerコンテナーでの作成、チェック、削除、またはその他のアクションを実行できなくなります。ただし、コンテナ内では、ルートユーザーがソフトウェアを「壊す」ことができます。
仮想マシンごとに1つのコンテナーのみを実行するということは、誰かがコンテナーをハッキングして何らかの方法でコンテナーから脱出した場合、VMにのみアクセスすることを意味します。それは良い習慣かもしれませんが、私の意見では過剰です。異なるネットワーク上にコンテナーを作成して、それらを分離することができます。ただし、この方法でエスケープすると、すべてのコンテナーにアクセスできます。
「特権なし」でコンテナを実行する方が、「特権付き」で実行するよりも安全です。それは明らかです。
コンテナーをルートとして実行するとは、コンテナー内のプロセスがコンテナー内のすべての特権を持つことを意味します。コンテナーを特権として実行するとは、コンテナーがホスト上でもすべての特権を持つことを意味します。これは通常、いくつかの特別な場合に行われます...ホスト上の物理的なワイヤレスネットワークインターフェイスにアクセスする必要のあるコンテナーがあるとします。特権として起動する必要があるか、コンテナがデバイスにアクセスできないことを確認してください。
それが役に立てば幸い。