Menu Close

Red Hat Training

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

7.5. Audit ルールの定義

Audit システムは、ログファイルに何を取得するかを定義する一連のルールで動作します。以下の種類の Audit ルールを指定することができます。
制御ルール
Audit システムの動作とその設定の一部を変更できるようにします。
ファイルシステムのルール
ファイルウォッチとも呼ばれ、特定のファイルやディレクトリーへのアクセスを監査することができます。
システムコールのルール
指定されたプログラムが行うシステムコールのログ記録を許可します。
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
ここで、
  • actionfilter は、特定のイベントがログに記録されるタイミングを指定します。アクション は、always または never のいずれかになります。filter は、イベントに適用されるカーネルルールマッチングフィルターを指定します。ルールマッチングフィルターは、taskexituser、および 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