11.3.8. アクセスの許可: audit2allow
警告
実稼働環境では、このセクションの例を使用しないでください。これは、
audit2allow
ユーティリティーの使用を実証する目的でのみ使用されます。
audit2allow
ユーティリティーは、拒否された操作のログから情報を収集し、SELinux ポリシー許可ルールを生成します。[13] 「sealert メッセージ」に従って拒否メッセージを分析し、ラベル変更やブール値によるアクセスが許可されていない場合は、audit2allow
を使用してローカルポリシーモジュールを作成します。SELinux がアクセスを拒否した場合に、audit2allow
を実行すると、拒否したアクセスを許可する Type Enforcement ルールが生成されます。
SELinux 拒否が表示された場合、最初に
audit2allow
を使用してローカルポリシーモジュールを生成しないでください。トラブルシューティングは、ラベル付けの問題があるかどうかを最初に確認します。2 番目に多いのが、SELinux が、プロセスの設定変更を認識していない場合です。詳細は、Four Key Causes of SELinux Errors のホワイトペーパーを参照してください。
以下の例は、
audit2allow
を使用してポリシーモジュールを作成する例を示しています。
- 拒否メッセージと関連するシステムコールが
/var/log/audit/audit.log
ファイルにログ記録されます。type=AVC msg=audit(1226270358.848:238): avc: denied
{ write }
for pid=13349comm="certwatch"
name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0tcontext=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 はvar_t
タイプのラベルが付けられたディレクトリーへの書き込みアクセスを拒否します。「sealert メッセージ」に従って拒否メッセージを分析します。ラベル変更やブール値によるアクセスが許可されていない場合は、audit2allow
を使用してローカルポリシーモジュールを作成します。 - 以下のコマンドを入力して、アクセスが拒否された理由を人間が判読できるように説明します。
audit2allow
ユーティリティーは/var/log/audit/audit.log
を読み取ります。そのような場合は、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.-a
コマンドラインオプションを指定すると、すべての監査ログが読み込まれます。-w
オプションは、人間が判読できる記述を生成します。このように、Type Enforcement ルールがないため、アクセスが拒否されました。 - 次のコマンドを入力して、拒否されたアクセスを許可する 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 が表示するルールを使用するには、root で以下のコマンドを実行して、カスタムモジュールを作成します。
-M
オプションは、-M
で指定された名前で、現在の作業ディレクトリーに、Type Enforcement ファイル (.te
) を作成します。~]#
audit2allow -a -M mycertwatch ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i mycertwatch.pp - また、
audit2allow
は、Type Enforcement ルールをポリシーパッケージ (.pp
) にコンパイルします。~]#
ls mycertwatch.pp mycertwatch.teモジュールをインストールするには、root で以下のコマンドを実行します。~]#
semodule -i mycertwatch.pp重要audit2allow
で作成したモジュールは、必要以上のアクセスを許可する場合があります。audit2allow
で作成したポリシーは、アップストリームの SELinux 一覧に投稿して確認することが推奨されます。 ポリシーにバグがあると思われる場合は、Red Hat Bugzilla でバグを作成します。
複数のプロセスからの拒否メッセージが複数存在し、1 つのプロセスに対してのみカスタムポリシーを作成する場合は、
grep
ユーティリティーを使用して、audit2allow
の入力内容を絞り込みます。以下の例は、grep
を使用して、audit2allow
経由で certwatch
に関連する拒否メッセージのみを送信することを示しています。
~]#
grep certwatch /var/log/audit/audit.log | audit2allow -R -M mycertwatch2
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i mycertwatch2.pp