「SELinux policy enabled」でApacheが起動しない
CentOSにApache+Passenger環境を作って、いつも通りApacheを起動しようとしたら、「SELinux policy enabledd」で起動が失敗するケースがありました。
その時の備忘録として書いておきます。
error_logを確認
「/var/log/httpd/error_log」を確認してみると、「SELinux policy enabled; httpd running as context user_u:system_r:httpd_t:s0」というようなエラーが出ていました。
[Wed Jan 26 23:23:45 2011] [notice] SELinux policy enabled; httpd running as context user_u:system_r:httpd_t:s0 [Wed Jan 26 23:23:45 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
SELinuxの設定を変更
Phusion Passenger をインストール - ~fumi ChangeLog を見てみると「SElinux が悪いらしい」と書かれているので、SElinuxの設定を変更してみます。
permissiveモードとenforcingモード
「SElinux」には「permissiveモード」と「enforcingモード」という2つのモードがあります。
モード | 説明 |
---|---|
enforcing | SELinuxが有効な状態 |
permissive | SELinuxが無効な状態 |
[セキュアOS SELinux入門]第5回 設定に関する基礎知識をマスターする - オープンソース:ITpro によると、
enforcingは,通常運用時のSELinuxのモード,つまり,「SELinuxによるアクセス制御が有効になった状態」のモードである。
このモードではアクセス制御が働くため,きちんと設定されていないアプリケーションは動作しない。
アプリケーションを起動しようとしても,アクセスが拒否されたことがログに記録されるだけで,何も起こらないわけだ。一方,permissiveは,(例え設定が不十分であっても)一切アクセス拒否されずに,言い換えれば通常のLinuxと同じようにアプリケーションは動作する。
[セキュアOS SELinux入門]第5回 設定に関する基礎知識をマスターする - オープンソース:ITpro
ただし,本来はアクセスが拒否されるべきであり,その事実はログに記録される。
つまり,アクセスが拒否されたことはログに記録されるが,アプリケーションは普通に動作する。
ということです。
「enforcingモード」になっている場合、SELinuxでのアクセス制御が働いて、今回のようにApacheが起動しないようなケースがあるみたいです。
「enforcingモード」でも正常に動作させるようにするのが良いと思いますが、とりあえず今回は内部で使用するサーバーなので、「permissiveモード」への切り替えで対応してみます。
SELinuxのモードの確認
「permissiveモード」か「enforcingモード」かを確認するのには「getenforce」コマンドを使用します。
「getenforce」は、rootにならないと使用できません。
# getenforce Enforcing
SELinuxのモード切り替え
「permissiveモード」と「enforcingモード」のモード切り替えには「setenforce」コマンドを使用します。
「setenforce」も、rootにならないと使用できません。
モード別の切り替えのコマンドは以下のとおりになります。
モード | コマンド |
---|---|
enforcingへの切り替え | setenforce 1 |
permissiveへの切り替え | setenforce 0 |
今回は「permissiveモード」への切り替えなので、「setenforce 0」を実行します。
「permissiveモード」への切り替え
# setenforce 0 # getenforce Permissive
Apacheを再度起動してみる
「SELinux」のモード切り替えが完了したので、もう一度Apacheの起動をしてみると、今度はApacheが起動できました。
# /etc/init.d/httpd start httpd を起動中: [ OK ]
念の為「/var/log/httpd/error_log」を確認してみると、相変わらず「SELinux policy enabled」は発生していますが、Apacheの起動まで出来ているのが分かります。
[Wed Jan 26 23:41:12 2011] [notice] SELinux policy enabled; httpd running as context user_u:system_r:httpd_t [Wed Jan 26 23:41:12 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Wed Jan 26 23:41:12 2011] [notice] Digest: generating secret for digest authentication ... [Wed Jan 26 23:41:12 2011] [notice] Digest: done [Wed Jan 26 23:41:12 2011] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads. [Wed Jan 26 23:41:13 2011] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
これを機に「SELinux」の勉強もしていきたいなーと思います。
今回参考にしたページ
[セキュアOS SELinux入門]第5回 設定に関する基礎知識をマスターする - オープンソース:ITpro
http://itpro.nikkeibp.co.jp/members/LIN/oss/20040624/146318/
Phusion Passenger をインストール - ~fumi ChangeLog
http://www.ftnk.jp/~fumi/cl/2009-05-10-2.html
1.8.6.2. 「init_master_agent Invalid local port (Permission denied) (無効なローカルポートです)(パーミッションが拒否されました)」 (error_log ファイル内)
http://webcache.googleusercontent.com/search?q=cache:2SVWZBSJOV0J:docs.redhat.com/docs/ja-JP/JBoss_Operations_Network/2.2/html/FAQ/sect-FAQs-Apache_SNMP-Invalid_local_port.html+httpd+running+as+context+user_u&cd=1&hl=ja&ct=clnk&gl=jp&lr=lang_ja