我使用命令将 wordpress 3.5 安装到 CentOS 6.3:
yum install wordpress
并启动了 httpd。现在我可以在 apache 日志中看到以下错误:
PHP 致命错误:require_once(): 需要打开失败 '/usr/share/wordpress/wp-includes/class-simplepie.php' (include_path='.:/usr/share/pear:/usr/share/php')在第 4 行的 /usr/share/wordpress/wp-includes/class-feed.php 中,referer: http ://www.mycompany.com/wp-admin/
我想那是因为 SELinux:
ls -Z /usr/share/wordpress/wp-includes/class-simplepie.php
lrwxrwxrwx. root root system_u:object_r:usr_t:s0 class-simplepie.php -> /usr/share/php/php-simplepie
ls -Z /usr/share/php/php-simplepie
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 autoloader.php
drwxr-xr-x. root root unconfined_u:object_r:user_home_t:s0 SimplePie
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 SimplePie.php
我想知道是否有办法让它在不禁用 SELinux 的情况下工作?
您的文件似乎有错误的 SELinux 安全上下文。当我安装
php-simplepie
包(它似乎来自 EPEL)并检查这些文件时,它们都具有usr_t
类型,而不是user_home_t
.尝试修复安全标签:
如果您想验证它是 SElinux,请使用 setenforce 0 关闭 SE linux 或检查 audit.log。我认为它在 /var/log/audit/audit/log 中,但我不是 100% 确定。一旦您确定它是 SELinux,您就可以重新打开 SElinux。
如果它是 SElinux 那么要做的事情就是使用
semanage
设置 selinux 策略,以便您的 PHP 内容所在的所有目录httpd_sys_rw_content_t
然后将该策略应用于
restorecon
目录及其子文件/目录:如果
semanage/restorecon
没有安装安装policycoreutils-python
包。顺便说一句,如果你想查看策略中的默认文件上下文,你可以这样做:
但是它可能不是 SELinux。我相信大多数 redhat 发行版上开箱即用的 apache 不会遵循符号链接(尽管我认为你遇到了一个错误,说明在这种情况下不遵循符号链接),所以你可能需要添加:
到 apache 配置并重新启动 apache。
当然,它可能既是 selinux 又不是遵循符号链接。
这是我为我们的开发人员创建的一个小 shell 脚本。这样,每次他们推出 WordPress 时,他们就不必记住所有要做什么。您的文件结构几乎肯定有些不同,因此需要稍微修改一下。请随时提出改进建议。SELinux 不是我的专长,但我正在学习它。
我发现这个问题是 EPEL 中的一个错误: