web-dev-qa-db-ja.com

Selinuxブロックwordpress in CentOS 6.3

次のコマンドを使用して、CentOS6.3にwordpress 3.5をインストールしました。

yum install wordpress

そしてhttpdを開始しました。これで、Apacheログに次のエラーが表示されます。

PHPの致命的なエラー:require_once():required '/ 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で、参照元: 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を無効にせずに動作させる方法があるのだろうか?

1
Antonio

この問題はEPELのバグであることがわかりました。

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

ファイルのSELinuxセキュリティコンテキストが間違っているようです。 php-simplepieパッケージ(EPELからのもののようです)をインストールしてそれらのファイルを検査すると、それらはすべてusr_tではなくuser_home_tタイプになっています。

セキュリティラベルを修正してみてください。

restorecon -r -v /usr/share/php/php-simplepie
2
Michael Hampton

SElinuxであることを確認したい場合は、setenforce0でSElinuxをオフにするか、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を使用してそのポリシーをdir(s)とその子ファイル/ dirに適用します。

restorecon -R </path/to/php/dir>

semanage/restoreconがインストールされていない場合は、policycoreutils-pythonパッケージをインストールしてください。

ところで、ポリシーでデフォルトのファイルコンテキストを表示する場合は、次の方法で行うことができます。

semanage fcontext -l

ただし、SELinuxではない可能性があります。ほとんどのRedHatディストリビューションのApacheは、箱から出してすぐにシンボリックリンクをたどらないと思います(ただし、その場合はシンボリックリンクをたどらないというエラーが発生したと思います)。そのため、次を追加する必要があります。

Options FollowSymLinks

Apache構成に移動し、Apacheを再起動します。

もちろん、それはselinuxであり、シンボリックリンクをたどっていない可能性があります。

2
Jason Tan

これは私が開発者のために作成した小さなシェルスクリプトです。このように、ロールアウトするたびに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/
1
flickerfly