Webサーバー(Apache)のパーミッション
CentOS7を使って、Apacheの勉強をしていたのですが、パーミッションエラーなどでよくエラーになったので、整理してみました。
前半が、前提知識としてLinuxのパーミッション設定の話、後半がApacheのパーミッション設定の話になってます。
Linuxのパーミッション
所有権
種類 | 意味 |
---|---|
Owner (所有者) | ファイル or ディレクトリの所有者 |
Group (グループ) | ファイル所有者の所属グループ |
Other (その他) | その他の全てのユーザー |
実行権
種類 | アルファベット表記 | 数字表記 |
---|---|---|
Read (読み込み) | r | 4 |
Write (書き込み) | w | 2 |
Execute (実行) | x | 1 |
権限なし | - | 0 |
実行権は、ファイルの場合とディレクトリの場合で意味が異なります。
ファイルの場合
種類 | 説明 |
---|---|
Read | lessコマンドなどを利用してファイルを読み込むこと |
Write | テキストエディタなどによる上書き・rmコマンドなどによる削除 |
Execute | スクリプトファイルなどのプログラムを実行すること |
ディレクトリの場合
種類 | 説明 |
---|---|
Read | lsコマンドなどを利用して、対象のディレクトリの中にあるファイルを確認すること |
Write | 対象のディレクトリのファイルを作成・削除すること |
Execute | cdコマンドなどで、対象のディレクトリにアクセスできる権限 |
Webサーバー(Apacheなど)のパーミッション
- Apacheのユーザーである、apacheユーザーに権限があるかを意識すると良いです。
- HTMLなどの静的なコンテンツでも、PHPのようなプログラムでも、基本的にはapacheユーザーに読み込み権限があれば動作します。
HTMLなどの静的コンテンツの場合
- Webページはブラウザを通して一般ユーザーがアクセスするため、Otherに読み込み権限を与えればいいように感じますが、それは間違いです。
- 実際には、ブラウザのリクエストを元にApacheがファイルを読み込み、その内容をブラウザに返しています。そのため、apacheユーザーに読み込み権限が必要です。
PHPを実行する場合
- Apacheのデフォルト設定では、Apacheの一部である、モジュールの機能を利用してPHPを実行します。
- この時には、ApacheがPHPのスクリプトファイルを読み込んで、PHPモジュールとしてプログラムを実行するため、apacheユーザーに読み込み権限があれば実行できます。実行権限は不要です。