WordPressのアップデートにはFTPを使ってるんですが、設定できる種類が4つあります。
WPを使い始めて5年以上経つボクはまだ一度も設定を変えたことがありません。
ところが、PHP7からPHP8へ上げたところ、アップデートエラーが出て初めて設定を変えることになりました。
アップデートで不具合が起きたときだけ設定を変える。
WordPressの設定ファイル(wp-config.php)のFTPの部分はほとんどの人はこのようになってると思います。
define( 'FS_METHOD', 'ftpsockets' );
define( 'FTP_HOST', 'localhost' );
define( 'FTP_USER', 'user_name' );
// define('FTP_PASS', '*****');
パスワードはまちまちですね?
これを設定してしまうと、管理画面にログインできてしまえば誰でもアップデートができちゃうので、セキュリティ的にもよくありません。
そのほかにもまだまだ環境変数が用意されているんですが、ある理由により使うことはあまりありません。
(理由は後述。)
設定は最小限に。
このFTP関連の設定について、ドキュメントでは注意事項が書かれています。
注: アップグレードの問題解決に必要な最低限の定数のみを定義してください。
jp.wordpress.org
そして後述しますが、FS_METHOD の変更は、アップデートができなかったときだけにしてくださいとも。
やたらめったら自分の好みの設定をするのではなく、あくまでアップデートできる最小限の設定を心がけて下さい。
だから最初に出したものだけで十分なんですね?
FS_METHOD
最小限の設定で一番のポイントは FS_METHOD です。
direct | (最優先) PHP からダイレクトファイル I/O リクエストの使用 を強制します。 デフォルトではこのオプションが選択されます。 これは、適切に構成されていないホストではセキュ リティの問題を引き起こすことにつながります。 |
ssh2 | (2番目の優先度) インストールされていれば SSH PHP 拡張モジュー ルの使用を強制します。 |
ftpext | (3番目の優先度) FTP アクセス用 FTP PHP 拡張モジュールの使用を 強制します。 |
ftpsockets | (4番目の優先度) FTPアクセス用 PHP ソケットクラスを使用します。 |
ここで気になる記述もご紹介します。
既存の FTP サーバーと非互換の PHP FTP 拡張モジュールがバンドルされた PHP インストール環境。このレアなケースでは FS_METHOD に ‘ftpsockets’ を定義する必要があります。
jp.wordpress.org
一般にアップデートで問題が発生する場合にのみ変更してください。変更してもうまく動作しない場合は元に戻すか削除してください。自動的に選択されたファイルシステム方式が動作しない場合、ほとんどの環境では「ftpsockets」に設定すると解決します。
jp.wordpress.org
ソケットはC言語やJavaに馴染みのない人にはなんのことか分からないかもしれませんが、通信時のポート番号だけを変えれば、http, ftp, ssh, pop, smtp... なんでもできる原始的なインターネット通信処理のこと。
ファイル操作のような処理を書いて通信できます。
(使う関数、処理の流れはどのプログラム言語もC言語と似ている。)
PHPでもできるんだ、と思った人もいるでしょう。原始的だからこそ、ftpsockets にしとけば大概の環境では解決するんですね?
PHP公式ドキュメント
PHP8以降ではftpsocketsでエラーになる。
大体のことは解決すると言っているftpsocketsですが、PHP8以降ではソケットクローズ処理で例外が発生してPHPエラーになることがあります。
Internal Server Errorなのでかなり致命的なもの。
くわしくはこちらに書きました。
今までftpsocketsで問題が一度も起きてなかったので、FTP関連の設定は何も知らなかった。今回調べた動機はこれ。
ネット上には 'direct' に変更する情報が多い。
ネット上では 'direct' に変更する情報が多いです。
ただdirectはファイル I/O なので、テーマやプラグインなどの対象のファイル・ディレクトリのパーミッションや所有者の変更もともないます。
中には '777'(全ユーザーが全操作可。) にしとけばOKみたいのもあるので、セキュリティもクソもない。
『セキュリティの問題を引き起こすことにつながる』と言っているのはこういうこと。
directにする意味、ファイル・ディレクトリのパーミッションや所有者変更の意味をきちんと考えながらしましょう。
'777' なんて、やりようによっては外部からphpファイル全削除とかできちゃいますよ。
それをしないとどうしようもないというなら、そのリスクを負ってることを分かってやりましょう。
ボクの環境でも '777' になってるところがあるっちゃある。
WP本体、テーマ・プラグインのインストール時にそうなってただけで、自分でやったわけじゃない。
WordPress.org日本版