在我安装的 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 阻止(参见此链接)解决方案是使用以下步骤创建并应用策略模块:
- 以 root 身份运行命令
audit2allow -a -M my_httpd
(将“my_httpd”替换为您喜欢的名称)。 - 再次以 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 };