Linux の使い方: apache の標準と異なるドキュメントルートへアクセスできない (CentOS 5.4)


標準と異なるドキュメントルートのサイトにアクセスできない

CentOS 5.4 上で稼働している Apache 2.2.3 で、例えば "/etc/httpd/conf/httpd.conf" 内でバーチャルホストのドキュメントルートを設定する等、標準とは異なる場所をドキュメントルートにした場合に、そのサイトへのアクセス権限が与えられないことがありました。

403 Forbidden

You don't have permission to access / on this server.

これは SELinux というセキュリティーポリシーによってアクセス制御がされているために発生するもののようでした。

 

SELinux を設定するためには、"setenforce 0" を実行して SELinux を Permissive モードで起動した上で、httpd を起動させます。

すると、SELinux の影響で起動できなくなっている場合には正しく動作するようになるので、まずは次のようにして httpd がどの SELinux ドメインで実行されているかを確認します。

ps -eZ | grep httpd

これで、出力結果の ":" で区切られた 3 番目の内容から、Apache (httpd) が "httpd_t" ドメイン内で動作していることが分かります。

後はこのドメインに対して適切な許可を追加することになります。

 

試してみた感じでは、以下の許可設定を追加すれば大丈夫なようでした。

allow httpd_t amanda_port_t:tcp_socket name_bind;
allow httpd_t cert_t:file execute;
allow httpd_t file_t:dir { search getattr };
allow httpd_t httpd_config_t:file execute;
allow httpd_t port_t:tcp_socket name_bind;
allow httpd_t reserved_port_t:tcp_socket name_bind;
allow httpd_t soundd_port_t:tcp_socket name_bind;
allow httpd_t transproxy_port_t:tcp_socket name_bind;
allow httpd_t user_home_t:dir getattr;
allow httpd_t user_home_t:file { read getattr };

ただ、それぞれのパスの中での関係ファイルの取り扱いについて、SELinux の許可設定を行う必要があるようですので、設定ファイル内のパスに応じても上記内容は変わってくるかもしれません。

なお、SELinux の設定方法については Linux のセキュリティ設定 (SELinux) の方に記してありますので、そちらを参考にしてください。