Trusted Solaris 開発ガイド

最小限の監査レコードの作成

監査レコードは、一連のトークンから構成されます。レコードのそれぞれのトークンは、トークンの種類から始まり、その後にトークンの値が続きます。監査レコードには、 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_SUBJECTAW_SLABELAW_RETURN トークンコマンドが渡されていませんが、デフォルトにより、監査レコードには subject、slabel、および return の 3 つのトークンが含まれます。

auditwrite(3) ルーチンに AW_SUBJECTAW_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 トークン

return トークン AW_RETURN は、1 つの数値 (成功または失敗) と戻り値を受け入れます。デフォルトでは、return トークンは success (成功) と戻り値 0 を示します。return トークン値は、auditwrite(3) ルーチンに渡す直前に設定します。

戻り値は、監査レコードが監査トレールのログをとるかどうかを決定します。プロセスの事前選択マスクが、イベントの属するクラスに対し、イベントが失敗したかどうかだけを監査する場合には、成功イベントのログはとられません。プロセスの事前選択マスクが、イベントの属するクラスに対し、イベントが成功したかどうかだけを監査する場合には、失敗イベントのログはとられません。プロセスの事前選択マスクが、イベントが属しているクラスに対し、成功と失敗の両方を監査する場合には、成功イベントと失敗イベントの両方のログがとられます。また、auditreduce(1M) 事後選択プログラムは、レコードの return トークン内の成功または失敗を表す値によって、監査レコードを選択します。

次の例は、システムが 2 番目の署名を要求したことを示す、監査レコードの一部を作成します。signature_request() 関数は、署名の取得を試み、試みの成功または失敗を表す情報を返し、signature_requestretval パラメータを設定します。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