ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

WordPress, テーマ・プラグインのアップデートエラーで見直すFTPの設定。

wordpress image
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

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 ソケットクラスを使用します。
WPドキュメントからコピペ

ここで気になる記述もご紹介します。

既存の 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' になってるところがないでもない。)

パーミッションや所有者権限エラーはWebサーバーのログに出るので対象ファイルの特定はたやすい。

chmod, chownコマンドを使って変更する。

前の投稿
WordPress, ショートコード内の処理でextract()を使うのは止めよう!
WordPress5, 新エディタ(Gutenberg)にCSSを適用する方法
次の投稿

コメントを残す