Я установил 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') в /usr/share/wordpress/wp-includes/class-feed.php в строке 4, ссылка: 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, выключите SE linux с помощью setenforce 0 или проверьте журнал audit.log. Я думаю, что это находится в / var / log / audit / audit / log, но я не уверен на 100%. Как только вы точно узнаете, что это SELinu, вы можете снова включить SElinux.
Если это SElinux, то нужно использовать semanage
установите политику selinux так, чтобы все каталоги, в которых находится ваш PHP-контент, httpd_sys_rw_content_t
semanage fcontext -a -t httpd_sys_rw_content_t </path/to/php/dir>
Затем примените эту политику, используя restorecon
в каталог (ы) и их дочерние файлы / каталоги:
restorecon -R </path/to/php/dir>
Если semanage/restorecon
не установлены установите policycoreutils-python
пакет.
Кстати, если вы хотите просмотреть контексты файлов по умолчанию в политике, вы можете сделать это с помощью:
semanage fcontext -l
Однако это может быть не SELinux. Я считаю, что apache из коробки в большинстве дистрибутивов Redhat не будет следовать символическим ссылкам (хотя, я думаю, у вас была ошибка, в которой говорилось что-то об отказе от использования символических ссылок, когда это было так), поэтому вам может потребоваться добавить:
Options FollowSymLinks
Перейдите в конфигурацию apache и перезапустите apache.
Конечно, это может быть как selinux, так и не следующие символические ссылки.
Похоже, у ваших файлов неправильный контекст безопасности SELinux. Когда я устанавливаю php-simplepie
пакет (похоже, исходит от EPEL) и проверьте эти файлы, все они имеют usr_t
тип, а не user_home_t
.
Попробуйте исправить защитные наклейки:
restorecon -r -v /usr/share/php/php-simplepie
Вот небольшой сценарий оболочки, который я создал для наших разработчиков. Таким образом, каждый раз, когда они запускают WordPress, им не нужно помнить все, что делать. Ваша файловая структура почти наверняка несколько отличается, поэтому ее необходимо немного изменить. Не стесняйтесь предлагать улучшения. SELinux не моя специализация, но я изучаю его.
#!/bin/sh
# License: Public Domain
# satisfies SELinux context requirements for a WordPress site
# To operate properly on CentOS, etc.
#Figure out what directory to apply this to and strip any trailing /
if [ -d $1 ]; then
site=${1%/}
else
site=`pwd`
fi
#Check to make sure the setting of $site is sane and fail if not
if [ ! -d $site/httpdocs/wp-content ]; then
echo "ERROR: This does not appear to be an appropriate directory."
echo ${site}
echo "Please specify directory for the site like /var/www/html/myssite as the only argument"
exit 1
fi
#For visual appeal mostly
content=$site/httpdocs/wp-content
#Setup the contexts
chcon -R -v -t public_content_rw_t $content/plugins/ $content/themes/ $content/uploads/ $site/logs/
semanage fcontext -a -t httpd_sys_rw_content_t $site/httpdocs/
semanage fcontext -a -t httpd_sys_rw_content_t $site/httpsdocs/
semanage fcontext -a -t httpd_sys_rw_content_t $site/logs/
#Apply the contexts
restorecon -R $site/logs/
restorecon -R $site/httpdocs/
restorecon -R $site/httpsdocs/
Я обнаружил, что эта проблема является ошибкой в EPEL: