SELinux : audit2allowを利用する2016/04/05 |
audit2allow を利用すると AVC 拒否のログを分析し SELinux
ポリシーに対してアクセス許可するルールを生成することができます。これにより容易にポリシーのカスタマイズが可能です。
ただし、SETroubleShoot
等を利用して自身でログを確認し、解決方法を判断して、restorecon コマンド や
chcon コマンドにより必要最小限の許可を与える方法と比べると、audit2allow
によって生成される許可ルールは粗い場合があり、必要以上の許可を与えてしまうこともあるため、利用する際は注意が必要です。
なお、audit2allow コマンドがない場合は「yum install policycoreutils-python」としてインストール可能です。
|
|
[1] | ログを読み込み、拒否された理由を表示します。 ログファイルを指定しない場合のデフォルトは /var/log/audit/audit.log を読み込みます。 ログファイルを指定する場合は「-a」の代わりに「-i ログファイル」と指定します。 |
# audit.log から AVC 拒否を全て読み取って理由を表示 [root@dlp ~]# audit2allow -w -a type=AVC msg=audit(1460007772.762:55): avc: denied { getattr } for pid=1029 comm="httpd" path="/var/www/html/index.html" dev="dm-0" ino=101186198 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access. ..... ..... type=AVC msg=audit(1460007828.479:64): avc: denied { getattr } for pid=1056 comm="httpd" path="/var/www/html/index.html" dev="dm-0" ino=101186198 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access. # 例えば ausearch と併用して特定のログに絞っての表示も可 [root@dlp ~]# ausearch -m AVC --start 04/05/2016 19:52:00 --end 04/05/2016 19:52:59 | audit2allow -w type=AVC msg=audit(1460009034.012:76): avc: denied { getattr } for pid=1054 comm="httpd" path="/var/www/html/index.html" dev="dm-0" ino=101186198 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access. type=AVC msg=audit(1460009034.013:77): avc: denied { getattr } for pid=1054 comm="httpd" path="/var/www/html/index.html" dev="dm-0" ino=101186198 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access. # -a オプションで必要なアクセス権を表示 [root@dlp ~]# ausearch -m AVC --start 04/05/2016 19:52:00 --end 04/05/2016 19:52:59 | audit2allow -a #============= httpd_t ============== allow httpd_t admin_home_t:file getattr; |
[2] | 許可ルールを生成するには以下のように設定します。 |
# 例として「test_rule」というモジュールを生成 [root@dlp ~]# ausearch -m AVC --start 04/05/2016 19:52:00 --end 04/05/2016 19:52:59 | audit2allow -a -M test_rule ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i test_rule.pp # 表示された通りにコマンド実行してモジュールインストール [root@dlp ~]# semodule -i test_rule.pp
# モジュールが読み込まれているか確認 [root@dlp ~]# semodule -l | grep test_rule test_rule 1.0 |
[3] | 以上でアクセス可能になる場合もあります。また、そうでない場合もあります。 上記例の場合は、以下のように未だアクセス不可です。 |
[root@dlp ~]# curl http://localhost/index.html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /index.html on this server.</p> </body></html> |
理由は httpd_t ドメインが admin_home_t タイプのファイルにアクセスして結果を返すには getattr のみでは足りないためです。 このような場合は、再度 audit2allow でルールを生成します。 |
[root@dlp ~]# ausearch -m AVC | grep -E 'http|index.html' | audit2allow -a
#============= httpd_t ==============
allow httpd_t admin_home_t:file read;
#!!!! This avc is allowed in the current policy
allow httpd_t admin_home_t:file getattr;
# read も必要だった
[root@dlp ~]# ausearch -m AVC | grep -E 'http|index.html' | audit2allow -a -M test_rule [root@dlp ~]# semodule -i test_rule.pp [root@dlp ~]# curl http://localhost/index.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
.....
# 未だアクセス不可
[root@dlp ~]# ausearch -m AVC | grep -E 'http|index.html' | audit2allow -a
#============= httpd_t ==============
allow httpd_t admin_home_t:file open;
#!!!! This avc is allowed in the current policy
allow httpd_t admin_home_t:file { read getattr };
# open も必要だった
[root@dlp ~]# ausearch -m AVC | grep -E 'http|index.html' | audit2allow -a -M test_rule [root@dlp ~]# semodule -i test_rule.pp [root@dlp ~]# curl http://localhost/index.html Test Page # アクセスできた
|
Sponsored Link |