Docker内からNFS共有にアクセスしてほしい。問題はDockerの内部にあり、rootになることができ、そのユーザーになることで誰のファイルにも書き込みアクセスできるようになります。これに対する解決策はありますか?
考えられる解決策の1つは、NFS共有をコンテナー内ではなくDockerノードにマウントすることです。このように、コンテナは、共有全体ではなく、作成ファイルで指定した共有内のボリュームにのみアクセスします。これは私の会社で採用しているアプローチであり、小規模な展開では適切に機能するようです。私たちにとってのもう1つの利点は、共有をマウントするサーバーの数が大幅に削減されたため、stunnelを介したセキュリティ保護が容易になったことです。
ユーザーがコンテナーのルートを取得して他のユーザーのファイルを表示できる場合、これらのファイルの変更を防ぐ方法はありません。
したがって、これを防ぐ必要があります。コンテナが「見る」ことができるものを、書き込みが許可される可能性のあるファイルに制限するか、コンテナがルートを取得しないようにします。
Jasonの提案は素晴らしいです-コンテナの「表示」を共有に制限して、書き込みを許可する必要のあるファイルにのみアクセスできるようにします。
ただし、コンテナで他の人のファイルをreadできるようにしたい場合は、rootを防ぐ必要があります。
または、SELinux、CGroups、およびおそらく他のそのようなきめ細かいコントロールに本当に精通してください。
これがあなたが望んでいる答えだとは思いません。誰かがあなたにこれをする方法を与えるならば、私はそれを聞くために愛でしょう。
「信頼できる公式の情報源から引き出す」という答えが必要ですが、いくつかのソリューションが存在する可能性があり、「最良の」ソリューションは、の全体的な構成によって異なります。配置および希望する結果を得るために必要な複雑さの量。
したがって、少なくとも現在の設定の概要を説明する必要があります。その上で、包括的な回答を提供することができます。
これまでのところ、一般的な考え方として言えることは、最初のステップは、コンテナーからではなくDockerマシンからNFS共有をマウントし、その共有の一部を通常の方法でそれぞれのコンテナーに配布することです。 Dockerで。コンテナーをホストしているDockerマシンのクラスターがある場合、これはすでに簡単な作業ではない可能性があります。
とにかく、そのコンテナのルートユーザーによるその部分のファイルへの自由なアクセスを回避し、NFSレベルであるか、またはサーバーのファイルシステムレベル。これらの2つのオプションのいずれについても、NFSサーバーのシステム管理者である必要があります。NFSサーバーには、各ユーザーに割り当てられたユーザーIDの概念(少なくともsomeの概念)が必要です。各コンテナの。すべてではない場合でも、ユーザーID、少なくともそれらのグループ、ユーザーのグループごとにACLを設定します。
NFSレベル(NFSv4の方が良い)でNFSレベルで何ができるか(かなりたくさん)を学び、POSIX-aclsでファイルシステムレベルを学んでください。コマンドプロンプトでsetfacl
およびgetfacl
コマンドを使用することで、後者を簡単に試すことができます。これらのコマンドを使用可能にするには、オペレーティングシステムの関連パッケージをインストールする必要がある場合があります。