よくSELinux運用下でWebサーバー立ててると直面する現象に、 ちゃんとパーミッションの設定したのに、Permission denyで怒られる事があります。 原因は、SELinuxで、コレを知るまでエライ目に遭ったことが有ります。 ちゃんと勉強しないといけないんですが、軽くメモを。 全然詳しい訳でもないので、もしかしたら大嘘付いているかもしれません。 例えばWebサーバーで、権限設定はあっているのにパーミッションエラーでアクセス出来ないなんて場合が有ります。
$ ls -l hoge.html
-rw-r--r--   1 apache  apache  719  2  5 22:58 hoge.html
そんな時はlsのZオプションを指定すると、SELinuxのセキュリティコンテキストが見れます。
$ ls -lZ hoge.html
-rw-r--r--  apache  apache system_u:object_r:user_home_t hoge.html
system_u:object_r:user_home_tの部分がセキュリティコンテキストですね。 前から、ユーザー識別子、ロール識別子、タイプ識別子と言うらしいのですが、一番重要なのは、タイプ識別子です。 上記例の場合タイプ識別しがuser_home_tになっています。 一方httpdが所属するのはhttpd_tです。コレをドメインと言うようです。SELinux上の各ドメインはお互いにコンパートメント化されており、ほかのドメインからの不正なアクセスを許可しないように定義されています。その為、たとえOSのパーミッションが有っていてもアクセスできないのですね。 セキュリティコンテキストを変えるためには、chconコマンドを使います。
$ chcon system_u:object_r:httpd_sys_content_t hoge.html
$ ls -lZ hoge.html
-rw-r--r--  apache apache system_u:object_r:httpd_sys_content_t hoge.html
コレでWebサーバーからhoge.htmlにアクセス出来ます。 httpdのドメインがhttpd_tなのにhttpd_sys_content_tと権限設定するのは何故かって事は聞かないで下さい。 嵌りがちなので書いた程度なので。近々ちゃんと勉強します・・・。