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
。
答案2
“我不关心深度安全性,只是让它发挥作用”:小写z
生产环境:考虑资本Z
,但请注意,只有附加该卷的最后一个容器才能访问它。
顺便说一句:这是一个逗号分隔的列表,所以如果你想将它与它组合起来,例如ro
它会变成:ro,z
.