• WordPressのファイル権限は所有者とウェブサーバーの実行ユーザーを確かめて決める

WordPressのファイル権限は所有者とウェブサーバーの実行ユーザーを確かめて決める

公開日: 執筆:佐藤

WordPressのファイル権限は、数字を先に決めません。まず、ファイルの所有者と、PHPまたはウェブサーバープロセスの実行ユーザーを確認します。そのうえで、画像の保存などに必要な場所だけ、必要な主体へ書き込みを許可します。

すべてのファイルやディレクトリを777にする方法は、この順序を逆にしています。動いたとしても、誰に書き込みが必要だったのかは分かりません。管理画面の利用者権限と、サーバー上のファイル権限も別の仕組みです。

chmodの数字は所有者、グループ、その他の順で読む

UNIX形式のファイル権限は、所有者、グループ、その他の三者について、読み取り、書き込み、実行を分けます。WordPress CodexのUNIXファイル権限の説明では、表示される九文字を三文字ずつに分け、最初を所有者、次をグループ、最後をその他の権限として説明しています。

記号 ファイルで許すこと ディレクトリで関係すること
r 内容を読み取る 配下の名前を読み取る
w 内容を書き換える xと組み合わせ、配下の項目を作成、削除、改名する
x プログラムとして実行する ディレクトリを通過し、配下へ到達する

数値では、読み取りを4、書き込みを2、実行を1として、三者ごとに合計します。したがって777は、所有者だけでなく、グループとその他にも、三つの権限をすべて与える設定です。「WordPressだけに許可する」という意味ではありません。

chmodが変えるのは、この権限の組み合わせです。ファイルの所有者や所属グループは変えません。所有者の不一致を、権限の数字だけで解決しようとすると、必要のない主体まで書き込み可能にしやすくなります。

WordPressの管理者とファイルの所有者は別である

WordPressの「管理者」は、投稿、設定、利用者などを管理画面で操作できる役割です。その利用者でログインしても、サーバー上のファイル所有者にはなりません。

サーバーへFTPやSSHで接続する利用者がファイルを所有し、PHPは別の利用者として動く構成があります。一方、PHPがファイル所有者と同じ利用者として動く構成もあります。WordPress Codexのファイル権限の説明も、権限はホスティング環境によって異なり、FTPの利用者とウェブサーバー側の利用者が分かれる場合を示しています。

WordPressのファイル操作方法を選ぶ処理は、作業先へ一時ファイルを作り、実行中のPHPスクリプトと一時ファイルの所有者が一致するかを確認します。一致すれば直接操作を選び、一致しなければSSHまたはFTP系の方法を選ぶ処理へ進みます。WordPressが書き込めるかどうかは、画面の役割名ではなく、サーバー上でファイルを作る主体と所有者の関係で決まります。

書き込みを許す場所は実行する作業から決める

WordPress CodexのWordPress強化案内は、書き込み権限を必要なときだけ緩めるか、アップロードなどのために特定のディレクトリを設けるよう案内しています。WordPress全体へ同じ権限を再帰的に設定する前に、実行したい作業と書き込み先を対応させます。

実行したい作業 ウェブサーバー側の書き込みが必要になる場所 同時に広げない場所
公開ページを表示する 通常は書き込みではなく、読み取りとディレクトリの通過が必要 WordPress本体、管理画面、テーマ、プラグインの全ファイル
画像をアップロードする 設定されているアップロード先 WordPressのルート全体、wp-admin、wp-includes
パーマリンク設定から規則を保存する WordPressに自動更新させる場合の.htaccess 同じディレクトリにある他のファイル
管理画面のテーマ編集を使う 編集対象のテーマファイル 使わないテーマ、WordPress本体、プラグイン

たとえば、画像の保存先へ書き込めないからといって、wp-adminまで書き込み可能にする理由はありません。反対に、テーマファイルを書き込める設定へ変えても、別の所有者が管理するアップロード先の問題は直りません。

テーマ編集を使わないなら、ウェブサーバーへテーマファイルの書き込みを許す必要もありません。機能が存在することと、そのサイトで機能を使うことを分けます。プラグインが独自の保存先を必要とする場合は、そのプラグインの説明と実際のパスを確認します。

777は所有者の不一致を解決しない

777で動くようになった場合に分かるのは、広げた権限のどこかを使って書き込めたことだけです。正しい所有者、必要なグループ、書き込み対象は特定できません。

「その他」への書き込み許可は、ブラウザーでページを見る人だけを指しません。同じサーバー上で動く、所有者にもグループにも当てはまらない利用者やプロセスも対象になります。共有サーバーでは、変更できる範囲を広げるほど、別の問題が起きたときに書き換えられる範囲も広がります。

また、chmodは所有者を変えないため、次に作られたファイルが別の所有者になれば、同じ障害が繰り返される可能性があります。必要なのが所有者の修正か、グループの調整か、特定ディレクトリへの書き込み許可かを、サーバー管理者と分けて判断します。

ホスティング会社から権限変更を案内された場合は、対象パス、必要な主体、変更する期間、作業後の戻し方を確認します。環境が分からないまま、別サイトで動いた数値をコピーしてはいけません。

変更前の状態を残して同じ操作で確かめる

最初に、失敗した操作、表示されたエラー、書き込み先のパスを記録します。次に、FTPソフト、サーバーの管理画面、またはSSHのls -lで、対象の所有者、グループ、現在の権限を控えます。表示方法が分からなければ、設定を変える前にホスティング会社へ確認します。

PHPを動かす利用者と、推奨される所有者やグループを確認できたら、失敗した作業に必要な場所だけを変更します。変更前の値は、戻せるように残します。ディレクトリとファイルでは実行権限の意味が違うため、両方へ同じ数値を一括適用しません。

変更後は、失敗した操作を一度だけ繰り返します。画像なら、保存先へ一件だけ登録され、公開画面から読めることまで確かめます。一時的に書き込みを広げた場所は元へ戻し、通常の表示を確認します。継続して使うアップロード先は、必要な主体だけが書き込める状態を維持します。

サーバーがUNIX形式の権限を使っていない場合や、所有者と実行ユーザーを確認できない場合は、chmodの数字を推測しません。最初の一手は、権限を変えることではなく、対象パスの所有者、グループ、現在値を記録することです。

戻る