WordPress

WordPressで自動更新したい時のパーミッション、もしくはFS_METHOD手動設定やめようって話

More than 1 year has passed since last update.

何番煎じかわかりませんが、ファイル書き込みにFTP/SSHを経由させない(所謂「接続情報の入力」を回避する)話です。

プラン

  • コアの更新をできるようにしたい -> 全体を書き込み可能に
  • パーマリンクほげほげ -> .htaccess
  • ファイルアップロード -> wp-content/uploads
  • テーマ編集 -> wp-content/themes
  • プラグイン更新 -> wp-content/{plugins,upgrade,あとthemesも?}

など。いずれにせよwp-config.phpは読み取り専用がよいでしょう。

おさらい:FS_METHODの自動判定

以下の条件を全て満たした場合に FS_METHOD=direct が選択され、PHPから直接ファイル操作が行われます。

たとえPHPがファイルを作成できたとしても、所有者がApacheユーザーやrootユーザーのままではWebサイトのオーナーが(FTPなどで)ファイルを操作できなくなる危険性があるため、この確認が行われています。

※過去に書いていた「グループの書込権+direct強制」はこの罠にはまる可能性があります。多分はまります。

というわけで無闇なFS_METHOD=directには要注意ということで。

所有者・グループをPHPの実行ユーザーにできる場合

コア更新をできるように、wp-config以外を書き込み可能にする例。

cd /path/to/wordpress

# 基本は所有者まで書き込み可
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +

# wp-configはPHPから書き込めないように
chmod 400 wp-config.php

# 所有者・グループの変更
chown -R www-data:www-data .

所有者は押さえておきたい場合(WP4.1以降限定)

前述のような「書き込みはできるけど所有権がまずい」環境でも既存のファイルの更新は問題なく行えることから、WordPress4.1以降ではファイルの追加を伴わない書き込みだけ行えるようになっているようです。コアファイルのアップグレードであっても同様です。

この機能を利用する場合、PHPの実行ユーザーを所有グループにして書き込み許可を与えるか、誰でも書き込み可能にするか、どちらかにしておきます。FS_DIRECTの指定は行いません。

この場合ファイル追加の必要なアップグレードは失敗するので、手動でアップグレードを行う必要があります。

cd /path/to/wordpress

# 基本はグループまで書き込み可
find . -type d -exec chmod 775 {} +
find . -type f -exec chmod 664 {} +

# wp-configはPHPから書き込めないように
chmod 640 wp-config.php

# グループの変更
chgrp -R www-data .

もしくは、誰でも書き込み可能。

cd /path/to/wordpress

# 誰でも書き込み可
find . -type d -exec chmod 777 {} +
find . -type f -exec chmod 666 {} +

# wp-configはPHPから書き込めないように
chmod 644 wp-config.php

それでも自由にアクセスさせたい

検証してないので詳細は省きますが、

とかやるといけるかも。

参考