Назад | Перейти на главную страницу

Selinux блокирует wordpress в CentOS 6.3

Я установил 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:

  1. https://bugzilla.redhat.com/show_bug.cgi?id=722591
  2. https://bugzilla.redhat.com/show_bug.cgi?id=695698