wordpress公式ロゴ

WordPressの更新でFTP情報の入力になった場合

状況

wordpressで作成しているwebサイトで管理画面に「更新」が来ていたので更新しようとすると下図のようにFTP情報の入力画面が表示されました。

原因

/wp-admin/includes/file.php

「更新」ボタンを押したあとこちらのファイルが実行され、PHPを動かしているユーザーとファイルオーナーのチェックが行われ、異なっているとこの画面が出てくるようです。

解決策

/wp-admin/includes/file.php のファイルオーナーをPHPを動かしているユーザー名に変えればOKです。
wp- で始まるwordpressファイルすべてを変えなくても、このファイルだけ変更すればいけるようです。

方法その1

ターミナルでアクセスできる場合は、下記のコマンドで変えます。

chown  ユーザー名 /wp-admin/includes/file.php

方法その2

PHPを動かしているユーザーで、FTP / SFTP できる場合は、FTPソフトを使ってダウンロード・削除・アップロードしても良いです。

  1. PHPを動かしているユーザーでFTPソフトから接続
  2. /wp-admin/includes/file.php をローカルにダウンロード
  3. サーバ上から /wp-admin/includes/file.php を削除
  4. ダウンロードした file.php を/wp-admin/includes/file.php にアップロード

PHPを動かしているユーザーとは

これがなんなのか分からないと、方法は分かっても実際に設定するものが分からないですね。
PHPをモジュール版で動かしていればhttpd.confに設定しているユーザーになるでしょう。CGI版で動かしていればそこで設定されているユーザーになるでしょう。
「このユーザー!」って決まってるわけじゃないので、どう設定されてるかはサーバを構築した人(会社)次第です。

次のようなファイルを作って、サーバにアップして、ブラウザからアクセスしてみてください。

[php]<?php file_put_contents(__DIR__ . '/text.txt', 'test'); ?>[/php]

設置したディレクトリに text.txt ができると思います。FTPソフトとかで「所有者」を確認してみましょう。それが「PHPを動かしているユーザー」です。

そもそもの原因

今回このような状況になった原因について記します。

wordpressを配置したwebサーバは次のようになっています。

wordpressは、本サイト専用のユーザーで動かしています。
それとは別に、外部の方と共同で触るために SFTPユーザーを用意しています。

  • Aユーザー ・・・ PHPを動かしているユーザー
  • Bユーザー(複数) ・・・ SFTPで、FTPソフトなどを使ってファイルの操作を行う

今回、Bユーザーを使ってwordpress本体をアップロードしてしまったため、ファイルの所有者がBユーザーとなり、wordpressの「更新」を行おうとしたとき「PHPを動かしているAユーザーとファイルの所有者Bユーザーが違うじゃない」となって、FTPの画面になったということになります。

ちなみにこれは「開発サーバ」上での出来事で、制作が完了したときは本番用の異なるサーバに持っていきます。

他の方法

wp-config.php に下記を追加したりなど、強制的に行う方法もあるようですが「きちんと解決できるのにむやみにセキュリティを緩める方向で解決する」のはおすすめしません。

[php]define('FS_METHOD','direct');[/php]

※これをすることで「セキュリティにどう影響するの?」と問われると、「では何故こんな制限をwordpressは加えたのだろう?」と考えたいところです。