我需要在 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。
编辑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"
答案2
尝试使用 mount 设置以下选项。它们在 CIFS mount 中对我有用。可能在 nfs 上也有效。uid= gid= file_mode= dir_mode= fscontext=