Menu Close
Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
7.5. Audit ルールの定義
Audit システムは、ログファイルに何を取得するかを定義する一連のルールで動作します。以下の種類の Audit ルールを指定することができます。
- 制御ルール
- Audit システムの動作とその設定の一部を変更できるようにします。
- ファイルシステムのルール
- ファイルウォッチとも呼ばれ、特定のファイルやディレクトリーへのアクセスを監査することができます。
- システムコールのルール
- 指定されたプログラムが行うシステムコールのログ記録を許可します。
Audit ルールは、以下のように設定できます。
- auditctl ユーティリティーを使用してコマンドラインで設定できます。これらのルールは、再起動しても持続しないことに注意してください。詳細は、「auditctl で監査ルールの定義」 を参照してください。
/etc/audit/audit.rules
ファイルで設定できます。詳細は、「/etc/audit/audit.rules
ファイルでの永続的な Audit ルールと制御の定義」 を参照してください。
7.5.1. auditctl で監査ルールの定義
auditctl コマンドを使用すると、Audit システムの基本機能を制御し、どの Audit イベントをログに記録するかを決定するルールを定義することができます。
注記
Audit サービスおよび Audit ログファイルと対話するすべてのコマンドには、root 権限が必要です。これらのコマンドは、必ず root ユーザーで実行してください。さらに、監査サービスを設定するために CAP_AUDIT_CONTROL が必要で、ユーザーメッセージを記録するために CAP_AUDIT_WRITE が必要です。
制御ルールの定義
以下は、Audit システムの動作を変更できるようにする制御ルールの一部です。
-b
- カーネル内の既存の Audit バッファーの最大量を設定します。以下に例を示します。
~]# auditctl -b 8192
-f
- 重大なエラーが検出されたときに実行されるアクションを設定します。以下に例を示します。
~]# auditctl -f 2
上記の設定は、重大なエラーが発生した場合にカーネルパニックを引き起こします。 -e
- Audit システムを有効または無効にするか、その設定をロックします。以下に例を示します。
~]# auditctl -e 2
上記のコマンドは、Audit 設定をロックします。 -r
- 1 秒あたりに生成されるメッセージのレートを設定します。以下に例を示します。
~]# auditctl -r 0
上記の設定では、生成されるメッセージにレート制限は設定されていません。 -s
- Audit システムのステータスを報告します。以下に例を示します。
~]# auditctl -s AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0
-l
- 現在ロードされているすべての Audit ルールを一覧表示します。以下に例を示します。
~]# auditctl -l -w /etc/passwd -p wa -k passwd_changes -w /etc/selinux -p wa -k selinux_changes -w /sbin/insmod -p x -k module_insertion ⋮
-D
- 現在読み込まれているすべての Audit ルールを削除します。以下に例を示します。
~]# auditctl -D No rules
ファイルシステムルールの定義
ファイルシステムルールを定義するには、以下の構文を使用します。
auditctl -w path_to_file -p permissions -k key_name
ここで、
- path_to_file は、監査対象となるファイルまたはディレクトリーです。
- permissions は、ログに記録されるパーミッションです。
r
—- ファイルまたはディレクトリーへの読み取りアクセス。w
— ファイルまたはディレクトリーへの書き込みアクセス。x
— ファイルまたはディレクトリーへのアクセスを実行します。a
— ファイルまたはディレクトリーの属性の変更。
- key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。
例7.1 ファイルシステムルール
/etc/passwd
ファイルへのすべての書き込みアクセスと、すべての属性変更をログに記録するルールを定義するには、次のコマンドを実行します。
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
-k
オプションに続く文字列は任意であることに注意してください。
/etc/selinux/
ディレクトリー内のすべてのファイルへのすべての書き込みアクセスとすべての属性変更をログに記録するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
モジュールを Linux カーネルに挿入する /sbin/insmod コマンドの実行をログに記録するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -w /sbin/insmod -p x -k module_insertion
システムコールルールの定義
システムコールルールを定義するには、以下の構文を使用します。
auditctl -a action,filter -S system_call -F field=value -k key_name
ここで、
- action と filter は、特定のイベントがログに記録されるタイミングを指定します。アクション は、
always
またはnever
のいずれかになります。filter は、イベントに適用されるカーネルルールマッチングフィルターを指定します。ルールマッチングフィルターは、task
、exit
、user
、およびexclude
のいずれかになります。これらのフィルターの詳細については、「Audit システムのアーキテクチャー」の冒頭を参照してください。 - system_call は、名前でシステムコールを指定します。システムコールの全一覧は、
/usr/include/asm/unistd_64.h
ファイルで確認できます。複数のシステムコールを 1 つのルールにまとめることができ、それぞれを独自の-S
オプションの後に指定することができます。 - field=value は、指定されたアーキテクチャー、グループ ID、プロセス ID などに基づいてイベントに一致するようにルールをさらに変更する追加のオプションを指定します。利用可能なすべてのフィールドタイプとその値の完全なリストについては、auditctl(8) の man ページを参照してください。
- key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。
例7.2 システムコールのルール
adjtimex
または settimeofday
システムコールがプログラムによって使用され、システムが 64 ビットアーキテクチャーを使用するたびにログエントリーを作成するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
ID が 1000 以上のシステムユーザーによってファイルが削除または名前変更されるたびに、ログエントリーを作成するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
-F auid!=4294967295
オプションが、ログイン UID が設定されていないユーザーを除外するために使用されています。
システムコールルール構文を使用して、ファイルシステムルールを定義することもできます。以下のコマンドは、
-w /etc/shadow -p wa
ファイルシステムのルールに類似したシステムコール用のルールを作成します。
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa