AlmaLinux 9
Sponsored Link

SELinux : audit2allow 基本操作2023/02/20

 
[audit2allow] コマンドにより AVC 拒否のログを分析し SELinux ポリシーに対してアクセス許可するルールを生成することができます。これにより容易にポリシーのカスタマイズが可能です。
ただし、SETroubleShoot 等を利用して自身でログを確認し、解決方法を判断して、[restorecon] コマンド や [chcon] コマンドにより必要最小限の許可を与える方法と比べると、[audit2allow] によって生成される許可ルールは粗い場合があり、必要以上の許可を与えてしまうこともあるため、利用する際は注意が必要です。
なお、[audit2allow] コマンドがない場合は [dnf install policycoreutils-python-utils] としてインストール可能です。
[1] ログを読み込み、拒否された理由を表示します。
ログファイルを指定しない場合のデフォルトは [/var/log/audit/audit.log] を読み込みます。
ログファイルを指定する場合は [-a] の代わりに [-i ログファイル] と指定します。
# audit.log から AVC 拒否を全て読み取って理由を表示

[root@dlp ~]#
audit2allow -w -a

type=AVC msg=audit(1646973275.750:211): avc:  denied  { name_bind } for  pid=2764 comm="httpd" src=83 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket permissive=0
        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(1646973275.751:212): avc:  denied  { name_bind } for  pid=2764 comm="httpd" src=83 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket permissive=0
        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 03/10/2022 12:00:00 --end 03/11/2022 18:00:00 | audit2allow -w

type=AVC msg=audit(1646973275.750:211): avc:  denied  { name_bind } for  pid=2764 comm="httpd" src=83 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket permissive=0

        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(1646973275.751:212): avc:  denied  { name_bind } for  pid=2764 comm="httpd" src=83 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket permissive=0

        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 03/10/2022 12:00:00 --end 03/11/2022 18:00:00 | audit2allow -a


#============= httpd_t ==============
allow httpd_t reserved_port_t:tcp_socket name_bind;

#============= smbd_t ==============
#!!!! This avc can be allowed using the boolean 'samba_export_all_rw'
allow smbd_t user_home_dir_t:dir watch;
[2] 許可ルールを生成するには以下のように設定します。
# 例として [test_rule] というモジュールを生成

[root@dlp ~]#
ausearch -m AVC --start 03/10/2022 12:00:00 --end 03/11/2022 18:00:00 | 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
 
以上で以下のようにアクセス可能になる場合もあります。また、そうでない場合もあります。
アクセスできない場合は [audit2allow] による対策を再度繰り返す必要があります。
関連コンテンツ