PHPのパーミッションとは、正確にはPHPファイルそのものだけでなく、PHPが扱うファイルやディレクトリに対するアクセス権限のことです。
WebサイトやWordPressを運用する際には非常に重要で、設定を誤ると、サイトが正常に動作しなかったり、ファイル更新ができなかったり、セキュリティ上のリスクにつながったりします。
ここでは、PHPのパーミッションの基本から、よく使われる設定値、注意点まで、順を追ってわかりやすく解説します。
PHPのパーミッションとは何か
パーミッションとは、サーバー上のファイルやディレクトリに対して、誰がどの操作をできるかを定める仕組みです。
たとえば、PHPを使うWebサイトでは、次のようなファイルやフォルダが関係します。
index.phpfunctions.phpconfig.php- 画像アップロード用のディレクトリ
- キャッシュ保存用のディレクトリ
- ログ出力用のディレクトリ
これらに対して、
- 読み取れるか
- 書き込めるか
- 実行できるか
を設定するのがパーミッションです。
パーミッションの基本構造
パーミッションには、次の3種類の権限があります。
- read(r):読み取り
- write(w):書き込み
- execute(x):実行
そして、それぞれの権限は次の3つの対象ごとに設定されます。
- 所有者(owner)
- グループ(group)
- その他のユーザー(others)
つまり、1つのファイルに対して
- 所有者は何ができるか
- グループは何ができるか
- それ以外のユーザーは何ができるか
を決めているということです。
数字で表すパーミッションの見方
パーミッションは、644 や 755 のような3桁の数字で表されることがよくあります。
これは、各権限を数値化して合計したものです。
4= 読み取り2= 書き込み1= 実行
組み合わせると次のようになります。
7= 4 + 2 + 1 = 読み取り・書き込み・実行6= 4 + 2 = 読み取り・書き込み5= 4 + 1 = 読み取り・実行4= 読み取りのみ
たとえば 644 は、次の意味です。
- 所有者:読み取り・書き込み
- グループ:読み取りのみ
- その他:読み取りのみ
よく使われる代表的な設定
644
主に通常のファイルに使われることが多い設定です。
PHPファイル、HTML、CSS、JavaScriptなどでよく見られます。
意味は次の通りです。
- 所有者:読み取り・書き込み
- グループ:読み取りのみ
- その他:読み取りのみ
記号で表すと、次のようになります。
-rw-r--r--
640
これもファイルで使われることがある設定です。
644 よりも少し厳しめで、その他ユーザーには権限を与えません。
- 所有者:読み取り・書き込み
- グループ:読み取りのみ
- その他:権限なし
サーバー構成によっては、こちらのほうが適していることもあります。
755
主にディレクトリに使われることが多い設定です。
- 所有者:読み取り・書き込み・実行
- グループ:読み取り・実行
- その他:読み取り・実行
記号で表すと、次のようになります。
drwxr-xr-x
ディレクトリは、中にアクセスするために実行権限が必要になるため、ファイルとは設定が異なることがあります。
750
ディレクトリに対するやや厳しめの設定です。
- 所有者:読み取り・書き込み・実行
- グループ:読み取り・実行
- その他:権限なし
公開範囲を抑えたい環境で使われることがあります。
600
機密性の高いファイルで使われることがある設定です。
- 所有者:読み取り・書き込み
- グループ:権限なし
- その他:権限なし
認証情報や重要な設定を含むファイルで使われる場合があります。
400 / 440
さらに制限の強い設定です。
400:所有者のみ読み取り可能440:所有者とグループが読み取り可能
特に重要な設定ファイルでは、サーバー構成に問題がなければ、こうした強い制限が使われることもあります。
777
すべてのユーザーに読み取り・書き込み・実行を許可する設定です。
- 所有者:読み取り・書き込み・実行
- グループ:読み取り・書き込み・実行
- その他:読み取り・書き込み・実行
一見便利に見えますが、セキュリティ上非常に危険なため、通常は避けるべきです。
PHPファイルはなぜ 644 が多いのか
PHPファイルは、一般的なWebサーバー環境では、ユーザーが直接「実行ファイル」として動かすのではなく、WebサーバーやPHP実行環境が読み込んで処理する形で動きます。
そのため、多くの環境では、PHPファイルに実行権限を付ける必要はありません。
この理由から、PHPファイルには 644 や 640 が使われることが多いです。
ただし、これはあくまで一般的なWeb運用の話です。
CGI方式など特殊な構成では、要件が異なる場合があります。
ディレクトリに 755 が使われる理由
ファイルと違い、ディレクトリは単に中身を持つだけではなく、その中にアクセスするための権限が必要になります。
そのため、ディレクトリでは実行権限が重要になります。
この違いにより、
- ファイルは
644や640 - ディレクトリは
755や750
のように設定が分かれるのが一般的です。
WordPressでよくあるパーミッションの考え方
WordPressでは、一般的に次のような考え方がよく使われます。
- 通常のファイル:
644または640 - ディレクトリ:
755または750 wp-config.phpのような重要ファイル:より厳しい設定を検討する
特に wp-config.php にはデータベース接続情報など重要な情報が含まれるため、サーバー環境に問題がなければ、440 や 400 のような強い制限が使われることもあります。
ただし、実際に適切な値は、サーバーの構成、実行ユーザー、ホスティング環境によって変わるため、必ずしも一律ではありません。
777 を避けるべき理由
777 はすべてのユーザーに書き込み権限まで与えるため、公開サーバーでは非常に危険です。
この状態では、状況によっては次のようなリスクが高まります。
- 不正なファイルを書き込まれる
- ファイルを改ざんされる
- 悪意あるスクリプトを設置される
- セキュリティ事故につながる
動作しないからといって、すぐに 777 を設定するのは避けたほうがよいです。
一時的に動くことがあっても、根本原因を見えにくくしてしまうことがあります。
パーミッションだけでなく「所有者」も重要
実務では、パーミッションだけ見ても解決しないケースが少なくありません。
その大きな理由が、所有者と実行ユーザーの違いです。
たとえば、次のようなズレがあると問題が起こります。
- FTPでアップロードしたファイルの所有者
- Webサーバーが動作しているユーザー
- PHP-FPMやApacheの実行ユーザー
これらが一致していない場合、見た目のパーミッションが正しくても、書き込みができないことがあります。
つまり、トラブル対応では
- パーミッション
- 所有者
- グループ
- PHPやWebサーバーの実行ユーザー
をセットで確認することが大切です。
よくあるトラブル例
パーミッションや所有者に問題があると、次のような症状が発生することがあります。
- 画像をアップロードできない
- プラグインやテーマを更新できない
- キャッシュファイルを生成できない
- ログファイルを書き込めない
Permission deniedと表示される- 403エラーや500系エラーの原因のひとつになる
ただし、500エラーは原因が非常に幅広いため、必ずしもパーミッションだけが原因とは限りません。
chmod とは何か
パーミッションを変更するためによく使われるのが chmod です。
たとえば、次のように設定できます。
chmod 644 index.php
chmod 755 public_html
また、ファイルとディレクトリをまとめて変更する場合には、次のようなコマンドが使われることがあります。
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
これは、カレントディレクトリ以下の
- すべてのファイルを
644 - すべてのディレクトリを
755
に揃える例です。
FTPソフトでも変更できる
パーミッションは、コマンドラインだけでなくFTPソフトから変更できる場合もあります。
たとえば FileZilla や FFFTP などでは、多くの場合次のような流れです。
- 対象ファイルまたはフォルダを右クリック
- 「ファイルの属性」や「パーミッション変更」を選ぶ
- 数値を入力して設定する
レンタルサーバーの管理画面から変更できる場合もあります。
PHPで確認や変更に使われる関数
PHPでは、ファイル権限やファイル状態を確認するために、次のような関数が使われます。
file_exists():ファイルが存在するか確認するis_readable():読み取り可能か確認するis_writable():書き込み可能か確認するchmod():権限を変更するmkdir():ディレクトリを作成するunlink():ファイルを削除する
たとえば、書き込み可能かどうかを確認する例は次のとおりです。
<?php
$file = 'sample.txt';
if (is_writable($file)) {
echo '書き込み可能です';
} else {
echo '書き込みできません';
}
?>
PHPで chmod を使うときの注意点
PHPから chmod() を使う場合は、権限値を8進数で指定する必要があります。
<?php
chmod('sample.txt', 0644);
?>
ここで 0644 の先頭の 0 は、8進数として扱うための書き方です。
ただし、PHPから chmod() を実行しても、サーバー側の制限や所有者の違いにより、期待通りに変更できないことがあります。
また、Windows環境ではUnix系サーバーと同じ感覚で権限が扱えない場合もあります。
実務での基本的な考え方
パーミッション設定では、次の考え方が重要です。
必要最小限の権限にする
余計な権限を与えないことが、セキュリティの基本です。
まずは標準的な設定から始める
迷った場合は、まず次を基準に考えるとわかりやすいです。
- ファイル:
644または640 - ディレクトリ:
755または750
書き込みが必要な場所だけ見直す
すべてを広く開放するのではなく、PHPが実際に書き込む必要がある場所だけを確認します。
たとえば次のような場所です。
uploadscachetmplogs
777 で解決しようとしない
権限エラーが出たからといって、安易に 777 にするのは危険です。
まずは所有者や実行ユーザーを確認するほうが適切です。
初心者が押さえておきたいポイント
PHPのパーミッションを理解するときは、まず次の基本を押さえると整理しやすくなります。
- PHPのパーミッションとは、PHP関連ファイルやディレクトリのアクセス権限のこと
- ファイルとディレクトリでは、適切な設定値が異なることが多い
- 一般的には、ファイルは
644または640、ディレクトリは755または750 - 重要ファイルはより厳しく設定されることがある
777は原則避ける- 解決しないときは、パーミッションだけでなく所有者も確認する
まとめ
PHPのパーミッションは、Webサイトの正常な動作とセキュリティの両方に関わる重要な設定です。
一般的なUnix系サーバーでは、次の考え方が基本になります。
- 通常のファイルは
644または640 - ディレクトリは
755または750 - 重要な設定ファイルはより厳しい制限を検討する
777はできるだけ避ける- 問題解決では所有者や実行ユーザーも確認する
つまり、パーミッションは単なる数字の設定ではなく、サイトを安全かつ正常に運用するための土台と考えるとわかりやすいです。
以上、PHPのパーミッションについてでした。
最後までお読みいただき、ありがとうございました。










