雑記

WordPressの更新が失敗する

Wordpressロゴ

WordPressに更新通知が来てたので更新しようと更新ボタンをポチッ……。
そうするとFTP情報を入れてくださいという画面になった何故だ!

原因を検索してみるとパーミッションが原因、なるほどなるほどapacheでファイル書き換えができないからFTP経由で更新みたいな画面が出るのね。
じゃあファイルのパーミッションは……と確認したら全部apacheになっていました。

本当の原因はSELinuxでした。
/var/log/audit/audit.logで確認してみたらwriteアクセスが拒否されていた…。

だいたいSELinux関係は 調べると無効化してくださいとでる。
いつもはそれでいいやと無効にしてたのですがセキュリティ的にも有効の方が良い、
何よりよくわからないからとりあえず無効にというのは良くない!
ということで今回は有効のままです。

まずwordpressがインストールされているところタイプを確認してみる。

ls -Z /var/www/html/
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 index.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 license.txt
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 readme.html
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-activate.php
drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-admin
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-blog-header.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-comments-post.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-config-sample.php
-rw-------. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-config.php
drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 wp-content
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-cron.php
drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-includes
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-links-opml.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-load.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-login.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-mail.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-settings.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-signup.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 wp-trackback.php
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 xmlrpc.php

 

以下で確認するとhttpd_sys_content_tはreadはできるけどwriteはできないようです。

sesearch -A -C -s httpd_t -t httpd_sys_content_t

 

どうやらhttpd_sys_rw_content_tというタイプを設定すると書き込めるようなので。
とりあえずすべて書き込み可能にしてから更新しました。

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
sudo restorecon -R /var/www/html/

 

更新終わったら設定元に戻して完了。

sudo semanage fcontext -d "/var/www/html(/.*)?"
sudo restorecon -R /var/www/html/

 

これ更新の度にやるの若干面倒な気がするのだけどどういう設定がいいんだろうなぁ。
とりあえずSELinuxがまだ全然わかっていないので勉強が必要ですね。