WordPressのセキュリティを固めたいと思って調べはじめると、「パーミッションは755にしろ」「いや644だ」「wp-config.phpは600」と数字ばかりが飛び交っていて、結局どれが正解なのか分からなくなってきませんか。私もWeb制作を25年やってきて、サイトの改ざんや乗っ取りの相談を何度も受けてきましたが、その多くは「権限の設定が甘かった」という、地味だけれど致命的な穴が原因でした。
WordPressのパーミッションは、ディレクトリ755・ファイル644を基本に、wp-config.phpだけを600や640へ厳しく絞り、どんな理由があっても777にはしない——これが現在のWordPress公式が推奨する考え方です。
数字を丸暗記するのではなく、「誰に・何を許すのか」という仕組みを理解しておけば、自分のサーバー環境に合わせて迷わず判断できるようになります。この記事では、パーミッションの基本から、WordPressで具体的に設定すべき値、共用サーバーで特に気をつけたい落とし穴まで、実際の運用目線で整理していきます。
万が一サイトが改ざんされれば、復旧の手間も信用の損失も計り知れません。「自分のサイトは小さいから狙われない」という油断こそ、攻撃者が一番つけ込みやすい隙です。もしもの時に後悔しないよう、今のうちに権限まわりを見直しておきましょう。
関連記事:WordPressのPingBack機能を悪用したDDoS攻撃の対処法
そもそもパーミッションとは何か
パーミッションとは、サーバー上のファイルやディレクトリに対して「誰がどこまで操作してよいか」を決める権限設定のことです。FTP/SFTPソフトやサーバーのコントロールパネルから変更でき、ここを適切に絞ることが、WordPressのセキュリティ強化でまず手をつけるべき土台になります。
権限は「対象となるユーザー」と「許可する操作」の2つの軸で考えると整理しやすいです。まず、ユーザーは次の3種類に分かれます。
| 所有者(Owner) | そのファイル・ディレクトリの持ち主。基本的にあなた自身 |
|---|---|
| グループ(Group) | 同じグループに属するユーザー。共用サーバーでは要注意 |
| その他(Other) | 上記以外のすべて。つまり第三者・世界中の誰か |
そして、それぞれのユーザーに対して許可できる操作が「読み(r)」「書き(w)」「実行(x)」の3つです。ファイルとディレクトリでは意味が少し変わります。
| ファイル | ディレクトリ | |
|---|---|---|
| 読み(r=4) | ファイルの中身を読める | 中のファイル一覧を表示できる |
| 書き(w=2) | 上書き・削除ができる | ファイルの作成・削除ができる |
| 実行(x=1) | プログラムとして実行できる(CGIなど) | その中へ入る(移動する)ことができる |
「755」のような3桁の数字は、左から「所有者・グループ・その他」の権限を表しています。各桁は、読み(4)+書き(2)+実行(1)を足し合わせた数です。たとえば7は4+2+1で「読み書き実行すべて許可」、5は4+1で「読みと実行のみ」、4は「読みのみ」という具合です。
つまり755は「所有者には全部、グループとその他には読みと実行だけ」、644は「所有者には読み書き、グループとその他には読みだけ」を意味します。この成り立ちさえ押さえておけば、なぜ次に挙げる値が推奨されるのかが腑に落ちるはずです。
WordPressで推奨されるパーミッション設定
ここからが本題です。WordPress公式(developer.wordpress.org)のセキュリティ強化ガイドでは、基本方針を明確に示しています。それを実際の運用に落とし込むと、次のようになります。
ディレクトリは755、ファイルは644が基本
WordPress公式が推奨する基本値は、ディレクトリ755・ファイル644です。所有者である自分は自由に編集でき、第三者は読み込みしかできない、というバランスの取れた設定です。
インストール全体を一括でこの値に揃えるには、SSHが使える環境なら次のコマンドが手早く確実です。findでディレクトリとファイルを別々に拾って権限を当てます。
# ディレクトリをすべて755に
find /path/to/wordpress/ -type d -exec chmod 755 {} \;
# ファイルをすべて644に
find /path/to/wordpress/ -type f -exec chmod 644 {} \;
サーバーによっては、より厳しい750(ディレクトリ)・640(ファイル)でも問題なく動きます。グループに余計な権限を渡したくない場合は、こちらを検討してもよいでしょう。
wp-config.phpは600または640で厳重に
数あるファイルの中でも、wp-config.phpは別格の扱いをします。このファイルにはデータベースの接続情報(ユーザー名・パスワード)が平文で書かれているため、第三者に読まれた時点でサイトの管理画面を経由せずに直接データベースへ侵入される恐れがあるからです。最優先で守るべきファイルだと考えてください。
WordPress公式は「あなた(とWebサーバー)だけが読めるようにする」とし、具体的には400または440を挙げています。ただし共用サーバーではこれだと動作しないケースもあり、現実的には600や640が広く推奨され、利用するホスティング会社の要件に合わせて選ぶのが安全です。当ブログでも、契約しているホスティング会社の推奨に従って600で運用しています。
# wp-config.php を所有者のみ読み書き可能に
chmod 600 wp-config.php
なお、レンタルサーバーの自動インストール機能でWordPressを導入した場合、wp-config.phpの所有者がWebサーバー(Apacheなど)側になっていて、自分では権限を変更できないことがあります。その場合は、一度FTP/SFTPでファイルをダウンロードし、サーバー上の元ファイルを削除してから再アップロードすると、所有者が自分に切り替わって設定できるようになります。
出典:Changing File Permissions – WordPress.org Advanced Administration Handbook
.htaccessはユーザーが書き込めればよい
.htaccessは、WordPressのパーマリンク設定やリダイレクトのルールが書き込まれる重要なファイルです。改ざんされると訪問者を不正サイトへ飛ばされる危険があるため、第三者に書き込みを許してはいけません。
WordPress側で自動的にリライトルールを書き換えられるようにする場合でも、必要なのは「所有者(自分)が書き込める」ことだけです。644を基本に、自動更新でうまくいかないときだけ環境に応じて調整します。かつてよく見かけた「666」のような、誰でも書き込める設定にする必要はありません。
uploadsやthemesで書き込めない場合の対処
管理画面からメディアをアップロードできない、テーマを編集できないといった場合、uploadsやthemesディレクトリの書き込み権限が足りていない可能性があります。
このとき大切なのは、安易に777へ上げないことです。WordPress公式も「744など低めの設定から始めて、動くところまで少しずつ上げていく。777は本当に必要なときだけ、できれば一時的に」と明記しています。多くの環境では、該当ディレクトリの所有者やグループをWebサーバーのユーザーに合わせる(グループ書き込みを許す)ことで、777にせずとも解決します。
絶対に避けたい「777」という設定
パーミッションの解説で必ず警告されるのが、777は絶対に使わないという点です。これはWordPressに限らず、サーバー運用全体の鉄則だと思ってください。
777は「所有者・グループ・その他のすべてに、読み・書き・実行を全許可する」という意味です。つまり世界中の誰でもそのファイルを書き換えたり削除したりできる状態で、攻撃者にとっては願ってもない入り口になります。WordPress公式も、悪意ある第三者が不正なファイルをアップロードしたり既存ファイルを書き換えたりできれば、データベース情報やパスワードを含めてサイト全体を乗っ取られると警告しています。
「設定がうまくいかないから、とりあえず777にしたら動いた」——この“とりあえず”が一番危険です。動いてしまうがゆえに、そのまま放置されて穴になり続けます。前述のとおり、低い権限から少しずつ上げて必要最小限で止めるのが正しい手順です。
出典:Hardening WordPress – WordPress.org Advanced Administration Handbook
所有者の考え方と、共用サーバーの落とし穴
パーミッションの数字と並んで重要なのが「誰がそのファイルを所有しているか」という観点です。WordPress公式は、すべてのファイルは自分のユーザーアカウントが所有し、自分が書き込めるようにするのが原則だとしています。WordPressから書き込みが必要なファイルだけ、必要に応じてWebサーバーのユーザーがグループ所有する、という形が理想です。
ここで注意したいのが共用(共有)サーバーです。企業の専用サーバーでない限り、多くの人は1台のサーバーを複数の利用者で分け合う共用サーバーを使っているはずです。このとき、3桁の真ん中——「グループ」の権限が思わぬ穴になることがあります。
もし環境によって他の利用者と同じグループに属していると、グループへ書き込み権限を与えた瞬間、共用サーバー内の他人があなたのファイルを削除・改ざんできてしまう可能性があるのです。グループを意図的に使っていないのであれば、真ん中の数字は0にして、グループへの権限を渡さない(例:744、740)のが安全です。
近年は、利用者ごとにプロセスを分離する仕組み(suEXECなど)を備えたサーバーが主流になり、この危険は以前より小さくなりました。それでも「グループに余計な権限を与えない」という原則は今も有効です。自分の契約しているサーバーがどういう構成なのかを把握したうえで、最小限の権限に絞っておきましょう。
転送はFTPではなくSFTPで
パーミッションをいくら厳しく設定しても、ファイルをやり取りする経路が無防備なら意味が半減します。WordPress公式も、ホスティングが対応しているならSFTP(暗号化された通信)を使うべきだと明記しています。
旧来のFTPは、IDやパスワードを暗号化せずそのまま流すため、通信を盗み見られれば認証情報が筒抜けになります。SFTPなら通信全体が暗号化されるので、パスワードを傍受される心配がありません。FileZillaなどの主要なFTPソフトはSFTPに対応しているので、接続設定で「SFTP」を選ぶだけです。今からわざわざ平文のFTPを使う理由はありません。
関連記事:【比較】FTPソフト「FFFTP」と「FileZilla」の違いと選び方
まとめ:迷ったらこの設定から
WordPressのパーミッションは、数字を闇雲に覚えるのではなく「誰に何を許すか」を意識すると判断に迷わなくなります。最後に、実際に手を動かすときの指針を整理しておきます。
・基本はディレクトリ755・ファイル644。厳しめにするなら750・640でも動く環境は多い
・wp-config.phpは600または640へ。公式の理想は400/440だが、共用サーバーでは600/640が現実解
・.htaccessは自分が書き込めれば十分。666など第三者に書かせる設定は不要
・777は絶対に使わない。動かないときは744など低い値から少しずつ上げる
・ファイルの所有者は自分。共用サーバーでは真ん中(グループ)の数字を0に寄せる
・転送は必ずSFTPで。平文のFTPは使わない
まず一番にやるべきは、wp-config.phpを600に絞ることです。サイトの心臓部であるデータベース情報を守る、もっとも費用対効果の高い一手です。ここを固めたうえで全体を755/644に揃えれば、土台となるセキュリティはぐっと堅くなります。パーミッションは一度設定すれば終わりではなく、プラグインの追加やサーバー移転のたびに崩れることもあります。たまに見直す習慣をつけておくと安心ですよ。