SELinuxが有効になっている場合のApacheアクセスエラー対処法

Apacheを起動していて、Webページのアクセスに権限の問題で失敗する場合は、SELinuxの設定に問題があるのかもしれません。

あるディレクトリへのアクセスに対して、「Permission denied」が表示される場合や、WebDAVアクセスに対して、

<D:error xmlns:D="DAV:" xmlns:m="http://apache.org/dav/xmlns" xmlns:C="svn:">
<C:error/>
<m:human-readable errcode="13">Could not open the requested SVN filesystem</m:human-readable>
</D:error>

が表示される場合などです。

CentOS、そして多くのLinuxでは、

getenforce

コマンドでSELinuxの状態を確認することができます。以下の3つの状態があります。

disable・・・SELinuxが完全に無効の状態です。
enforcing・・・SELinuxが有効で、かつ、ポリシー違反のアクセスを拒否します。(ログにも出力します。)
permissive・・・SELinuxが有効ですが、ポリシー違反のアクセスでも許可します。(ログには出力します。)

問題が、SELinuxの設定に起因するかどうか調べるためには、まず、上記の状態を調べて、「enforcing」になっている場合には、一時的にOFFにしてみましょう。

設定を変更するには、以下のように「setenforce」コマンドが利用できます。

setenforce 0

「setenforce permissive または 0」だと、permissiveに設定することができます。

「setenforce enforcing または 1」だと、enforcingに設定できます。

もし、エラーがSELinuxのせいであれば、ディレクトリに対して適切な権限を設定しましょう。

上記のDAVのアクセスエラーであれば、下記コマンドを打って、公開するリポジトリのパスに権限を与えます。

chcon -R -h -t httpd_sys_content_t /PATH_TO_REPOSITORY/

もし、恒久的にSELinuxを無効にする場合には、設定ファイルを書き変えます。SELinuxの設定ファイルは「/etc/selinux/config」にありますので、このファイルの記述を

SELINUX=disabled

のようにします。「SELINUX」は以下の3つの値をとることができます。

enforcing・・・SELinuxのセキュリティポリシーを有効化。
permissive・・・SELinuxは有効ですが、警告を出力します。
disabled・・・SELinuxのセキュリティポリシーは有効化されません。

これで、次回の再起動時からこの設定が有効となります。