2026年5月20日
2026年5月20日
WordPressのパーミッション推奨値|ディレクトリ755・ファイル644・wp-config.phpの設定と所有者の確認
WordPressのファイルパーミッションは、ディレクトリを755、ファイルを644にするのが基本です。データベースの接続情報を含む wp-config.php は、読める人をさらに絞ります。数字だけでなく、ファイルの所有者がだれで、PHPがどのユーザーで動いているかも合わせて確認すると、情報漏えいと「更新できない」の両方を防げます。この記事の推奨値は、2026年11月時点で WordPress 公式の「WordPress の安全性を高める(Hardening WordPress)」を確認した内容です。
パーミッションの数字の読み方
パーミッションは「所有者・グループ・その他」の3組で、読み取り(4)・書き込み(2)・実行(1)の合計で表します。
| 値 | 表記 | 意味 |
|---|---|---|
| 755 | rwxr-xr-x | 所有者は読み書きと中に入る操作ができ、それ以外は読み取りと中に入る操作だけ(ディレクトリ向け) |
| 644 | rw-r--r-- | 所有者は読み書き、それ以外は読み取りだけ(ファイル向け) |
| 640 | rw-r----- | 所有者は読み書き、グループは読み取り、その他は何もできない |
| 600 | rw------- | 所有者だけが読み書きできる |
| 440 / 400 | r--r----- / r-------- | 書き込みは誰もできず、読み取りは所有者(とグループ)だけ |
ディレクトリの「実行(x)」は、そのディレクトリの中に入る権限です。ディレクトリから x を外すと、中のファイルが読めなくなります。
WordPressの推奨値
| 対象 | 推奨値 | 補足 |
|---|---|---|
| ディレクトリ | 755(共用で他人に見せたくない場合は 750) | 公式の自動更新でも、ディレクトリは 755 にそろえられます |
| ファイル | 644(同上の場合は 640) | 公式の自動更新でも、ファイルは 644 にそろえられます |
| wp-config.php | 自分と Web サーバーだけが読めるように絞る | 公式の説明は「一般に 400 か 440」。PHP がファイルの所有者と同じユーザーで動く環境なら 600 や 400 でも動きます |
| .htaccess | 644 | パーマリンク設定の保存で WordPress に書き換えさせる場合は、PHP の実行ユーザーが書き込める必要があります |
| wp-content/uploads | ディレクトリ 755・ファイル 644 | PHP の実行ユーザーが書き込める所有者にしておきます |
777(だれでも書き込める)にする必要はありません。共用サーバーでは、同じサーバーの別の利用者に書き換えられるおそれがあります。
レンタルサーバーによっては、推奨値を独自に決めていることがあります(PHP の動かし方がサーバーごとに違うため)。契約しているサーバーのマニュアルに値が書かれていれば、そちらを優先してください。
所有者の考え方
公式の説明では、ファイルは自分のユーザーアカウントが所有し、自分が書き込めるようにします。WordPress が書き込む必要があるファイル(uploads、テーマエディターを使う場合のテーマなど)だけは、Web サーバー(PHP)の実行ユーザーが書き込めるように、所有者かグループを合わせます。
全体を chown -R www-data:www-data のように Web サーバーのユーザーの持ち物にすると、PHP からすべてのファイルを書き換えられる状態になります。プラグインの脆弱性を突かれたときに被害が広がりやすいので、まず現状を確認してから決めます。
プラグインやコアの更新で「接続情報(FTP のホスト名・ユーザー名・パスワード)」を求められるのは、多くの場合この所有者の不一致が原因です。WordPress は、PHP が作ったファイルの所有者と WordPress のファイルの所有者が同じときだけ、ファイルを直接書き換える方式を選びます。違う場合は FTP 経由の更新を求めます。パーミッションを 777 に広げるのではなく、所有者を合わせて直します。
現在の設定を確認する
SSH で WordPress のディレクトリに入り、次のコマンドで値と所有者を確認します。パスは自分の環境に合わせてください。
cd /var/www/html
# wp-config.php の値・所有者・グループ
stat -c '%a %U:%G %n' wp-config.php
# その他のユーザーが書き込めるファイルとディレクトリを探す
find . -perm -o=w ! -type l
# uploads の中にある PHP ファイルを探す(通常は存在しない)
find wp-content/uploads -type f -name '*.php'
Web からアクセスしたときの PHP の実行ユーザーは、サーバーの設定(PHP-FPM のプールの user など)か、レンタルサーバーのマニュアルで確認してください。SSH でログインしたユーザーと同じとは限りません。
uploads の中に見覚えのない PHP ファイルがあれば、改ざんを疑い、削除する前にファイルの日時と中身を記録しておきます。
パーミッションを一括で直す
WordPress のディレクトリで実行します。実行前にバックアップを取ってください。
cd /var/www/html
# ディレクトリを 755、ファイルを 644 にそろえる
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
# wp-config.php を絞る(PHP がファイルの所有者で動く環境の例)
chmod 600 wp-config.php
wp-config.php の値は、環境に合わせて次のように選びます。
- PHP がファイルの所有者と同じユーザーで動く(多くの共用レンタルサーバー、ユーザーごとの PHP-FPM): 600 か 400
- 所有者は自分のアカウントで、Web サーバーはグループとして読む: 640 か 440 にし、グループを Web サーバーのグループにする
# 例: 所有者は自分、グループは Web サーバー(www-data)にして 640
sudo chgrp www-data wp-config.php
chmod 640 wp-config.php
設定後にサイトと管理画面を開き、表示とログインができることを確認します。真っ白な画面やエラーになった場合は、PHP が wp-config.php を読めていません。値を 644 に戻してから、所有者とグループを見直してください。
400 や 440 にすると、wp-config.php に書き込むプラグイン(キャッシュの設定を書き込むものなど)が失敗します。そうしたプラグインを設定するときだけ、一時的に書き込みを許可します。
wp-config.php を Web から読まれないようにする
PHP が正常に動いていれば、wp-config.php にブラウザーでアクセスしても中身は表示されません。PHP が止まった場合などにソースが表示されるのを防ぐため、Web サーバー側でもアクセスを拒否しておきます。Apache 2.4 では、WordPress を置いたディレクトリの .htaccess に次を書きます(古い Order Deny,Allow / Deny from all は Apache 2.2 の書き方です)。
<Files "wp-config.php">
Require all denied
</Files>
詳しい手順は「wp-config.php へのアクセスを拒否する設定」で説明しています。
.htaccess 自体は、Apache の標準設定(httpd.conf の <Files ".ht*">)ですでにアクセスが拒否されています。
公式の説明では、wp-config.php を WordPress を置いたディレクトリの1つ上に移すこともできます。WordPress は、同じディレクトリに wp-config.php がなければ1つ上のディレクトリを探します。ただし公式も、効果は小さいという意見や、やり方を誤ると逆に危険になる点に触れています。移す場合は、1つ上のディレクトリが公開ディレクトリでないことを確かめてください。
uploads で PHP を実行させない
uploads は WordPress が書き込むディレクトリなので、攻撃でファイルを置かれやすい場所です。ここで PHP が実行されないようにしておくと、置かれても動きません。
Apache 2.4 では、wp-content/uploads/.htaccess を作って次を書きます。
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
.htaccess で Require を使うには、サーバー側の AllowOverride で許可されている必要があります。許可されていないと 500 エラーになったり、設定が無視されたりします。書いたあとに https://example.com/wp-content/uploads/test.php のような存在しない PHP の URL を開き、403 になることを確認します(404 のままなら設定が効いていません)。
Nginx では、server ブロックの中で、PHP を処理する location ~ \.php$ より前に次を置きます。正規表現の location は上から順に照合され、最初に一致したものが使われるためです。
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
}
設定を変えたら nginx -t で構文を確認してから再読み込みします。
なお、WordPress のメディアのアップロードは、許可された種類(画像・PDF など)以外のファイルを標準で受け付けません。PHP ファイルをメディアとしてアップロードすることは、管理画面からは通常できません。
注意点
- パーミッションを変える前に、ファイルとデータベースのバックアップを取ります。
- FTP ソフトでパーミッションを変える場合、サーバーによっては一括変更に対応していないことがあります。件数が多いときは SSH の
findを使うほうが手早く、漏れも防げます。 - 更新時に FTP の接続情報を求められるときは、パーミッションを広げず、所有者を確認します。「WordPress のパーミッションエラーの直し方」も参考にしてください。
- 定期的に、上の確認コマンド(その他のユーザーが書き込めるファイル、uploads の中の PHP)を実行すると、設定の崩れや改ざんに早く気づけます。