監査レコードは、一連のトークンから構成されます。レコードのそれぞれのトークンは、トークンの種類から始まり、その後にトークンの値が続きます。監査レコードには、 auditwrite(3) ルーチンに適切なトークンコマンドを渡すことによって、どのようなトークンや値でも含めることができます。
各監査レコードには、少なくとも、header (ヘッダー) トークン、subject (表題) トークン、slabel (機密ラベル) トークン、および return (リターン) トークンが入っています。前述の例の auditwrite(3) ルーチンコールは、AW_EVENT トークンコマンドだけを指定することによって、最小限の監査レコードを生成します。
auditwrite(3) を呼び出す場合は、常に有効セットに proc_audit_appl 特権が必要であることに注意してください。コード内のコメントは、第 3 章「特権」で説明している特権のブラケット化が必要な位置を示しています。これ以降の例では、読者がブラケット化の実施を理解していることを想定し、このコメントを示しません。
/* 有効セット内で proc_audit_appl をオン (有効) にする */ auditwrite(AW_EVENT, "AUE_second_signature", AW_WRITE, AW_END); /* proc_audit_appl 特権をオフ (無効) にする */
次の出力行は、それぞれ 1 つのトークンを含みます。各行の最初の語句はトークン ID であり、その後にトークンの構成要素が続いています。/etc/security/audit_event に定義された説明テキスト「second signature requested (2 番目の署名が要求されています)」が header トークンに加えられます。
この auditwrite(3) ルーチンコールには AW_SUBJECT、AW_SLABEL、AW_RETURN トークンコマンドが渡されていませんが、デフォルトにより、監査レコードには subject、slabel、および return の 3 つのトークンが含まれます。
デフォルトでは、トークン値の subject にはそのプロセスのセキュリティ属性情報が入り、slabel にはそのプロセスの機密ラベルが入ります。
デフォルトでは、return トークンには、戻り値 0 (成功) が入ります。
auditwrite(3) ルーチンに AW_SUBJECT、AW_SLABEL、または AW_RETURN を渡す場合には、トークン値を明示的に定義する必要があります。監査の事前選択と事後選択は、return トークン値に基づいて、成功または失敗による監査レコードを選択します。「return トークン」で述べているように、監査レコードには、常に return トークンと成功または失敗を示す適切な値を含めてください。
header, 4022,2,second signature requested,,Fri Sep 06 10:16:49 1996 + 969954500 msec subject,zelda,zelda,staff,zelda,staff,1774,348,0 0 phoenix slabel,C return,success,0 |
『Trusted Solaris の監査管理』には、各トークンの構造と各構成要素のバイトサイズが示されています。レコードの読み方とレコードサイズの決定方法 (容量を考慮する必要がある場合) を知る助けとなるように、subject トークンの構造を次に示します。
トークン ID |
監査 ID |
ユーザー ID |
グループ ID |
実ユーザー ID |
実グループ ID |
プロセス ID |
セッション ID |
デバイス ID |
マシン ID |
subject |
zelda |
root |
other |
root |
other |
1774 |
348 |
0 0 |
phoenix |
1 バイト |
4 バイト |
4 バイト |
4 バイト |
4 バイト |
4 バイト |
4 バイト |
4 バイト |
4 バイト |
4 バイト |
return トークン AW_RETURN は、1 つの数値 (成功または失敗) と戻り値を受け入れます。デフォルトでは、return トークンは success (成功) と戻り値 0 を示します。return トークン値は、auditwrite(3) ルーチンに渡す直前に設定します。
戻り値は、監査レコードが監査トレールのログをとるかどうかを決定します。プロセスの事前選択マスクが、イベントの属するクラスに対し、イベントが失敗したかどうかだけを監査する場合には、成功イベントのログはとられません。プロセスの事前選択マスクが、イベントの属するクラスに対し、イベントが成功したかどうかだけを監査する場合には、失敗イベントのログはとられません。プロセスの事前選択マスクが、イベントが属しているクラスに対し、成功と失敗の両方を監査する場合には、成功イベントと失敗イベントの両方のログがとられます。また、auditreduce(1M) 事後選択プログラムは、レコードの return トークン内の成功または失敗を表す値によって、監査レコードを選択します。
次の例は、システムが 2 番目の署名を要求したことを示す、監査レコードの一部を作成します。signature_request() 関数は、署名の取得を試み、試みの成功または失敗を表す情報を返し、signature_request と retval パラメータを設定します。succ_or_fail パラメータは signature_request 内の値に基づいて設定され、このパラメータと retval は、AW_RETURN トークンに対して値として渡されます。
char succ_or_fail; u_int retval; auditwrite( AW_TEXT, "Second signature needed," AW_APPEND, AW_END); if (signature_request() == -1) { succ_or_fail = -1; retval = -2; } else { succ_or_fail = 0; retval = 1; } auditwrite( AW_EVENT, "AUE_second_signature", AW_RETURN succ_or_fail, retval, AW_WRITE, AW_END);
署名は取得されず、表示用の端末は次のレコードを表示します。
header,128,2,second signature requested,,Wed Sep 11 10:17:37 1996, + 239969000 msec text, Second signature needed return,failure,-2 subject,zelda,zelda,staff,zelda,staff,1905,536,0 0 phoenix slabel,C |