我希望有人能帮助我。我有一个在 Centos 7.6 服务器上运行的 Magento 网站。
现在,网站无法正确加载,在 messages.log 中,我看到许多条目表明 SElinux 阻止了访问。我可以确认这是 SElinux 的问题,因为在宽容模式下设置可以修复(“松散使用”)该问题。
运行时
sealert -l 3bedf708-7636-44d4-95f6-c98b8ea16687
,我看到以下内容:SELinux 阻止 /usr/sbin/httpd 对 /var/www/html/MyMagentoSite/var/session/ 进行写访问
不同文件和文件夹有不同的条目。
我只需要跑步就可以了吗chcon -R -t httpd_sys_rw_content_t /var/www/html/magentofoldername/*
,或者有什么更好的解决方案?
这似乎违反直觉,因为我授予了 magento 文件夹内所有内容的读写权限。
答案1
为什么不遵循你的直觉并将标签仅应用于session
目录(来自你的错误消息)。
尽管如此,直觉并不是最好的帮手,但您可以使用侦探技巧查找“预期”标签。
默认 PHP 会话目录是/var/lib/php/session
。
如果你这样做semanage fcontext -l | grep php
,你就会看到这个条目:
/var/lib/php(/.*)? all files system_u:object_r:httpd_var_lib_t:s0
因此我认为 PHP 会话目录应该被标记为httpd_var_lib_t
。
所以:
chcon -R -t httpd_var_lib_t /var/www/html/magentofoldername/var/session
答案2
如果您使用chcon
并重新启动服务器后,您将遇到同样的问题,请semanage fcontext
按如下方式使用:
semanage fcontext -a -t httpd_var_lib_t "/var/www/html/magentofoldername/var/session(/.*)?"
现在您可以应用 selinux 权限:
restorecon -R -v -F /var/www/html/magentofoldername/var/session