Show Table of Contents
8.3.8. Allowing Access: audit2allow
本番環境では、このセクションの例を使用しないでください。これは、
audit2allow の使用を説明する目的でのみ、使われています。
audit2allow(1) man ページでは、「
audit2allow は、拒否操作のログから SELinux ポリシー allow ルールを生成する」となっています[17]。「sealert メッセージ」 にあるように拒否を分析し、ラベル変更がないもしくはアクセスを許可したブール値がない場合は、audit2allow を使用してローカルポリシーモジュールを作成します。SELinux にアクセスを拒否された後に、audit2allow コマンドを実行すると以前は拒否されたアクセスを許可する Type Enforcement ルールが提示されます。
以下の例では、
audit2allow を使ってポリシーモジュールを作成します。
- 拒否および関連するシステムコールは、
/var/log/audit/audit.logにログ記録されます。type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)この例では、certwatch (comm="certwatch") はvar_tタイプ (tcontext=system_u:object_r:var_t:s0) のラベル付けがされたディレクトリーへの書き込みアクセス ({ write }) が拒否されました。「sealert メッセージ」 にあるように拒否を分析します。ラベル変更がないもしくはアクセスを許可したブール値がない場合は、audit2allowを使ってローカルポリシーモジュールを作成します。 - ステップ 1 の
certwatch拒否のように拒否がログ記録されている場合、audit2allow -w -aコマンドを実行してヒューマンリーダブルな記述でアクセスが拒否された理由を作成します。-aオプションでは、すべての監査ログが読み取られます。-wオプションは、ヒューマンリーダブルな記述を作成します。audit2allowツールは/var/log/audit/audit.logにアクセスするので、Linux root ユーザーで実行する必要があります。~]#
audit2allow -w -atype=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access.Type Enforcement ルールがないのでアクセスが拒否されました。 audit2allow -aコマンドを実行して、拒否されたアクセスを可能にする Type Enforcement ルールを表示します。~]#
audit2allow -a#============= certwatch_t ============== allow certwatch_t var_t:dir write;重要
Type Enforcement ルールの欠如は通常、SELinux ポリシーのバグによって引き起こされ、Red Hat Bugzilla で報告されるべきです。Red Hat Enterprise Linux の場合、Red Hat Enterprise Linux製品に対してバグを作成し、selinux-policyコンポーネントを選択します。バグ報告では、audit2allow -w -aおよびaudit2allow -aコマンドの出力も報告してください。audit2allow -aが表示したルールを使うには、Linux root ユーザーでaudit2allow -a -M mycertwatchコマンドを実行してカスタムモジュールを作成します。-Mオプションは、現在作業中のディレクトリーに-Mで指定された名前のついた Type Enforcement ファイル (.te) を作成します。~]#
audit2allow -a -M mycertwatch******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i mycertwatch.pp ~]#lsmycertwatch.pp mycertwatch.teまた、audit2allowは、Type Enforcement ルールをポリシーパッケージ (.pp) にコンパイルします。モジュールをインストールするには、Linux root ユーザーでsemodule -i mycertwatch.ppを実行します。重要
audit2allowで作成したモジュールは、必要以上にアクセスを許可する場合があります。audit2allowで作成されたモジュールは、fedora-selinux-list などの SELinux リストに公表してレビューすることが推奨されます。ポリシーにバグがあると思われる場合は、Red Hat Bugzilla でバグを作成してください。
複数のプロセスから複数の拒否があって、そのうちの一つのプロセスにのみカスタムポリシーを作成する場合は、
grep コマンドを使って audit2allow の入力を絞り込みます。以下の例では、grep を使って certwatch に関連した拒否のみを audit2allow で送信する方法を示しています。
~]#grep certwatch /var/log/audit/audit.log | audit2allow -M mycertwatch2******************** IMPORTANT *********************** To make this policy package active, execute: ~]#semodule -i mycertwatch2.pp
audit2allow を使ってポリシーモジュールを作成する方法の詳細は、Dan Walsh のブログ記事 "Using audit2allow to build policy modules. Revisited." を参照してください。
[17]
Red Hat Enterprise Linux 6 で policycoreutils-sandbox パッケージがインストールされている場合に利用可能な audit2allow(1) man ページより

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.