Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.3.8. Allowing Access: audit2allow

本番環境では、このセクションの例を使用しないでください。これは、audit2allow の使用を説明する目的でのみ、使われています。
audit2allow(1) man ページでは、「audit2allow は、拒否操作のログから SELinux ポリシー allow ルールを生成する」となっています[17]「sealert メッセージ」 にあるように拒否を分析し、ラベル変更がないもしくはアクセスを許可したブール値がない場合は、audit2allow を使用してローカルポリシーモジュールを作成します。SELinux にアクセスを拒否された後に、audit2allow コマンドを実行すると以前は拒否されたアクセスを許可する Type Enforcement ルールが提示されます。
以下の例では、audit2allow を使ってポリシーモジュールを作成します。
  1. 拒否および関連するシステムコールは、/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 を使ってローカルポリシーモジュールを作成します。
  2. ステップ 1 の certwatch 拒否のように拒否がログ記録されている場合、audit2allow -w -a コマンドを実行してヒューマンリーダブルな記述でアクセスが拒否された理由を作成します。-a オプションでは、すべての監査ログが読み取られます。-w オプションは、ヒューマンリーダブルな記述を作成します。audit2allow ツールは /var/log/audit/audit.log にアクセスするので、Linux root ユーザーで実行する必要があります。
    ~]# audit2allow -w -a
    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
    	Was caused by:
    		Missing type enforcement (TE) allow rule.
    
    	You can use audit2allow to generate a loadable module to allow this access.
    
    Type Enforcement ルールがないのでアクセスが拒否されました。
  3. 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 コマンドの出力も報告してください。
  4. 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
    
    ~]# ls
    mycertwatch.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 ページより