人々がDocker内でNFS共有にアクセスできることを願っています。問題は、Dockerの内部でrootになり、そのユーザーになり、誰でもファイルへの書き込みアクセス権を持つことができるということです。解決策はありますか?
答え1
考えられる解決策の1つは、コンテナ内ではなくDockerノードにNFS共有をマウントすることです。これにより、コンテナは、共有全体自体ではなく、作成ファイルで指定した共有内のボリュームにのみアクセスできます。これは私が会社が取るアプローチであり、小規模な展開に適しているようです。もう1つの利点は、共有がマウントされるサーバーの数が大幅に減るため、stunnelを介してセキュリティを維持する方が簡単です。
答え2
ユーザーがコンテナからroot権限を取得して他のユーザーのファイルを表示できる場合、そのユーザーがそのファイルを変更するのを実際に防ぐことはできません。
したがって、これが発生しないようにする必要があります。コンテナが書き込みを許可できる「表示」可能なファイルを制限したり、コンテナがroot権限を取得できないようにする必要があります。
Jasonの提案は良いです。コンテナ「ビュー」を共有に制限して、書き込みが許可される必要があるファイルにのみアクセスできるようにします。
ただし、コンテナが次のことを実行できるようにする場合読む他の人のファイルを使用するには、ルートをブロックする必要があります。
またはSELinux、CGroups、その他の詳細な制御機能に慣れてください。
私はこれがあなたが望んだ答えではないと思います。誰かがあなたにこれを行う方法を提供しているなら、私はそうします。良い聞いてみてください。
答え3
あなたは「信頼できる公式ソースから」答えを望んでいますが、問題はそうかもしれないということです。一部ソリューション、「ベスト」ソリューションは、全体の構成によって異なります。そして目的の結果を得るために喜んで耐えることができる複雑さのレベルです。
したがって、あなたは説明する必要があります少なくとも概要を持ってあなたの現在の設定に包括的な答えを提供することができます。
これまで私が言う最善の方法は、一般的なアイデアで、最初のステップはコンテナではなくDockerシステムでNFS共有をマウントし、利用可能な一般的な方法でその共有の一部をそのコンテナに展開することです。ドッカーから。コンテナをホストするDockerマシンセットがある場合、これは単純な作業ではない可能性があります。
いずれにせよ、コンテナのrootユーザーがそのセクションのファイルに自由にアクセスするのを防ぐだけでは十分ではありません。サーバーのファイルシステムレベルで。これら2つのオプションのいずれかを使用するには、NFSサーバーのシステム管理者である必要があり、次の概念(少なくとも一部コンテナごとに各ユーザーに割り当てられるユーザーIDの概念。すべてのユーザーIDでない場合は、少なくともユーザーIDセットを指定してから、各ユーザーセットにACLを設定します。
NFSレベルでできること(かなり多い)については、NFS-acls(NFSv4の方が良い)を参照し、ファイルシステムレベルについてはPOSIX-aclsを参照してください。コマンドプロンプトでコマンドを使用してsetfacl
後者を簡単に試すことができます。getfacl
これらのコマンドを使用するには、オペレーティングシステムに合った関連パッケージをインストールする必要があります。
答え4
ホストにNFSヒューズをインストールしてみましたか?ヒューズを使用してSSH(sshfs)を介して取り付けるとき。それは私にインストールされ、ルートにはこのファイルに対する特別な権限がありません。 (sudoは効果がありません)。