- 更新日: 2013年8月15日
- CentOS & Linux
SELinux 有効(enforcing)で Apache + Passenger のもと Rails で Redmine を動作させる 〜 CentOS6
SELINUX 有効時(enforcing)に Redmine を動作させるための設定を行います。前ページ SELinux 有効(enforcing)で VirtualHost を /var/www/html 配下以外でも動作させる の続きです。
このエントリーは、CentOS 6.4 インストール~設定手順の目次 の一部です。
SELinux を Enforcing にした後、Apache の error log を確認
Permissive で Redmine にて test プロジェクトを作成します。その後、http://redmine.centos/projects/test/issues/new (Redmine の test プロジェクトに新しくチケットを発行するページ)にアクセスしてみたところで、再び SELinux を Enforcing にします。
Enforcing に戻して httpd 再起動。
1 2 3 4 5 6 |
# setenforce 1 # getenforce Enforcing # service httpd restart |
http://redmine.centos/projects/test/issues/new をリロードしてみると、再びアクセスできず Redmine は動作しなくなりました。ここで、Apache の error log を確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# tail /var/log/httpd/error_log [Thu Jul 18 11:00:59 2013] [notice] caught SIGTERM, shutting down [Thu Jul 18 11:01:00 2013] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0 [Thu Jul 18 11:01:00 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Thu Jul 18 11:01:00 2013] [error] *** Passenger could not be initialized because of this error: Unable to start the Phusion Passenger watchdog (/usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19/agents/PassengerWatchdog): Permission denied (13) [Thu Jul 18 11:01:00 2013] [notice] Digest: generating secret for digest authentication ... [Thu Jul 18 11:01:00 2013] [notice] Digest: done [Thu Jul 18 11:01:00 2013] [error] *** Passenger could not be initialized because of this error: Unable to start the Phusion Passenger watchdog (/usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19/agents/PassengerWatchdog): Permission denied (13) [Thu Jul 18 11:01:00 2013] [notice] Apache/2.2.15 (Unix) DAV/2 Phusion_Passenger/3.0.19 PHP/5.4.9 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations [Thu Jul 18 11:01:41 2013] [error] [client 127.0.0.1] client denied by server configuration: /etc/httpd/htdocs [Thu Jul 18 11:01:41 2013] [error] [client 127.0.0.1] client denied by server configuration: /var/www/error/noindex.html |
以下のメッセージが確認できるので、アクセスが拒否されているのだろう。
1 2 3 |
Passenger could not be initialized because of this error: Unable to start the Phusion Passenger watchdog (/usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19/agents/PassengerWatchdog): Permission denied (13) |
Passenger の root に httpd_sys_content_t を設定
ここで公式ドキュメントを参照。
Phusion Passenger users guide, Apache version
ドキュメント通りに、Passenger の root に httpd_sys_content_t を設定して、httpd restart。
1 2 3 4 5 6 7 8 9 10 |
# passenger-config --root /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19 # ls -dZ /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19 drwxr-xr-x. root root system_u:object_r:lib_t:s0 /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19 # chcon -R -h -t httpd_sys_content_t /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19 # ls -dZ /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-3.0.19 # service httpd restart |
再び、Redmine にアクセスするも動作しません… 凹みます。
SELinux Permissive で取得した audit.log からポリシーモジュールを作成
ここで、SELinux の Permissive で取得した audit.log からセキュリティポリシー設定を作成する方法を試します。実は、最初からこの方法を使うのが簡単なのですが、できれば一個ずつ設定したかったのでここまで使いませんでした。
以下のページが分かりやすいです。
Phusion Passenger with Apache on RHEL 6 / CentOS 6 / SL 6 with SELinux | Sergiy Kyrylkov
Redmine/PassengerをSELinux下で動かす
audit2allow コマンドが入っていなかったので、あらかじめインストールしておきます。依存パッケージとともにインストールされます。
1 2 3 |
# yum -y install /usr/bin/audit2allow |
SELinux を Permissiv に変更し、古い audit.log を削除して、デーモン再起動。
1 2 3 4 5 6 |
# setenforce 0 # rm /var/log/audit/audit.log # service auditd restart # service httpd restart |
ここで、Redmine(Railsアプリ)を動作させます。ログイン・ログアウトしたり、チケット発行したり、適当に操作させます。
その後、ログからポリシーモジュールを作成します。
1 2 3 4 5 6 7 8 9 10 11 |
# mkdir work # cd work # grep httpd /var/log/audit/audit.log | audit2allow -M passenger # ls passenger.pp passenger.te # semodule -i passenger.pp semodule: Failed on passenger! libsepol.print_missing_requirements: passenger's global requirements were not met: type/attribute passenger_log_t (No such file or directory). libsemanage.semanage_link_sandbox: Link packages failed (No such file or directory). |
ここで、semodule: Failed on passenger! とエラーが出てしまいました。よく分からないので、もう一度最初からやり直したら、今度はエラーが出ずにOK。
SELinux を Enforcing にして httpd 再起動。
1 2 3 4 |
# setenforce 1 # service httpd restart |
そして Redmine(http://redmine.centos/)にアクセス。きたーーーーー!動きました。若干はまりましたけど、Railsアプリを SELinux 有効時(Enforcing)に、Apache の VirtualHost で動かすには、以上の手順で動作させることができます。
- – 参考リンク:公式ドキュメント –
- Phusion Passenger users guide, Apache version
- – 参考リンク:audit.log からセキュリティポリシーを設定 –
- Phusion Passenger with Apache on RHEL 6 / CentOS 6 / SL 6 with SELinux | Sergiy Kyrylkov
- Redmine/PassengerをSELinux下で動かす
- CentOS 6.2のrbenvな環境でPassengerを動かしてみる | tamo’s blog
- – 参考リンク:1個ずつセキュリティポリシーを設定 –
- CentOS6のApacheでRailsとPassengerをSELinux Enforcingで動かす – kame-tの日記
- CentOS & Linux の関連記事
- Job for nginx.service failedのNginxエラー
- upstream sent too big header while reading response header from upstream(Nginx/Rails)
- Can’t get information about user clamav(clamdエラー)
- STDERR: Exception in thread “main” java.lang.InternalErrorエラー
- Linuxサーバー容量を確認するコマンドdf,duをマスターする!
- rmでファイル削除後にdf -hで容量が減らない時の対処(Linux)
- Apacheをローカルネットワークのみに公開にする
- logwatchからのメールが来ないと思ったら…
- Linuxサーバの負荷や使用率を調査するコマンドと手順
- Bashの脆弱性もう一件CVE-2014-7169に対するパッチ適用
Leave Your Message!