Trusted Solaris 開発ガイド

ラベルの関係の確認

アプリケーションが異なる機密ラベルのデータにアクセスする場合、実行前にコード内で検査を行い、プロセスラベルがデータラベルと正しい関係にあるか確認することができます。アクセスがシステムにより許可されるか、それともアクセス制限を無効にする特権が必要かを確認するためには、機密ラベルを調べます。

この節の例では、2 つの機密ラベル間の、関係 (同等、優位、完全な優位のいずれか) を確認する方法を示しています。Trusted Solaris 7 は、プロセスがオブジェクトの機密ラベルを変更する場合や、より高い機密ラベルのオブジェクトに対して書き込みを行う場合、プロセス認可上限を調べます。認可上限と機密ラベル間の関係のテスト方法は、「2 つのレベル間の関係の確認」を参照してください。

2 つのレベル間の関係の確認

レベルとは、機密ラベルの格付けとコンパートメントセットにより設定される認可上限のことで、データ型 blevel_t で定義します。2 つのレベルは、同等、一方が他方より優位、一方が他方より完全に優位のいずれかの関係になります。

次の例は、プロセスの機密ラベルとファイルの機密ラベルの関係をテストします。プロセスとファイルの CMW ラベルの取得、および機密ラベル部の抽出を行うコードは示されていないので、コード例については、「プロセス CMW ラベルの取得」「ファイル CMW ラベルの取得」を参照してください。

この例では、プロセスとファイルの機密ラベルは Confidential です。2 つのラベルの格付けは同等で、プロセスラベルがファイルラベルより優位ですが完全に優位ではありません。

#include <tsol/label.h>

 main()
 {
 	int 					equal, dominate, strictdom, retval;
 	bslabel_t 					plabel, filelabel;
 	bclabel_t 					fileCMWlabel, pCMWlabel;

/* ファイルとプロセスの CMW ラベルを得る */
 	retval = getcmwlabel("/export/home/zelda/afile", &fileCMWlabel);
 	retval = getcmwplabel(&pCMWlabel);

/* 機密ラベルを得る */
 	getcsl(&filelabel, &fileCMWlabel);
 	getcsl(&plabel, &pCMWlabel);

/* 得られた 2 つのラベルが同等か調べる */
 	equal = blequal(&plabel, &filelabel);
 	printf("Process label equals file label? %d¥n", equal);

/* 優位か調べる */
 	dominate = bldominates(&plabel, &filelabel);
 	printf("Process label dominates file label? %d¥n", dominate);

/* 完全に優位か調べる */
 	strictdom = blstrictdom(&plabel, &filelabel);
 	printf("Process label strictly dominates file label? %d¥n", strictdom);
 }

printf 文によって、次のように出力されます。0 を超える値は true で、0 は false です。

Process label equals file label? 1

Process label dominates file label? 1

Process label strictly dominates file label? 0