Descobri que esse problema é um bug no EPEL:
Eu instalei o wordpress 3.5 no CentOS 6.3 usando o comando:
yum install wordpress
e iniciou o httpd. Agora posso ver o seguinte erro no log do apache:
PHP Fatal error: require_once(): Failed opening required '/usr/share/wordpress/wp-includes/class-simplepie.php' (include_path='.:/usr/share/pear:/usr/share/php') in /usr/share/wordpress/wp-includes/class-feed.php on line 4, referer: http://www.mycompany.com/wp-admin/
Eu acho que isso é por causa do 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
Gostaria de saber se existe uma maneira de permitir que ele funcione sem desabilitar o SELinux?
Parece que seus arquivos têm os contextos de segurança do SELinux errados. Quando instalo o pacote php-simplepie
(parece vir do EPEL) e inspeciono esses arquivos, todos eles têm o tipo usr_t
, em vez de user_home_t
.
Tente corrigir os rótulos de segurança:
restorecon -r -v /usr/share/php/php-simplepie
Se você quiser verificar se o SElinux está desligando o SE linux com setenforce 0 ou verifique o audit.log. Eu acho que está em / var / log / audit / audit / log mas não tenho 100% de certeza. Uma vez que você sabe com certeza que é o SELinu você pode ligar o SElinux novamente.
Se for o SElinux, então a coisa a fazer é usar semanage
definir a política de selinux para que todos os dirs onde o seu conteúdo PHP é para httpd_sys_rw_content_t
semanage fcontext -a -t httpd_sys_rw_content_t </path/to/php/dir>
Em seguida, aplique essa política usando restorecon
ao (s) diretório (s) e seus arquivos filhos / dirs:
restorecon -R </path/to/php/dir>
Se semanage/restorecon
não estiver instalado, instale o pacote policycoreutils-python
.
BTW se você quiser ver os contextos de arquivo padrão na política, você pode fazer isso com:
semanage fcontext -l
No entanto, pode não ser o SELinux. Acredito que o apache pronto para uso na maioria das distros do redhat não seguirá links simbólicos (embora eu tenha recebido um erro que dizia algo sobre não seguir links simbólicos quando era esse o caso), então você pode precisar adicionar:
Options FollowSymLinks
Para a configuração do apache e reinicie o apache.
Claro que pode ser ao mesmo tempo selinux e não seguir links simbólicos.
Aqui está um pequeno script de shell que criei para nossos desenvolvedores. Desta forma, cada vez que eles lançam o WordPress, eles não precisam se lembrar de tudo o que fazer. Sua estrutura de arquivos é quase certamente um pouco diferente, então será necessário modificar um pouco. Por favor, sinta-se livre para sugerir melhorias. O SELinux não é minha especialização, mas estou aprendendo.
#!/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/