selinuxの監査ログより新規ポリシーの作成について
監査ログの取得により、ブロックされている状態がわかる。
※監査ログの例
type=AVC msg=audit(): avc: denied { read } for pid=12345 comm="php" name="db" dev=hdc5 ino=123456 s
context=root:system_r:postfix_local_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=dir
これは、コマンドを実行したが、コマンド実行元ソースコードが格納されているファイルの属性等と実行した結果としてのアクションが、許可されていなかったために監査ログが出力された。
具体的に言うと、root:system_r:postfix_local_tの属性をもつコマンドソースファイルよりphpコマンドを実行したが、実行時に読み込もうとしたファイルのread権限がなくて、監査ログに記録されたもの。
ターゲットとなるコマンドを実行し、監査ログが出力されるのを監視する。
deniedと表示された行の前後を切り取り、許可となるポリシーを作成するコマンドは以下の通り。
# cat /var/log/audit/audit.log | audit2allow -m newpolicy > newpolicy.te
newpolicy.te に許可となるポリシーが書き出される。
(出力例)
---
module newpolicy 1.0;
require {
class capability sys_chroot;
type pop_port_t;
type postfix_smtp_t;
role system_r;
};
allow postfix_smtp_t self:capability sys_chroot;
---
内容は別の機会に譲る(笑)
作成されたファイルを適用するには、以下の手順による。
# checkmodule -M -m -o newpolicy.mod newpolicy.te
# semodule_package -o newpolicy.pp -m newpolicy.mod
# semodule -i newpolicy.pp