Red Hat Training

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

7.5. Audit ルールの定義

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 は、監査対象のファイルもしくはディレクトリーになります。
  • 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 は、特定のイベントがいつログ記録されるかを指定します。action は、always または never になります。filter は、イベントにどのカーネルルール適合のフィルターを適用するかを指定します。ルール適合フィルターは、taskexituserexclude のいずれかになります。これらフィルターの詳細については、「Audit システムのアーキテクチャー」 の最初の部分を参照してください。
  • system_call は、名前でシステムコールを指定します。システムコールの全一覧は、/usr/include/asm/unistd_64.h ファイルで確認できます。複数のシステムコールをひとつのグループにまとめて、-S オプションの後にそれらを指定することも可能です。
  • field=value では、指定されたアーキテクチャー、グループ ID、プロセス ID、その他に基づいて、ルールがイベントに合致するようさらに修正する追加オプションを指定します。利用可能なフィールドのタイプおよびそれらの値の全一覧は、auditctl(8) man ページで確認できます。
  • key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

例7.2 システムコールのルール

システムが 64 ビットアーキテクチャーを使用していて、プログラムが adjtimex または settimeofday システムコールを使用するたびにログエントリーを作成するルールを定義するには、以下のコマンドを実行します。
~]# 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