我有一个Docker容器应该读取日志,包括主机本身的日志。 所以我使用z标志挂载卷/var/log 。 这改变了/var/log里面的文件的SELinux上下文,这阻止了我通常的进程访问这些文件,最终的结果是我无法在本地login:
kernel:type = 1400 audit(14958482):avc:denied {open} for pid = 12345 comm =“agetty”name =“/ var / log / wtmp”dev =“dm-6”ino = 134 scontext = system_u:system_r :getty_t:s0-s0:c0.c1023 tcontext = system_u:object_r:svirt_sandbox_file_t:s0 tclass = file
这里最好的做法是什么? closuresSELinux,而它摆脱了这个问题,是不是一个选项。
restorecon -R /var/log可以解决无login问题,因为它会将该树下的所有标签返回到默认值。
较长远的解决方法是修改SELinux策略以允许Docker容器读取/ var / log的内容。 https://wiki.gentoo.org/wiki/SELinux/Tutorials/Creating_your_own_policy_module_file是如何做到这一点的一个例子。 如果你把所有东西都放回去,然后再次尝试读取,你可以使用audit2allow -r为你生成必要的策略。
如果您正在运行Chef,则可以使用https://supermarket.chef.io/cookbooks/selinux_policy/versions/0.3.0来执行此操作。
(并没有去正义 – 禁用它的路线)