前回まででSELinuxの機能やポリシーの分析などを紹介しました。今回は、SELinuxのアクセス拒否が原因で起きる問題を、いくつかの事例を見ながら確認し、どのように設定を変更していけばよいのかを具体的に紹介します。

SELinuxが原因で起きる問題

 通常、何かアプリケーションがきちんと動作しない場合には、SELinuxが問題になっているかどうかを切り分けるために、(1)「setenforce 0」でSELinuxを無効(Permissiveモード)にして、アプリケーションが動作するかを再度確認する。(2)/etc/selinux/configを修正し、「selinux=disabled」に変更してから再起動して、アプリケーションが動作するかを再度確認する、のいずれかを行います。

 (1)または(2)の結果でアプリケーションが動作した場合には、SELinuxがアプリケーションの正常動作を妨げていると判断します。(1)に比べて(2)ではカーネルにSELinuxのLSMモジュールをロードしない状態で起動しているため、よりSELinuxの影響を排除した状態です。

 まれに「setenforce 0」にした状態でも、SELinuxモジュール自体は読み込まれているため、SELinuxモジュール自体が何らかの挙動を阻害している場合にはエラーになってしまいます。そのため、アプリケーションが動作しない際にSELinuxの問題かどうかを切り分けるには、1.でアプリケーションが動作するようになるかを確認し、動作しないのであれば(2)も試すべきでしょう。(2)でもアプリケーションが動作しない場合には、SELinuxは関係ない問題ということになります。

 本記事では、SELinuxが問題で動作しない代表的なものを二つ挙げます。一つはパッケージでインストールされた設定を変更した場合に動かなくなる例、もう一つは元々SELinuxのポリシーが足りなくてパッケージをインストールしてもきちんと動作しない例になります。

事例1:ApacheのDocument Rootを変えたら動かない

 まず分かりやすい例として、ApacheのDocumentRootを一般的な/var/www/htmlから別のディレクトリーに変更した場合を見てみましょう。

 クラスタリングをするためや、Webコンテンツの量が将来増加していくことを考慮して、NASなどの外部ハードディスクにDocumentRootを設定して公開することは、企業向けではよくあるものになります。

 以下の説明では、図1のように、DocumentRootを/extdiskとして外部ハードディスクをマウントしています。

図1●外部ハードディスクをDocumentRootに設定する
図1●外部ハードディスクをDocumentRootに設定する
[画像のクリックで拡大表示]