アプリケーションは、auditwrite(3) ライブラリルーチンを使用して、アプリケーション自体の独自の監査イベントのログを記録できます。この例は、auditwrite() に対する 1 つのコールでユーザー監査記録を作成します。記録される監査イベントは、「successful login at console (コンソールのログインが完了しました)」というテキストを含む AUE_su です。通常、auditwrite() は、アプリケーションレベルの監査イベントを記録します。この例では、ルーチンの使用方法を示すために、Trusted Solaris 7 のユーザーイベントを記録しています。独自の監査イベントの詳細は、第 9 章「アプリケーション監査」を参照してください。
AUE_su はトラステッドコンピューティングベース (TCB) の監査イベントであるため、このプログラムを実行するプロセスは、有効セット内に proc_audit_tcb 特権を必要とします。コードのコメントは、どこで特権のブラケット化が必要かを示します (特権のブラケット化の詳細は第 3 章「特権」を参照)。aw_strerror(3) ルーチンは、auditwrite エラーメッセージ (aw_errno) を文字列に変換します。auditwrite() に渡されるパラメータを次に示します。
AW_EVENT は、監査ログに記録する監査イベントを指定します。AW_EVENT は、audit_event に定義されているユーザーイベントの文字列名です。1 つの監査記録に書き込めるイベントは 1 つだけです。
AW_TEXT は、監査イベントについての参考情報を提供するために監査記録に加えられる、NULL で終わっている文字列です。
AW_WRITE は、イベントとイベントに対応するテキストを監査トレールに書き込みます。
AW_END は、auditwrite() に情報の解析を終了することを伝えます。
#include <bsm/auditwrite.h> #include <types.h> #include <unistd.h> main() { char *aw_string; int retval, errno; /* 有効な特権セットの proc_audit_tcb をオン (有効) にする */ retval = auditwrite( AW_EVENT, "AUE_su", AW_TEXT, "Successful login at console", AW_WRITE, AW_END); /* proc_audit_tcb 特権をオフ(無効) にする */ aw_string = aw_strerror(aw_errno); printf("Retval = %d AW_ERROR = %s ERRNO = %d¥n", retval, aw_string, errno); }
このプログラムを実行して監査記録を表示するには、次の手順に従ってください。
管理役割になり、表示用端末ウィンドウを ADMIN_HIGH で開き、次のコマンドを実行します。lo は AUE_su が属するクラスを示し、pid は端末のプロセス ID を示します。
# auditconfig -setpmask pid lo
管理役割になり、2 番目の表示用端末を ADMIN_HIGH で開きます。続いて、praudit(1M) を使用し、次のコマンドとオプションを入力して not_terminated (最新のまだ閉じていない) 監査ログファイルを読み取ります。
この構文は、*not_terminated* ファイルが 1 つだけ存在する場合に動作します。ほかにもファイルが存在する場合は、古いファイルを削除してからこのコマンドを実行してください。
phoenix% tail -0f *not_terminated* | praudit
最初に開いたウィンドウで、コードをコンパイルして実行します。
この例のコンパイルには、次のライブラリが必要です。
-lbsm -lnsl -lintl -lsocket -ltsol
この例が動作するためには、プロセスに proc_audit_tcb 特権が必要です。特権を設定するには、次に示すように setfpriv(1) を使用してください。
setfpriv(1) は、file_setpriv 特権を必要とするので、このコマンドをプロファイルシェルから実行するときは、この特権を使用しなければなりません。
phoenix% setfpriv -s -a proc_audit_tcb executable
printf 文によって、最初の端末ウィンドウに次のように出力されます。
Retval = 0, AW_ERROR = No error, ERRNO = 0
表示用ウィンドウには、監査記録が次のように表示されます。
header, 129,2,su,,Wed Jun 26 14:50:19 1996, +699964500 msec text, Successful login at console subject,zelda,zelda,staff,zelda,staff,1050,853,24,7 phoenix slabel,Confidential return,success,0 |
この監査記録は、一連のトークンから構成されています。それぞれの行には、トークンとそれに続くトークン値が含まれます。この例では、監査イベント AUE_su のトークンは header、text、subject、slabel、return です。トークン値は、次のトークンが出現するまでに示される、そのトークンの情報です。トークンの詳細は、『Trusted Solaris の監査管理』を参照してください。