允许 Samba 和 Podman 在同一目录中读写

允许 Samba 和 Podman 在同一目录中读写

我是 SElinux 的新手,所以不太了解如何使用它。我想使用 samba 共享(已配置并运行)运行 Fedora Server,并配置 podman 容器,挂载相同的目录。但是当 SElinux 开启时,容器无法访问挂载的目录。关闭 SElinux ( setenforce 0) 可以“解决”这个问题。

所以目前我已经尝试public_content_rw_t在该目录上使用它,但仍然不起作用。

# first try
$ semanage fcontext -a -t samba_share_t "/srv/downloads(/.*)?"
$ restorecon -Rv /srv/downloads

# second try
$ semanage fcontext -m -t public_content_rw_t "/srv/downloads(/.*)?"
$ restorecon -Rv /srv/downloads

在这两种情况下,podman 容器都无法访问同一目录。SElinux 阻止了它(日志:)setroubleshoot[1232603]: SELinux is preventing java from write access on the directory /srv/downloads。例如使用:(使用 rwpodman exec -it $CONTAINER ls -l /downloads安装)。/srv/downloads:/downloads

我想使用 SElinux 运行我的服务器。我需要配置什么才能使两个进程能够使用同一个目录?

答案1

由于 SELinux 还很新,因此有更多工具可以帮助您解决这个问题,这是我上周才发现的。一个起点是这里。主要是 audit.log 与 audit2why 和 audit2allow。我将 enforce 设置为 0,cp /dev/null over audit.log,运行失败的命令(在 Permissive 模式下成功但仍记录在审计日志中),然后保存日志并按上面的链接进行分析。过去几天,我使用这个过程为运行 python 子进程的 flask/apache api 创建了一个自定义策略。所以没有具体的答案,但这个过程应该能让你找到解决方案,就像它对我一样。

答案2

我们通过启用该setsebool -P virt_use_samba标志解决了这个问题。这似乎可以启用虚拟化实例(..和容器..)对已安装驱动器的访问。

这是一个老问题,但我在互联网上的一个地方找到了这个答案,如果它能解决更多问题,传播它就好了。

相关内容