Trusted Solaris 開発ガイド

CMW ラベルと認可上限

プロセスがより高い機密ラベルのファイルに書き込みを行う場合や、オブジェクトの CMW ラベルを変更する場合、システムはファイルの機密ラベルがプロセスの機密ラベルよりも優位であり、プロセス認可上限がファイルの機密ラベルよりも優位であることをチェックします。アプリケーションが複数の異なる機密ラベルのファイルに書き込みを行う場合、必要に応じ、コード内でこれらのチェックを実行してエラーを見つけることも、必要に応じて有効セットに特権を追加することもできます。

このコードは、以下の処理を実行します。

第 5 章「ラベル」第 7 章「プロセス認可上限」では、バイナリ形式のラベルまたは認可上限を ASCII 形式に変換するプログラミングインタフェースについて説明します。ASCII 形式に変換すると、文字列のように処理できます。

#include <tsol/label.h>
 main()
 {
 	int						retval, retvalclearance, retvalsens;
 	bclabel_t					filecmwlabel, processcmwlabel;
 	bslabel_t					filesenslabel, processsenslabel;
 	bclear_t					processclearance;
 	char			*file = "/export/home/labelfile";

/* ファイルの CMW ラベルを得る */
 	retval = getcmwlabel(file, &filecmwlabel);

/* プロセスの CMW ラベルを得る */
 	retval = getcmwplabel(&processcmwlabel);

/* CMW ラベルの機密ラベル部を得る */
 	getcsl(&filesenslabel, &filecmwlabel);
 	getcsl(&processsenslabel, &processcmwlabel);

/* プロセスの認可上限を得る */
 	retval = getclearance(&processclearance);

/* プロセスのラベルがファイルのラベルより優位か調べる (retvalclearance > 0) */
 	retvalclearance = bldominates(&processsenslabel, &filesenslabel);

/* プロセスの認可上限がファイルのラベルより優位か調べる (retvalsens > 0) */
 	retvalsens = bldominates(&processclearance, &filesenslabel);

/* 検査の結果 */
 	if(retvalclearance && retvalsens > 0)
 		{ /* ファイル CMW ラベルの変更あるいはファイルへの書き込み */}
 	else if (retvalclearance == 0)
 		{ /* エラーメッセージの表示あるいは該当する有効な特権の作成 */}
 	else if (retvalsens == 0)
 		{ /* エラーメッセージの表示あるいは該当する有効な特権の作成 */}
 }