由于 Docker,SELinux 阻止访问 /var/log

由于 Docker,SELinux 阻止访问 /var/log

我有一个 Docker 容器,它应该读取日志,包括来自主机本身的日志。因此,我/var/log使用z标志挂载卷。这会更改内部文件的 SELinux 上下文/var/log,从而阻止我常用的处理器访问这些文件,最终结果是我无法本地登录:

内核:类型=1400 审核(14958482):avc:拒绝 {打开} 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

最佳做法是什么?关闭 SELinux 虽然可以解决问题,但并不是一个选择。

答案1

restorecon -R /var/log可以修复无登录问题,因为它会将该树下的所有标签恢复为默认值。

长期修复是修改 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也这样做。

(值得称赞的是,我们没有选择禁用它)

相关内容