SELinux targetedポリシーで、UserDirやVirtualDomainへのアクセスを許可するメモ
以下、激しくイマサラな個人的なメモなので、検索でここに来ちゃった方は、以下へどうぞm(_._)m
環境は、
- Xen3のDom-UでCentOS5(yum update済み):2.6.18-53.el5xen
- httpd-2.2.3-11.el5_1.centos.3
- SELinuxは:SELINUX=enforcing、SELINUXTYPE=targeted、Policy version: 21
古いWebサーバから、Xen3の仮想サーバへ引越しをしている。
いくつかのユーザが~/public_html 以下にコンテンツを持っていて、バーチャルドメインもいくつか運用している。
まず、/etc/passwdや/etc/shadow, /etc/groupの内容を移し、それからrsyncで/home以下を同期。
面倒なのは、メールが~/Maildir以下にあることだが、今回の件とは関係ないので省略。
設定ファイル
まず、設定ファイル(/etc/httpd/conf/*, /etc/httpd/conf.d/* )を新しい環境にコピーして、/usr/sbin/httpd -S を実行してエラーが出なくなるまで修正。
ありがちなのは、サーバの鍵の設定とか。
ただし、この時点でservice httpd startを実行してもエラーになる。
/var/log/messages を見ると、setroubleshoot が
May 30 01:02:34 webserver setroubleshoot: SELinux is preventing the /usr/sbin/httpd from using potentially mislabeled files (/home/httpd/html). For complete SELinux messages. run sealert -l xxxxxx-xxxx-xxxx-xxx-xxxxx
とかいうメッセージを出している。
で、run sealert -l xxxxxx-xxxx-xxxx-xxx-xxxxxすると、以下のようなメッセージが出てくる
Summary
SELinux is preventing the /usr/sbin/httpd from using potentially mislabeled
files (/home/httpd/html).
Detailed Description
SELinux has denied /usr/sbin/httpd access to potentially mislabeled file(s)
(/home/httpd/html). This means that SELinux will not allow /usr/sbin/httpd
to use these files. It is common for users to edit files in their home
directory or tmp directories and then move (mv) them to system directories.
The problem is that the files end up with the wrong file context which
confined applications are not allowed to access.
Allowing Access
If you want /usr/sbin/httpd to access this files, you need to relabel them
using restorecon -v /home/httpd/html. You might want to relabel the entire
directory using restorecon -R -v /home/httpd.
Additional Information
Source Context root:system_r:httpd_t
Target Context root:object_r:user_home_t
Target Objects /home/httpd/html [ dir ]
Affected RPM Packages httpd-xxxxx
Policy RPM selinux-policy-2xxxxx
Selinux Enabled True
Policy Type targeted
MLS Enabled True
Enforcing Mode Permissive
Plugin Name plugins.home_tmp_bad_labels
Host Name webserver
Platform Linux xxxxxxxxxx
MMM DDD .....
Alert Count 4
Line Numbers
Raw Audit Messages
avc: denied { getattr } for comm="httpd" dev=dm-0 egid=0 euid=0
exe="/usr/sbin/httpd" exit=0 fsgid=0 fsuid=0 gid=0 items=0
path="/home/httpd/html" pid=nnnn scontext=root:system_r:httpd_t:s0 sgid=0
subj=root:system_r:httpd_t:s0 suid=0 tclass=dir
tcontext=root:object_r:user_home_t:s0 tty=pts0 uid=0
これで、"Allowing Access"の部分を参考にすれば、なんとかなるケースも多いが、パスが絶対パスでない場合もあったりして、頭を抱えることになることもある。
そこで以下、対処方法を検索した結果です。これで一応httpdは起動するようにはなりましたが、CGIとかphpはまだ動作が不明です。結局はpermissiveにして、様子を見る予定(ぉぃ
ユーザのコンテンツをアクセス可能にする。
FC4/Apache/一般ユーザのウェブ表示 - Pocketstudio.jp Linux Wikiによれば、
Fedora Core 4 では予め /home/ユーザ名/public_html に対するセキュリティコンテキストが設定されています。
ということなので、public_htmlを持っている各ユーザに対して、restoreconコマンドを実行します。
# cd /home # find . -type d -path "*public_html" | awk -F/ '{print $2}' | while read i > do > /sbin/restorecon -R /home/$i > done
バーチャルドメインのコンテンツをアクセス可能にする
上記の参考URLの通りで、あとは、httpdの設定ファイルから、DocumentRootがある行を検索して、対応するディレクトリをchconします。
# grep [dD]ocument[rR]oot /etc/httpd/conf/設定ファイル | awk '{print $2}' | while read i > do > chcon -R -t httpd_user_content_t $i > done # setenforce 1 # service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]