Product SiteDocumentation Site

9.6.3.8. アクセスの許可: audit2allow

本番環境でこのセクションにある例を使用しないでください。audit2allow の使い方について説明するためだけに使用します。
audit2allow(1) マニュアルページから: "audit2allow - 拒否された操作のログから SELinux ポリシーの許可ルールを生成します"[31]「sealert メッセージ」として拒否を分析した後、ラベルが変更されなければ、またはブーリアンがアクセスを許可しなければ、ローカルポリシーモジュールを作成するために audit2allow を使用します。アクセスが SELinux により拒否された後、audit2allow コマンドを実行することにより、前に拒否されたアクセスを許可するタイプエンフォースメントルールができます。
以下の例は、ポリシーモジュールを作成するために、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.
    
    示されたとおり、タイプエンフォースメントルールの欠落により、アクセスが拒否されました。
  3. 拒否されたアクセスを許可するタイプエンフォースメントルールを表示するには audit2allow -a コマンドを実行します:
    # audit2allow -a
    
    
    #============= certwatch_t ==============
    allow certwatch_t var_t:dir write;
    

    重要

    タイプエンフォースメントルールがないことが、通常 SELinux ポリシーにあるバグにより引き起こされます。Red Hat Bugzillaに報告すべきです。Fedora に対して、Fedora 製品のバグを作成し、selinux-policy コンポーネントを選択します。そのバグ報告に audit2allow -w -aaudit2allow -a コマンドの出力を含みます。
  4. audit2allow -a により表示されるルールを使用するには、個別モジュールを作成するために Linux root ユーザーとして audit2allow -a -M mycertwatch コマンドを実行します。-M オプションにより、現在の作業ディレクトリに、-M で指定した名前を持つタイプエンフォースメントファイル (.te) を作成します。
    # audit2allow -a -M mycertwatch
    
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:
    
    semodule -i mycertwatch.pp
    
    # ls
    mycertwatch.pp  mycertwatch.te
    
    また、audit2allow がタイプエンフォースメントルールをポリシーパッケージ (.pp) にコンパイルします。モジュールをインストールするには、Linux root ユーザーとして /usr/sbin/semodule -i mycertwatch.pp コマンドを実行します。

    重要

    audit2allow で作成されたモジュールにより、必要とする以上のアクセス権が許可される可能性があります。audit2allow を用いて作成されたポリシーは、レビューのために fedora-selinux-list のような SELinux リストに投稿することが推奨されます。ポリシーにバグがあると確信があれば、Red Hat Bugzilla にバグを作成してください。
複数のプログラムから複数の拒否が発生するが、一つのプロセスのみに対して個別ポリシーを作成したければ、audit2allow の入力を絞るために grep コマンドを使用します。以下の例は、certwatch に関連した拒否のみを audit2allow に送るために、grep を使用することを説明します:
# grep certwatch /var/log/audit/audit.log | audit2allow -M mycertwatch2
******************** IMPORTANT ***********************
To make this policy package active, execute:

# /usr/sbin/semodule -i mycertwatch2.pp
ポリシーモジュールを作成するために audit2allow を使用することに関する詳細は Dan Walsh の "Using audit2allow to build policy modules. Revisited." を参照してください。


[31] audit2allow(1) マニュアルページから、Fedora 19 に policycoreutils パッケージとして同梱されます。