WordPressの更新に失敗するエラー
WordPressの更新通知が来ていたので更新しようとすると、次のようなエラーが発生しました。
WordPress を更新
https://downloads.wordpress.org/release/ja/wordpress-4.9.2.zip から更新をダウンロード中…
更新を展開しています…
いくつかのファイルをコピーできないため、最新版のインストールができません。これはたいていの場合、ファイルのパーミッションが適切でないことが原因です。: wp-admin/includes/update-core.php
インストール失敗
複数あるWordpress環境のうちの一つでのみ発生していました。
WordPressファイルのパーミッションを変更する
ネットで調べて対処方法を探したところ、文字通りパーミッションに問題があるというのが原因とのことでした。
ファイルの所有者(オーナー)と各ファイルの権限を書き換えるとうまくいくとのことです。
$ chown nginx:nginx -R wordpress
$ chmod -R 755 wordpress
上記コマンドでWordpress以下のファイルすべての所有者を nginx に変更します。Apache環境の場合は apache に変えてください。それからすべてのファイルの権限をを変えてます。たぶん所有者の書き込み権限があればいけるはずです。
上記コマンド実行後、Wordpressの管理画面から更新を試してみてください。
SELINUXが悪さをしているの止める
ほとんどの場合はパーミッションの変更でうまく更新ができるようになっているはずです。それでもうまくいかない場合は、SELINUXの原因が考えられます。
SELINUXとは、LinuxOSをセキュアに保つためのOSに搭載された制御機能のひとつです。サービスごとに細かくアクセス制御を掛けたりすることができる機能なので、これが意図せず働いている場合に、Wordpress管理画面からの更新がはじかれるということが起こりえます。
SELINUXの確認
$ getenforce
上記コマンドを実行するとSELINUXのステータスが確認できます。
- enforcing: SELINUXは有効で、アクセス制限も有効。
- permissive: SELINUXは有効だが、アクセス制限は行わず警告を出力。
- disabled: SELINUXは無効。
enforcingとなっている場合は、アクセス制限がかかっているため、Wordpressのファイル更新を阻んでいる可能性があります。
ちなみに CentOS 7 だと、デフォルトで SELINUXが有効化(eonforcing)されています。
SELINUXの有効化と無効化
Permissiveにする。
$ setenforce 0
Enforcingにする。
$ setenforce 1
Permissiveにすると、アクセス制限が無効化されるためWordpressの更新に成功します。ひとまず私の環境は成功しました。
注意点としては、上記コマンドで Permissive に変更しても、この変更自体は一時的な変更なので、再起動をすると有効化された状態に戻ります。なので次回の更新時にまた同じ現象に見舞われるかもしれません。
SELINUXを永続的に無効化する
$ vi /etc/selinux/config
一時的にではなく永続的にSELINUXを無効化するには設定ファイルの値を書き換える必要があります。SELINUX=enforcing となっている個所を書き換える必要があります。必要に応じて書き換えるとよいでしょう。
無効化すると当然セキュリティー面が弱くなるので、SELINUXの正しい設定方法を調べたほうがよいですが、とりあえずの方法です。
コメントを書く