SELinux:restorecon 不会将上下文更改为 httpd_sys_content_t

SELinux:restorecon 不会将上下文更改为 httpd_sys_content_t

我需要在 Centos 7.4.1708 系统上使用 Puppeteer,但是当我将 SELinux 设置为强制执行时,我收到 AVC 错误。

如果我跑步sudo cat /var/log/messages我会得到:

SELinux is preventing /var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome from search access on the directory /sys/fs/cgroup/cpuset.

*****  Plugin restorecon_source (99.5 confidence) suggests   *****************

If you want to fix the label.
/var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome default label should be httpd_sys_content_t.    
Then you can run restorecon.    
Do    
# /sbin/restorecon -v /var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome

同一条消息可能出现了 6 到 7 次。

但是,当我尝试执行上述操作时,restorecon 不会设置文件的上下文。

设置策略(以 root 身份):
semanage fcontext -a -t httpd_sys_content_t '/var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome'

检查政策:
matchpathcon /var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome
显示:
/var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome system_u:object_r:httpd_sys_content_t:s0

看起来不错,但是...
为文件设置新的上下文:
/sbin/restorecon -v /var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome

restorecon无法工作。即使使用,我也没有收到任何错误-vv。我也尝试过强制restorecon使用-F,但那也不起作用。

这是文件的当前上下文:
ls -Z /var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome 显示:
-rwxrwxrwx. root root system_u:object_r:nfs_t:s0 /var/www/html/node_modules/puppeteer/.local-chromium/linux-549031/chrome-linux/chrome

当前上下文是nfs_t因为我使用nfs在运行虚拟盒的 Vagrant 中同步的文件夹。我无法更改为 smb,因为它无法使用 Windows 主机进行双向同步。

有什么办法可以解决这个问题吗?我已经花了将近两天的时间了。

注意:如果我将 SELinux 设置为 Permissive,则 Puppeteer/Chromium 运行时不会出现问题。

谢谢 :)

编辑:我还应该提到我已httpd_use_nfs设置为on

这里是我所有的 SELinux 布尔值的 pastebin。

SELinux 布尔值

编辑2:

根据@HBruijn 的建议,我尝试使用定义的上下文进行挂载,但收到错误。

AS 根命令:
mount 10.0.0.1:/C/Users/Lee/Desktop/www /var/www -o context="system_u:object_r:httpd_sys_content_t:s0"

错误:
mount.nfs: requested NFS version or transport protocol is not supported

服务器10.0.0.1是我在 设置的私人服务器vagrantfile
config.vm.network "private_network", ip: "10.0.0.0"

vagrant up导出路径与 Vagrant 在例如上挂载文件夹时使用的路径相同10.0.0.1:/C/path/to/directory

有任何想法吗??

答案1

我认为您正在尝试从错误的角度解决问题,您是否考虑过让您的 Web 服务器访问 NFS 共享:

setsebool -P httpd_use_nfs=1 

编辑根据您在 Windows 上运行 VirtualBox 的评论:

思考您的 Windows 主机不支持标签,然后客户端(您的 CentOS)分配默认安全策略nfs_t

您可能需要将您的首选安全上下文设置为挂载选项来覆盖默认值(在 mount 命令或 /etc/fstab 中):

# mount server:/export /var/www/html -o  context="system_u:object_r:httpd_sys_content_t:s0" 

RHEL 6 手册

答案2

尝试使用 mount 设置以下选项。它们在 CIFS mount 中对我有用。可能在 nfs 上也有效。uid= gid= file_mode= dir_mode= fscontext=

相关内容