Podman のマニュアルページボリュームのマウント/バインドについて説明します。
SELinux のようなラベル付けシステムでは、コンテナにマウントされたボリューム コンテンツに適切なラベルを付ける必要があります。ラベルがないと、セキュリティ システムによって、コンテナ内で実行されているプロセスがコンテンツを使用できなくなる可能性があります。デフォルトでは、Podman は OS によって設定されたラベルを変更しません。
コンテナコンテキストのラベルを変更するには、2つのサフィックスのいずれかを追加します。 :zまたは:Zボリュームマウントに追加します。これらのサフィックスは、共有ボリューム上のファイルオブジェクトのラベルを変更するようにPodmanに指示します。ずオプションは、2つのコンテナがボリュームコンテンツを共有していることをPodmanに伝えます。その結果、Podmanはコンテンツを共有コンテンツラベルでラベル付けします。共有ボリュームラベルにより、すべてのコンテナがコンテンツの読み取り/書き込みが可能になります。ずオプションは、Podman にコンテンツにプライベート非共有ラベルを付ける様に指示します。
のトラブルシューティングページしかし、ほぼ同じ言葉で同じことを説明しています。
さて、私は Podman と SELinux をあまり使い慣れていないので、いつ実際に何を使用すればよいのか疑問に思います。権限エラーが発生した場合、それは SELinux が原因である可能性があることはわかっているので、2 つのスイッチのいずれかで修正できる可能性があります。しかし、これら 2 つのオプション (小文字の z と大文字の Z) の違いは何でしょうか。
違いは次のとおりです。
:z
共有コンテンツラベルを作成する:Z
非公開の非共有ラベルを作成します
これにより、多くの新しい単語が導入されます。
- 共有と非共有(これはどういう意味ですか?)
- ??? vs private (繰り返しますが、これが何を意味するのかはわかりません)
- また、1 つのオプションでは「コンテンツ ラベル」と表示されていますが、もう 1 つのオプションでは「ラベル」とのみ表示されています。これら 2 つの用語には違いがありますか、それとも同じですか?
では、この文脈ではこれらの単語はどういう意味なのでしょうか? 最後の質問は、いつ何を使用すればよいのでしょうか?
答え1
「共有」は複数のコンテナがボリュームを共有できることを意味し、「非共有」は共有できないことを意味します。もう少し詳しく説明すると、:z
各コンテナ内のボリュームに適切なラベル ( container_file_t
) が付けられ、任意のボリュームを複数のコンテナ内に並行してマウントすることができ、ボリュームマウントを持つ実行中のすべてのコンテナがそのボリュームにアクセスできます。ホストまたは実行中のコンテナによって行われた変更は、実行中のすべてのコンテナに表示されます。
「プライベート」とは、さらに、コンテナ内で使用されるラベルがそのコンテナにプライベートになることを意味します。ファイル システム レベルでは追加のレイヤー化は行われないため、これは実質的に、ホストの観点から見てもコンテンツがプライベートにラベル付けされていることを意味します。同じマウントを持つコンテナは、そのアクセスを共有できません。少なくとも Podman では、最後のコンテナが優先され、そのボリュームにアクセスできる唯一のコンテナになります。ここでの「プライベート」の反対は、私の考えでは「共有」であり、これがドキュメントに反対の用語がない理由を説明しています (「共有共有ラベル」)。
「コンテンツ ラベル」と「ラベル」に何か意味があるかどうかはわかりませんが、そのようなコンテナーで作成されたすべてのコンテンツは、ホストも含めてそれに応じてラベル付けされ、ラベル付きのファイルが表示されるという事実を暗示しているのかもしれませんcontainer_file_t
。
答え2
「セキュリティの厳密さは気にしない、ただ機能すればいい」: 小文字z
生産的な環境: 資本を考慮しますZ
が、そのボリュームがアタッチされた最後のコンテナーのみが資本にアクセスできることに注意してください。
ところで、これはカンマ区切りのリストなので、たとえば と組み合わせる場合は にro
なります:ro,z
。