Red Hat Training

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

7.5. 監査ルールの定義

Audit システムは、ログファイルでキャプチャーされるものを定義する一連のルールで動作します。以下のタイプの Audit ルールを指定できます。
ファイアウォールルール
Audit システムの動作とその設定の一部を修正できるようにします。
ファイルシステムルール
ファイルも監視され、特定のファイルまたはディレクトリーへのアクセスの監査を許可します。
システムコールのルール
指定されたプログラムが行うシステムコールのロギングを許可します。
監査ルールは、以下を設定できます。

7.5.1. auditctlを使用した Audit ルールの定義

auditctl コマンドを使用すると、Audit システムの基本的な機能を制御し、どの 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 - ファイルの or ディレクトリーの属性を変更します。
  • 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 のいずれかになります。これらのフィルターの詳細は、「監査システムアーキテクチャー」 の最初を参照してください。
  • system_call は、その名前でシステムコールを指定します。すべてのシステムコールの一覧は、/usr/include/asm/unistd_64.h ファイルにあります。複数のシステムコールを 1 つのルールにグループ化できます。それぞれは、独自の -S オプションの後に指定できます。
  • field=value は、指定されたアーキテクチャー、グループ ID、プロセス ID などに基づいてイベントを照合するようにルールをさらに変更する追加オプションを指定します。利用可能なすべてのフィールドタイプとそれらの値の一覧は、auditctl(8) の man ページを参照してください。
  • key_name は、どのルールまたは特定のログエントリーを生成したルールのセットを特定するのに役立つオプションの文字列です。

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

システムで 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