7.5. 監査ルールの定義
Audit システムは、ログファイルでキャプチャーされる内容を定義する一連のルールで動作します。指定できる Audit ルールには、以下の 3 つのタイプがあります。
- コントロールルール: Audit システムの動作と、その設定の一部の変更を許可します。
- ファイルシステムルール(ファイル監視とも呼ばれる)は、特定のファイルまたはディレクトリーへのアクセスの監査を許可します。
- システムコールルール - 指定したプログラムが作成するシステムコールのログを許可します。
Audit ルールは、auditctl ユーティリティーを使用してコマンドラインで指定できます(これらのルールは再起動すると持続しない、または
/etc/audit/audit.rules
ファイルで記述されることに注意してください)。以下の 2 つのセクションでは、Audit ルールを定義する両方の方法についての概要を説明します。
7.5.1. auditctl ユーティリティーを使用した Audit ルールの定義
注記
Audit サービスと Audit ログファイルと対話するコマンドはすべて root 権限が必要です。これらのコマンドは必ず root ユーザーとして実行してください。
auditctl コマンドを使用すると、Audit システムの基本的な機能を制御し、どの Audit イベントをログに記録するかを決定するルールを定義できます。
コントロールルールの定義
以下は、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 LIST_RULES: exit,always watch=/etc/localtime perm=wa key=time-change LIST_RULES: exit,always watch=/etc/group perm=wa key=identity LIST_RULES: exit,always watch=/etc/passwd perm=wa key=identity LIST_RULES: exit,always watch=/etc/gshadow perm=wa key=identity ⋮
-D
- 現在読み込まれている Audit ルールをすべて削除します。以下に例を示します。
~]# auditctl -D No rules
ファイルシステムルールの定義
ファイルシステムルールを定義するには、以下の構文を使用します。
auditctl -w path_to_file -p permissions -k key_name
詳細は以下のようになります。
- path_to_file は、監査されるファイルまたはディレクトリーです。
- パーミッション はログに記録されるパーミッションです。
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
/sbin/insmod コマンドの実行(Linux カーネルにモジュールを挿入する)をログに記録するルールを定義するには、以下のコマンドを実行します。
~]# 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 は、イベントに適用されるカーネルルールマッチングフィルターを指定します。rule-matching フィルターはtask
、、exit
user
、およびのいずれかになりますexclude
。これらのフィルターの詳細は、の最初を参照してください 「Audit システムのアーキテクチャー」。 - system_call は、名前でシステムコールを指定します。すべてのシステムコールの一覧は、
/usr/include/asm/unistd_64.h
ファイルにあります。-S
オプションの後に指定した各システムコールは、1 つのルールにグループ化できます。 - 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 が 500 以上のシステムユーザーがファイルを削除したり、名前を変更するたびにログエントリーを作成するルールを定義するには(この
-F auid!=4294967295
オプションを使用して、ログイン UID が設定されていないユーザーを除外する場合)、以下のコマンドを実行します。
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
また、システムコールルール構文を使用してファイルシステムルールを定義することもできます。以下のコマンドは、
-w /etc/shadow -p wa
ファイルシステムルールに類似するシステムコールのルールを作成します。
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa