login: root .... # newrole -r sysadm_r # id -Z root:sysadm_r:sysadm_t # cd /etc/selinux/seedit/src/policy # setenforce 0また,シンタックスの詳細については、8を御覧下さい。
# simplified_policy/vsftpd_t.a
{
domain vsftpd_t;
domain_trans initrc_t /usr/sbin/vsftpd;
}
2行目でvsftpd_tドメインを定義しています。3行目でドメイン遷移を設定しています。ここで、親ドメインはinitrc_tであり、エントリポイントは/usr/sbin/vsftpdです。
# make diffrelabel多くの場合、make diffrelabelで十分です。
# /etc/init.d/vsftpd restart # ps -eZ ... root:system_r:vsftpd_t 13621 pts/1 00:00:00 vsftpd ...以上のようにするとvsftpdドメインがvsftpd_tになったことを確認でき ます。ドメイン遷移の設定がうまくいったことが分かりました。
# In simplifed_policy/global deny /etc/vsftpd; deny /var/ftp;そして以下のコマンドを実行して下さい。
# make diffrelabelその結果、他のドメインが/etc/vsftpdや/var/ftpにアクセスしようとするなら、 明示的にアクセスを許可しなければなりません。
# simplifed_policy/vsftpd_t.a
1 {
2 domain vsftpd_t;
3 domain_trans initrc_t /usr/sbin/vsftpd;
4 # access to files related to vsftpd
5 allow /etc/vsftpd r,s;
6 allow /var/ftp r,s;
7 allowonly /var/log r,w,s;
8 # allow to communicate with syslog
9 allow dev_log_t r,w,s;
10 allowcom -unix syslogd_t;
11 # allow to use tcp 20 and 21
12 allownet;
13 allownet -connect;
14 allownet -tcp -port 20;
15 allownet -tcp -port 21;
16 #
17 allowadm chroot;
18 }
以上を記述した後に、以下のコマンドを実行して下さい。
# make diffrelabel上の設定ファイルの中身を見てみましょう。
allowonly /var/log r,w,s;ここで、/var/log/xferlogに書き込み権限を与えたい場合、本来は以下の様にす るのが最適です。
allow /var/log/xferlog r,w,s;しかし、/var/log/xferlogは管理者によって消去されるかもしれません。ファイ ルが再度生成された場合ラベル情報が失われてしまいます。 3よって、/var/log/xferlogのアクセスを制御できません。そのため、 allowonly /var/log r,w,sとしているのです。vsftpd_tは/var/log以 下にあるすべてのファイルに書き込み権限を与えています。しかし、子 ディレクトリにあるファイルには書き込み権限を与えていません。これ は、allow /var/log r,w,s;よりは良いです。(この文は子ディレ クトリも含めて/var/log以下の全てのファイルに書き込みアクセス権限 を与えることを意味しています)。/tmp、/var/runも同様にファイル単位 でのアクセス制御ができません。これらのディレクトリではファイルが 消去、再生成されるため、SELinuxのラベル情報が失われる可能性があるか らです。
#add to simplified_policy/initrc_t.a allow /etc/vsftpd r,s;以上を書き加えたら、以下のコマンドを実行して下さい。
# make diffrelabel