Linux初心者のわたくしが陥ったSELinuxに係る設定ミスによる403エラーについて説明いたします。
Trouble
- Googleアドセンスの申請準備の際、ドキュメントルートディレクトリにads.txtを設置しました
- ブラウザで同ファイルを確認するため、http://f-labs.jp/ads.txtにアクセスすると、403 Forbiddenエラーの警告が表示され、内容を確認できません

cause
- 当サイトはSELinux: Enforcingで運用しています
- 作成したads.txtにおけるSELinuxコンテキスト タイプの設定に誤りがあり、アクセス制限により閲覧不可となりました
- 誤: user_home_t
- 正: httpd_sys_content_t
- ads.txtをターミナルから作成すれば問題なかったのですが、次の手順で設置したことが不適切なタイプとなったことの原因と思われます
- 今にして思えば、なんとも無駄な手順を踏んだものです
- ローカルPCにてads.txtを作成
- ads.txtをFTPソフトでユーザーのホームディレクトリにアップロード
- ターミナルにてドキュメントルートディレクトリに移動
- ターミナルにて所有者:所有グループをapache:apacheに変更
Improvement
- chconコマンドにて正しいタイプに修正します
# 修正前のコンテキストの確認 $ ls -laZ /hoge/hoge/ -rw-r--r--. 1 apache apache unconfined_u:object_r:user_home_t:s0 58 Sep 13 17:19 ads.txt # コンテキストを修正 $ sudo chcon -t httpd_sys_content_t /hoge/hoge/html/ads.txt # 修正後のコンテキストの確認 $ ls -laZ /hoge/hoge/ -rw-r--r--. 1 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 58 Sep 13 17:19 ads.txt - ブラウザでの表示です

- リンクはこちらです
Lessons Learned
- わたくしのようなLinux初心者とりわけSELinux初心者は、ファイル確認の際SELinuxコンテキストも含めましょう
$ ls -laZ
- -l: 長いフォーマットで表示します
- -a: ドットファイル(隠しファイル)も表示します
- -Z: SELinuxセキュリティコンテキストを表示します
Digression
- デフォルトの 403 Forbiddenページは、味気ないのでオリジナルのエラーページを作成しました
- オリジナルエラーページの設置
Reference
- Red Hat Documentation | Red Hat Enterprise Linux > 6 > Security-Enhanced Linux > 5.7. SELinux コンテキスト - ファイルのラベル付け
- RHEL 6のドキュメントですが、勉強になりました(いえ、解ったつもりになりました)
- Developer's Blog | 理由がわかれば怖くない!SELinux とのつきあい方
- 「ファイルを移動してパスとコンテキストが一致しなくなった」の項のご説明が、今回のトラブルに該当します