2013年2月7日木曜日

ApacheのDocumentRootを変更したらSELinuxにブロックされてアクセスできなくなった話

社内のPCにCentOSの仮想環境を作ってもらったので、さっそくApacheをインストールしてみました。
インストール後、DocumentRootを変更したところ、ブラウザから表示ができなくなりました。il||li _| ̄|○ il||l

httpd.conf
DocumentRoot "/var/www/html"
↓
DocumentRoot "/var/local/www/"
Apacheのエラーログを見ると"Permission denied"が発生していました。
Permission denied: access to /index.html denied
そこで、パーミッション関係などを見ていきましたが、原因がわからずしばらく嵌っていました(/-_-\)う~ん…

で、ぐぐっていくとSELinuxのセキュリティによりアクセスができないもよう。

引用
http://rfs.jp/server/security/selinux01.html
SELinuxはセキュリティ管理をしてくれるとても大事なモジュールですが、
慣れていないとSELinuxによる強力なアクセス制限によってインストール作業や
運用業務でつまづくことがあります。


ということで、

1.現在のSELinuxの動作モードを確認する。
# getenforce
Enforcing
2.Enforcing → Permissive に切り替える
# setenforce 0
# getenforce
Permissive
  • Enforcing・・・アクセス制限有効
  • Permissive・・・警告(ログ)を出力するがアクセス制限無効
  • disabled・・・アクセス制限無効

Permissiveに変更して、ブラウザからアクセスすると表示できるようになったので原因特定ヘ(^^ヘ)))。。。うへへ やりいぃ

続けて↓の設定を行っていきました。

3.許可設定のためのコマンドを確認
# audit2allow -i /var/log/audit/audit.log


#============= httpd_t ==============
allow httpd_t var_t:file { read getattr };
4.設定
# grep ":httpd_t:" /var/log/audit/audit.log | audit2allow -M httpd
******************** IMPORTANT ***********************
To make this policy package active, execute:
5.有効にする
# semodule -i httpd.pp
6.Permissive → Enforcing に戻す
# setenforce 1
# getenforce
Enforcing
この設定で、Enforcingのまま、ブラウザから表示できるようになりました。(V^-°)イエイ!

1 件のコメント:

  1. 既にラベル自体の定義がありますので、
    新たにモジュールを作らずに既存のラベルを
    付与するだけでもアクセス可能になります。

    # semodule -r httpd
    # semanage fcontext -a -t httpd_sys_content_t "/var/local/www(/.*)?"
    # restorecon -RFv /var/local/www

    ご参考まで。

    返信削除