次のコマンドを使用して、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を無効にせずに動作させる方法があるのだろうか?
この問題はEPELのバグであることがわかりました。
ファイルのSELinuxセキュリティコンテキストが間違っているようです。 php-simplepie
パッケージ(EPELからのもののようです)をインストールしてそれらのファイルを検査すると、それらはすべてusr_t
ではなくuser_home_t
タイプになっています。
セキュリティラベルを修正してみてください。
restorecon -r -v /usr/share/php/php-simplepie
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であり、シンボリックリンクをたどっていない可能性があります。
これは私が開発者のために作成した小さなシェルスクリプトです。このように、ロールアウトするたびに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/