SREチーム エンジニアの阿久津です。
今回はApacheの403 Forbiddenが表示された時のチェックポイントについて記事にしたいと思います。
環境
- Vagrant 1.9.5
- CentOS Linux release 7.1.1503 (Core)
- Apache 2.4.6
前提
-
設定ファイル
/etc/httpd/conf/httpd.conf -
DocumentRoot
/var/hoge -
テストページ
/var/hoge/index.html
事象
テストページを表示しようとすると403 Forbiddenが表示される。
チェックポイント
①Apacheの再起動をしていない
設定ファイルを変更した場合、Apacheを再起動しないと変更が反映されません。
そのため再起動していない場合は、実施します。
■再起動
■リロード
Apacheを終了したくない場合は、以下を実行して下さい。
②ファイルに読み取り権限がない
権限には「所有者」「所有グループ」「その他のユーザ」がありますが、「その他のユーザ」に読み取り権(r)が付与されているか確認してください。
※今回の場合だと、/var/hoge/index.html の権限になります。
■その他のユーザに読み取り権がない場合
■対応
ファイルに読み取り権を付与します。
③ディレクトリの権限に実行権がない
DocumentRootまでの各ディレクトリで、「その他のユーザ」に実行権(x)が付与されているか確認してください。
今回だと「/」, 「/var」, 「/var/hoge」の3つの内のいずれかにディレクトリに実行権(x)がないと、テストページが表示されません。
■ /var/hoge/ に実行権がない場合
■対応
ディレクトリに実行権を付与する。
④httpd.confのDirectoryセクションの設定を見直す
Directoryセクション内のRequireの設定を確認しましょう。
■すべてのアクセスを拒否する場合
上記のようにRequireで「all denied」と記述すると、どこからでもアクセス不可となってしまいテストページが表示されません。
そのため以下のような方法でテストページへのアクセスを許可することができます。
■すべてのアクセスを許可する場合
■特定のIPのみアクセスを許可する場合
⑤SELinuxが有効になっている
SELinuxが有効になっている場合、DocumentRootへのアクセスが拒否されている可能性があります。
SELinuxを利用する予定がない場合は無効に設定しましょう。
⑤-1. SELinuxを無効にする場合
■SELinuxの状態確認
Enforcingと表示される場合、SELinuxは有効になっている状態です。
■SELinuxを無効にする
SELinuxの設定ファイルは /etc/selinux/config になるため、こちらを編集します。
■サーバ再起動
SELinuxの設定を反映するためにサーバの再起動を行います。
■SELinuxの状態を再度確認
Disabledと表示されれば、SELinuxは無効に変更されています。
⑤-2. SELinuxを有効のまま運用する場合
新しいDocumentRootにはSELinuxのラベルを付ける必要があります。
■元DocumentRootのラベルを確認
■ラベルの付与
新DocumentRootに元DocumentRootと同じラベルを付与します。
■ラベルの確認
以下のように表示されていれば、元DocumentRootと同じラベルが付与されています。
まとめ
今回はApacheで403 Forbiddenが表示された時のチェックポイントを記事にさせていただきました。
DocumentRootのファイルやディレクトリの権限を確認しても問題なさそうなのにどうして表示されないの…と思っていたらSELinuxの影響が原因だったという躓きがありました。
もし同じ場所で躓いている方に少しでも参考になりましたら幸いです。
Wedding Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにいらして頂ければと思います。