
ファイルパーミッション(権限設定)は、WordPressセキュリティの基本中の基本です。 設定が甘いと、マルウェアがファイルを書き換え放題になります。 逆に厳しすぎると、WordPress自体が正常に動作しなくなります。 この記事では、WordPress公式が推奨するパーミッション値と、 実際のサーバー環境に合わせた設定方法を解説します。
Linuxサーバー上のファイルパーミッションは、3桁の数字で表されます。 各桁は「所有者(Owner)」「グループ(Group)」「その他(Others)」の権限を示し、 数字は「読み取り(4)」「書き込み(2)」「実行(1)」の合計値です。
| 数値 | 権限 | 記号表記 | 説明 |
|---|---|---|---|
| 7 | 読み+書き+実行 | rwx | 全ての操作が可能 |
| 6 | 読み+書き | rw- | 読み書き可能、実行不可 |
| 5 | 読み+実行 | r-x | 読み取りと実行が可能、書き込み不可 |
| 4 | 読みのみ | r-- | 読み取りのみ可能 |
| 0 | 権限なし | --- | 一切のアクセス不可 |
例えば755は、 所有者が「読み+書き+実行(7)」、グループが「読み+実行(5)」、その他が「読み+実行(5)」を意味します。 ディレクトリの場合、「実行」はそのディレクトリに入る(cd)権限を指します。
以下はWordPress公式ドキュメント(Codex)と主要ホスティング会社が推奨するパーミッション値です。 サーバー環境(Apache/Nginx、mod_php/CGI/FastCGI)によって最適値が異なる場合があります。
| 対象 | 推奨値 | より厳格 | 備考 |
|---|---|---|---|
| ディレクトリ(全般) | 755 | 750 | 所有者以外の書き込みを禁止 |
| ファイル(全般) | 644 | 640 | 所有者以外の書き込みを禁止 |
| wp-config.php | 440 | 400 | 最も重要な設定ファイル |
| .htaccess | 644 | 444 | パーマリンク設定時は一時的に644に |
| wp-content/ | 755 | 755 | テーマ・プラグインの格納先 |
| wp-content/uploads/ | 755 | 755 | PHP実行禁止を別途設定 |
| wp-content/cache/ | 755 | 755 | キャッシュプラグイン用 |
777は絶対に設定しないでください。全てのユーザーが読み書き実行できる状態になり、 同じサーバー上の他のユーザーからもファイルを改ざんされる可能性があります。 共有サーバーでは特に危険です。
wp-config.phpには データベースの接続情報、認証キー、テーブルプレフィックスなど、 サイトの最重要情報が含まれています。このファイルの保護は最優先事項です。
# 所有者のみ読み取り可能(最も厳格)
chmod 400 wp-config.php
# 所有者とグループが読み取り可能
# (一部のサーバーではWebサーバーがグループに属するため440が必要)
chmod 440 wp-config.php
# 動作しない場合は600を試す
chmod 600 wp-config.php※ 設定後にサイトが表示されなくなった場合は、サーバーのPHP実行ユーザーとファイル所有者が異なる可能性があります。 その場合は440または600に変更してください。
# .htaccessに追加(WordPress直下の.htaccess)
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>この設定により、ブラウザからwp-config.phpに直接アクセスしても403エラーが返されます。 PHPからの内部読み込みには影響しません。
WordPressは、ドキュメントルートにwp-config.phpが 見つからない場合、自動的に1階層上のディレクトリを探します。 この仕様を利用して、Webからアクセスできない場所にファイルを移動できます。
# 例: ドキュメントルートが /home/user/public_html/ の場合
mv /home/user/public_html/wp-config.php /home/user/wp-config.php
# 移動後のパーミッション設定
chmod 400 /home/user/wp-config.php※ マルチサイト環境や一部のサーバー構成では動作しない場合があります。 移動後は必ずサイトの動作確認を行ってください。
wp-content/uploads/フォルダは 画像やPDFなどのメディアファイルをアップロードする場所ですが、 マルウェアがPHPファイルをここに設置するケースが非常に多いです。 uploadsフォルダ内でPHPの実行を禁止することで、仮にマルウェアファイルが設置されても実行を防げます。
wp-content/uploads/.htaccessを作成して以下を記述:
# PHP実行を禁止
<Files "*.php">
Order Allow,Deny
Deny from all
</Files>
# 念のためPHP以外の実行ファイルも禁止
<FilesMatch "\.(php|phtml|php3|php4|php5|php7|phps|cgi|pl|asp|aspx|shtml|shtm|fcgi|fpl|jsp|htm|html|wml)$">
Order Allow,Deny
Deny from all
</FilesMatch>Nginx設定ファイル(nginx.conf または サイト設定ファイル)に追加:
# uploadsディレクトリ内のPHP実行を禁止
location ~* /wp-content/uploads/.*\.php$ {
deny all;
return 403;
}# WordPressルートディレクトリに移動
cd /path/to/wordpress
# 全ディレクトリを755に設定
find . -type d -exec chmod 755 {} \;
# 全ファイルを644に設定
find . -type f -exec chmod 644 {} \;
# wp-config.phpを厳格に設定
chmod 400 wp-config.php
# .htaccessを644に設定
chmod 644 .htaccess
# 管理画面からのファイル編集を無効化(wp-config.phpに追記)
# ※ テーマエディタ・プラグインエディタが使えなくなります
echo "define('DISALLOW_FILE_EDIT', true);" >> wp-config.phpDISALLOW_FILE_EDITを設定すると、 WordPress管理画面の「テーマエディター」と「プラグインエディター」が無効になります。 これはセキュリティ上推奨される設定ですが、管理画面からファイルを編集する必要がある場合は FTP/SFTPを使用してください。
原因: wp-config.phpのパーミッションが厳しすぎる可能性
対処法: FTPで接続し、wp-config.phpのパーミッションを440→600→644の順に試してください。サーバーのPHP実行ユーザーとファイル所有者が異なる環境では、400/440では読み取れない場合があります。
原因: wp-content/uploads/のパーミッションが不足
対処法: uploadsディレクトリのパーミッションが755であることを確認してください。また、ディレクトリの所有者がWebサーバーのユーザー(www-data, apache, nginx等)と一致しているか確認してください。
原因: wp-content/のパーミッションまたは所有者の問題
対処法: wp-content/plugins/のパーミッションが755であること、所有者がWebサーバーユーザーであることを確認してください。FTP情報を求められる場合は、wp-config.phpにFS_METHOD定数を設定する方法もあります。
原因: .htaccessが書き込み不可
対処法: .htaccessのパーミッションを一時的に644に変更し、パーマリンク設定を保存後、必要に応じて444に戻してください。
ファイルパーミッションの設定は地味な作業ですが、 マルウェア感染の被害を大幅に軽減できる重要な対策です。 特にwp-config.phpの保護とuploadsフォルダのPHP実行禁止は、 多くのマルウェア攻撃を無効化できます。
パーミッション設定だけでは完全な防御にはなりませんが、 WAFやセキュリティプラグインと組み合わせることで、 多層防御の重要な一角を担います。 サーバー移行やWordPressの再インストール後は、 パーミッションが初期値に戻っている場合があるため、必ず確認してください。
リバースハックはWordPress専門のセキュリティチームです。 マルウェア駆除から再発防止まで、ワンストップでサポートします。 まずはお気軽にご相談ください。
※ 相談は無料です。お見積もりだけでもお気軽にどうぞ。
この記事をシェア