passengerをselinuxありで動作させるには

selinuxをEnforcingにしたFedora 10で、passenger(mod_rails for Apache)を動かす方法を記述します。

動作確認した環境は次のとおりです。

全体の手順は以下のとおりです。

  1. selinux関連の必要なパッケージをインストール
  2. passenger用のselinuxのポリシーをインストール
  3. passengerのインストール
  4. httpdを起動

1. selinux関連の必要なパッケージをインストール

$ yum install selinux-policy selinux-policy-targeted

2. passenger用のselinuxのポリシーをインストール

1)passengerが利用するselinuxのポリシーを作成

$ mkdir /etc/selinux/passenger
$ cd /etc/selinux/passenger
$ vi passenger.te
policy_module(passenger, 2.1.2)

require {
        type httpd_tmp_t;
        type httpd_t;
        type lib_t;
        type admin_home_t;
        type default_t;
        class dir { read search getattr };
        class file execute_no_trans;
        class capability { fowner fsetid };
        class fifo_file { write create unlink getattr setattr };
        class sock_file { write getattr setattr read create unlink };
}

#============= httpd_t ==============
allow httpd_t admin_home_t:dir { read search getattr };
allow httpd_t default_t:dir { read search getattr };
allow httpd_t httpd_tmp_t:fifo_file { write create unlink getattr setattr };
allow httpd_t httpd_tmp_t:sock_file { write getattr setattr read create unlink };
allow httpd_t lib_t:file execute_no_trans;
allow httpd_t self:capability { fowner fsetid };

2)ポリシーをコンパイル

$ make -f /usr/share/selinux/devel/Makefile

3)ポリシーをインストール

$ semodule -i passenger.pp

4)個々のrailsアプリケーションに対してSelinuxのセキュリティコンテキストを設定

$ cd <railsアプリケーションのディレクトリ>
$ chcon -R -t httpd_sys_content_rw_t log

3.passengerのインストールは、多数のサイトで述べられていますので、省略します。

4. httpdの設定

$ setsebool -P httpd_can_network_connect 1