SELinux 干扰 Apache / PHP

SELinux 干扰 Apache / PHP

在我安装的 CentOS 7 中,SELinux 默认启用。这导致 Apache 无法正确读取标准 /var/www/html 文档根目录中的 PHP 文件(显示包含 PHP 脚本的网页时,浏览器为空白)。当我禁用 SELinux 时,页面可以正常显示。

是否有某种方法可以设置 SELinux 以允许 Apache 从文档根目录访问 PHP 文件?鉴于 CentOS 显然认为 SELinux 是一项理想的安全附加功能,我宁愿不完全禁用 SELinux。

答案1

我不太使用 SELinux,但你可以尝试

semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html(/.*)?'

restorecon -R -v /var/www/html/

这允许 Apache 在该目录中执行 PHP 脚本,并且在重启后仍然有效。

如果您使用 MySQL,您可能必须执行相同的操作。SELinux:让 Apache 与 CentOS 上的 MySQL 对话可能有帮助

答案2

运行audit2allow < /var/log/audit/audit.log确认 httpd 被 SELinux 阻止(参见此链接)解决方案是使用以下步骤创建并应用策略模块:

  1. 以 root 身份运行命令audit2allow -a -M my_httpd(将“my_httpd”替换为您喜欢的名称)。
  2. 再次以 root 身份运行命令semodule -i my_httpd.pp来安装模块。

在我按照这些步骤操作后,Apache 能够毫无困难地在我的服务器上运行 PHP 脚本。重新启动服务器不会破坏更改。

模块文件(my_httpd.te)的内容:

module my_httpd 1.0;
require {
    type admin_home_t;
    type httpd_t;
    class file { read getattr open };
}
#============= httpd_t ==============
allow httpd_t admin_home_t:file { read getattr open };

相关内容