![根本原因](https://linux22.com/image/224672/%E6%A0%B9%E6%9C%AC%E5%8E%9F%E5%9B%A0.png)
SELinux 重新标记后,尝试在 Podman 上运行任何 pod 都会失败
$ podman run -ti alpine
Error relocating /lib/ld-musl-x86_64.so.1: RELRO protection failed: No error information
Error relocating /bin/sh: RELRO protection failed: No error information
并且您已将您的内容移至~/.local/share/containers
其他地方,链接到那里:
$ ls -l ~/.local/share/containers
lrwxrwxrwx. 1 asdf asdf 32 Oct 13 2022 /home/asdf/.local/share/containers -> /x/y/z/containers/
在审核日志中,将记录 AVC 警报
答案1
根本原因
SELinux 的semanage fcontext
数据库处理真实路径 [1]。如果您将其移动到~/.local/share/containers
其他位置(在我的情况下,是为了管理磁盘空间)并创建了指向它的链接,那么在restorecon
运行时,它将将其标签重置为实际位置对应的任何位置(最有可能default_t
)。
你可以用[2]来检查:
ls -Z ~/.local/share/containers/storage/overlay{,-images,-layers} | less
这些文件的 SELinux 上下文应为container_ro_file_t
.您将能够semanage fcontext
使用以下命令查看原始规则:
# semanage fcontext -l | grep container | grep storage
/home/[^/]+/\.local/share/containers/storage/overlay(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay-images(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay-layers(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay2(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay2-images(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay2-layers(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/volumes/[^/]*/.* all files unconfined_u:object_r:container_file_t:s0
使固定
您必须复制每条规则并使其适应您的环境。例如,对于上面的第一行:
semanage fcontext -a -t container_ro_file_t '/x/y/z/containers/storage/overlay(/.*)?'
当然,替换/x/y/z
为您的环境位置并为每个原始规则执行命令。确保使用您系统的原始规则作为事实来源,因为它可能与我的不同。
请注意,该volumes
线与其他线略有不同。
一旦所有规则就位,运行restorecon
:
restorecon -Rv /x/y/z/containers/
我不确定这是否是最好或最正确的方法,并且可能不受支持。但无论如何,首先创建该链接就已经是一种偏差。它确实对我有用:)
参考
答案2
发布的回复(由 caxcaxcoatl 提供)是正确的。
我找到了一个更直接的解决方案:
for item in $(ls -Z ~/.local/share/containers/storage/overlay{,-images,-layers} | grep home | sed 's/://g')
do
sudo restorecon -Rv ${item}
done