Selinux bloqueia o wordpress no CentOS 6.3

1

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?

    
por Antonio 11.02.2013 / 16:15

4 respostas

0

Descobri que esse problema é um bug no EPEL:

  1. link
  2. link
por 11.02.2013 / 21:52
2

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
    
por 11.02.2013 / 16:20
2

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.

    
por 11.02.2013 / 16:39
1

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/
    
por 17.07.2015 / 00:46