SELinux 有効(enforcing)で VirtualHost を /var/www/html 配下以外でも動作させる 〜 CentOS6

スポンサーリンク

今回の CentOS6.4 への Redmine のインストールでは、Redmine は /var/lib/redmine にインストールして、VirtualHost で動作させる設定としています。

公開する本番環境ではセキュリティ向上のため、SELinux を有効にして運用したいと思います。ここで問題となるのが、Rails アプリ(今回は Redmine)を Passenger で動かす場合に、SELinux の設定を行わないと Railsアプリ(Redmine)が動作しません。

またその前段階の問題として、SELinux 有効時(Enforcing時)には VirtualHost は /var/www/html 配下以外は正常に動作しないそうです。ここは、はまり所かもしれません。

SELINUX 有効時(enforcing)に Apache + Passenger のもと Rails で Redmine を動かすため、その前準備として、SELinux 有効時(enforcing)に VirtualHost で /var/www/html 配下以外でも動作させる設定を行います。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

このエントリーは、CentOS 6.4 インストール~設定手順の目次 の一部です。

SELinux を 有効(Enforcing)にする

まずは、SELinux を有効(Enforcing)にします。

上記のように enforcing を設定してサーバー再起動。

getenforce コマンドで、SELinux が有効であることを確認できます。

SELinux 有効時(Enforcing時)には VirtualHost は /var/www/html 配下以外は正常に動作しない

SELinux 有効下で Apache の VirtualHost を使う場合、httpd.conf で設定してあるデフォルトの DocumentRoot, /var/www/html 配下以外の場所を VirtualHost の DocumentRoot に指定しても正常に動作しません。/var/www/html 配下以外に設定した VirtualHost は、強制的に /var/www/html の内容が表示されてしまいます。

よって、/var/lib/redmine/ にインストールした redmine を VirtualHost で動かす場合、アクセスしようとしても “Apache 2 Test Page powered by CentOS” のページ(デフォルトの Apache ページ、/var/www/html)が表示されてしまいます。

私が試した所、以下のように一時的に、setenforce 0 コマンドで SELinux を Permissive に変更して httpd を再起動したところ、redmine が表示されました。

詳しくは次のページを確認。(英語ページです)

Apache VirtualHosts and SELinux under CentOS 6 | SilverStripe CMS Developer Blog

-Z オプションを付けた ls コマンドで、SELinux有効時のディレクトリのセキュリティコンテキストを確認すると、その原因がわかります。

/var/www/html は httpd_sys_content_t のポリシーになっているのに対し、/var/lib/redmine は var_lib_t になっています。

httpd_sys_content_t コンテキストを追加する

では、SELinux を Enforcing に戻して httpd を再起動しておきます。

redmine のディレクトリへの httpd(Apache)のアクセスを許可するためには、httpd のセキュリティコンテキストの設定(httpd_sys_content_t)を、/var/lib/redmine に追加します。

chcon コマンドを -R オプションで再帰的に実行することにより、/var/lib/redmine に httpd_sys_content_t のセキュリティコンテキストが追加されます。

httpd をリスタート。

もう一度、Redmine(redmine.centos) にアクセスするも、上手く表示されず再び Apache のページ(/var/www/html)が表示されます。

一旦、Permissive に変更して、もう一度 httpd 再起動。

再び Redmine にアクセスしてみると表示されました。Enforcing で Redmine を動作させるには、他にも SELinux の設定が必要なようです。長くなったので次回、SELinux を Enforcing にして Redmine を動作せる設定の続きを行います。

スポンサーリンク
サーバ構築研究会の CentOS 本は、昔からお世話になっています。Linux の教科書は Linux の基本を学ぶのにおすすめです。
 
スポンサーリンク

Leave Your Message!