Podman 磁碟區安裝:何時使用 :z 或 :Z 後綴?

Podman 磁碟區安裝:何時使用 :z 或 :Z 後綴?

Podman 手冊頁解釋卷安裝/綁定:

像 SELinux 這樣的標籤系統要求在安裝到容器中的磁碟區內容上放置適當的標籤。如果沒有標籤,安全系統可能會阻止容器內執行的進程使用內容。預設情況下,Podman 不會更改作業系統設定的標籤。

若要變更容器上下文中的標籤,您可以新增兩個後綴之一 :z或者:Z到卷安裝。這些後綴告訴 Podman 重新標記共享磁碟區上的檔案物件。這z選項告訴 Podman 兩個容器共享卷內容。因此,Podman 使用共享內容標籤來標記內容。共用磁碟區標籤允許所有容器讀取/寫入內容。這Z選項告訴 Podman 使用私有非共享標籤來標記內容。

故障排除頁面然而,用幾乎相同的詞語解釋了同樣的事情。

現在,我對 Podman 和 SELinux 相當陌生,想知道我實際上應該在什麼時候使用什麼?我知道,當我收到權限錯誤時,它們可能是由 SELinux 引起的,因此兩個開關之一可以修復該問題。但這兩個選項(小寫 z 和大寫 Z)有什麼不同呢?

它所說的差別是:

  • :z建立共享內容標籤
  • :Z建立私人非共享標籤

這引入了許多新詞:

  • 共享和非共享(這是什麼意思?)
  • ??? vs private(再次,不清楚這對我來說意味著什麼)
  • 它還說一個選項是“內容標籤”,而另一個選項只說“標籤”——這兩個術語之間有區別還是相同?

那麼這些詞在這種情況下意味著什麼呢?最後一個問題:我什麼時候該使用什麼?

答案1

「共享」是指多個容器可以共享磁碟區; 「unshared」表示他們不能。更詳細一點,:z用適當的標籤 ( ) 標記每個容器內的捲container_file_t,任何給定的捲都可以並行安裝在多個容器內,並且所有正在運行的具有該卷安裝的容器都可以存取它。主機或任何正在運行的容器所做的任何變更將對所有正在運行的容器可見。

此外,「私有」意味著容器內使用的標籤對該容器而言是私有的。檔案系統層級沒有額外的分層,因此這實際上意味著即使從主機的角度來看,內容也是私有的。具有相同掛載的容器無法共用對它的存取權限 - 至少對於 Podman,最後一個容器獲勝,並且是唯一有權存取該磁碟區的容器。在我看來,這裡“私有”的反義詞是“共享”,這可以解釋為什麼文檔中沒有相反的術語(“共享共享標籤”)。

我不確定“內容標籤”與“標籤”之間有什麼意義,除非它暗示這樣一個事實:在此類容器中創建的任何內容都會被相應地標記,包括在主機中,因此您將看到帶有以下內容的文件:標籤container_file_t

這篇文章在 Podman 上更詳細地展示了差異Docker也有同樣的差別

答案2

「我不關心深度安全性,只是讓它發揮作用」:小寫z

生產環境:考慮資本Z,但請注意,只有附加該卷的最後一個容器才能存取它。

順便說一句:這是一個逗號分隔的列表,所以如果你想將它與它組合起來,例如ro它會變成:ro,z.

相關內容