---- time->Wed Apr 26 18:34:32 2006 1: type=PATH msg=audit(1146090872.442:29): item=0 name="/etc/vsftpd/vsftpd.conf" flags=101 inode=584775 dev=03:03 mode=0100600 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1146090872.442:29): cwd="/etc/selinux/seedit/src/policy/simplified_policy" 2: type=SYSCALL msg=audit(1146090872.442:29): arch=40000003 syscall=5 success=yes exit=3 a0=bfb04c52 a1=8800 a2=0 a3=8800 items=1 pid=13151 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 comm="vsftpd" exe="/usr/sbin/vsftpd" 3: type=AVC msg=audit(1146090872.442:29): avc: denied { read } for pid=13151 comm="vsftpd" name="vsftpd.conf" dev=hda3 ino=584775 scontext=user_u:system_r:ftpd_t tcontext=system_u:object_r:default_t tclass=file ----3行目はSELinuxのアクセス拒否ログで, 「 ftpd_tドメインが、 vsftpd.confという名前のファイルを読もうとして拒否された」 という意味です. 3行目から、以下のような設定を追加する必要があることが分かります。
allow vsftpd.conf r;これだけでは、vsftpd.confのフルパスを記述してないので、アクセス を許可できてません。しかし、3行目のログにはフルパス情報は書かれていませ ん。 フルパスを得るために、1行目のログを利用します。ここに、vsftpd.conf のフルパスは/etc/vsftpd/vsftpd.confと書かれています。 1行目と3行目を組み合わせることで、以下を追加すればいいことが分かります。
allow /etc/vsftpd/vsftpd.conf r;auditdサービスを起動していない場合、1行目のログは取得されません。つまり、 フルパス情報がログに含まれないことを意味します。auditdが動いてない場合は、locateコマンドを使ってフルパスを推測しますが、失敗することも多いです。 ですので、SELinux Policy Editorを使うときはauditdを使うことをお薦めします。
コントロールパネルより ポリシーを生成をクリックします。図 10のような画面が開きます。
これは、ポリシ自動生成のための設定画面です。通常はデフォルトのままでかま
いません。「ポリシーの生成」ボタンを押すことで、ポリシーが生成されます。
なお、ここで設定可能な項目を参考のために解説します。
最初の行では、 allownet -protocol tcp -port 1024- server; という設定をvsftpd_tドメインに追加するかを聞いています。 対応するアクセス拒否ログも一緒に表示されています。このポリシーを追加した い場合は、チェックボックスにチェックを入れます。
まとめて指定 ボタンは便利な機能です。ディレクトリ単位でまとめてア
クセス許可をすることができます。
allow /etc/vsftpd/vsftpd.conf r,s;を選択し、「まとめて指定」ボタ
ンを押していくと、以下のようにファイル名が変わっていきます。
/etc/vsftpd/vsftpd.conf -> /etc/vsftpd/* -> /etc/vsftpd/** -> /etc/* -> /etc/** -> /* -> /** ->まとめて指定を戻すボタンを押すと、上と逆の順番でファイル名が変わっ ていきます。
# audit2spdl -dlWhen auditd is running(Fedora Core4 default)
# audit2spdl -alYou can read log by specifying filename,
# audit2spdl -l -i /var/log/messages
audit2spdlコマンドは、SELinuxのアクセス拒否ログを、Simplified Policyに変 換するものです。これにより、アプリケーションを動作させるために必要な権限 を簡単に追加できます。以下が、出力例です。
#audit2spdl -al .... It takes some time... ------------------------- #SELinux deny log: audit(1146162965.963:16): avc: denied { read } for pid=6653 comm="vsftpd" name="vsftpd.conf" dev=hda3 ino=584775 scontext=user_u:system_r:ftpd_t tcontext=system_u:object_r:default_t tclass=file #Suggested configuration File ftpd_t.sp: allow /etc/vsftpd/vsftpd.conf r; ------------------------- ...これは、vsftpd.confにreadアクセス拒否をされたログが出ていますが、このア クセスを許可するには、
allow /etc/vsftpd/vsftpd.conf r;という設定をftpd_t.spファイルに追加する必要がある、と言っています。
#yum install audit #chkconfig auditd on #/etc/init.d/auditd startauditdを有効にしたら、通常は「audit2spdl -al」で事足ります。audit2spdl -dlは意味がなくなるので注意が必要です。
{ domain vsftpd\_t program /usr/sbin/program; allow .... <ここに追加!> }ポリシーを追加したら、その変更内容を反映する必要があります。 「seedit-load」とタイプします。
#seedit-load seedit-load: Successこのコマンドは、Simplified PolicyをSELinuxのポリシの形式に変換し、 /etc/selinux/seedit以下に生成されたポリシーをインストールします。 そして、そのポリシーをカーネルに読み込ませ、必要次第でファイルのラベル付 けもします。
# seedit-load -v mkdir -p ./sepolicy; m4 -s ./simplified_policy/*.sp >./simplified_policy/all.sp; /usr/bin/seedit-converter -i ./simplified_policy/all.sp -o ./sepolicy -b ./base_policy -I ./simplified_policy/include ; ................. cp /etc/selinux/seedit/contexts/files/file_contexts.all /etc/selinux/seedit/contexts/files/file_contexts.all.old seedit-load: Success
なお、上の例では、
allow /etc/vsftpd/* r;.という設定を追加してもよいです。これは、ファイル名が、audit2spdlに提示さ れたものとは異なります。が、システム管理者は、/etc/vsftpdディレクトリが vsftpdの設定ファイルであることを知っていますので、このディレクトリ全体の 読み込み権限を与えてしまったほうが効率がよいです。
#Failed to generate, because failed to obtain fullpath.SELinuxのログにはフルパス情報は含まれてませんが、audit2spdlはフルパスを 得るため様々な作業を行っています。それにも関らず失敗することもあ ります。auditdサービスを起動しておくことで、フルパスを得る可能性 を高めることができます。