- 更新日: 2013年8月15日
- CentOS & Linux
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 配下以外でも動作させる設定を行います。
このエントリーは、CentOS 6.4 インストール~設定手順の目次 の一部です。
SELinux を 有効(Enforcing)にする
まずは、SELinux を有効(Enforcing)にします。
1 2 3 4 5 6 7 |
# vi /etc/sysconfig/selinux #SELINUX=disabled SELINUX=enforcing # reboot |
上記のように enforcing を設定してサーバー再起動。
1 2 3 4 |
# getenforce 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 が表示されました。
1 2 3 4 5 6 |
# setenforce 0 # getenforce Permissive # service httpd restart |
詳しくは次のページを確認。(英語ページです)
Apache VirtualHosts and SELinux under CentOS 6 | SilverStripe CMS Developer Blog
-Z オプションを付けた ls コマンドで、SELinux有効時のディレクトリのセキュリティコンテキストを確認すると、その原因がわかります。
1 2 3 4 5 6 7 |
# ls -dZ /var/www/html drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html # ls -dZ /var/lib/redmine drwxr-xr-x. apache apache system_u:object_r:var_lib_t:s0 /var/lib/redmine |
/var/www/html は httpd_sys_content_t のポリシーになっているのに対し、/var/lib/redmine は var_lib_t になっています。
httpd_sys_content_t コンテキストを追加する
では、SELinux を Enforcing に戻して httpd を再起動しておきます。
1 2 3 4 |
# setenforce 1 # service httpd restart |
redmine のディレクトリへの httpd(Apache)のアクセスを許可するためには、httpd のセキュリティコンテキストの設定(httpd_sys_content_t)を、/var/lib/redmine に追加します。
1 2 3 4 5 6 7 |
# chcon -R -t httpd_sys_content_t /var/lib/redmine # ls -dZ /var/lib/redmine drwxr-xr-x. apache apache system_u:object_r:httpd_sys_content_t:s0 /var/lib/redmine # ls -dZ /var/lib/redmine/app drwxr-xr-x. apache apache system_u:object_r:httpd_sys_content_t:s0 /var/lib/redmine/app |
chcon コマンドを -R オプションで再帰的に実行することにより、/var/lib/redmine に httpd_sys_content_t のセキュリティコンテキストが追加されます。
httpd をリスタート。
1 2 3 |
# service httpd restart |
もう一度、Redmine(redmine.centos) にアクセスするも、上手く表示されず再び Apache のページ(/var/www/html)が表示されます。
一旦、Permissive に変更して、もう一度 httpd 再起動。
1 2 3 4 5 6 |
# setenforce 0 # getenforce Permissive # service httpd restart |
再び Redmine にアクセスしてみると表示されました。Enforcing で Redmine を動作させるには、他にも SELinux の設定が必要なようです。長くなったので次回、SELinux を Enforcing にして Redmine を動作せる設定の続きを行います。
- – 参考リンク –
- Apache VirtualHosts and SELinux under CentOS 6 | SilverStripe CMS Developer Blog
- apache virtual hosts and SELinux | Arnab Nandi
- 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!