アプリケーションが異なる機密ラベルのデータにアクセスする場合、実行前にコード内で検査を行い、プロセスラベルがデータラベルと正しい関係にあるか確認することができます。アクセスがシステムにより許可されるか、それともアクセス制限を無効にする特権が必要かを確認するためには、機密ラベルを調べます。
この節の例では、2 つの機密ラベル間の、関係 (同等、優位、完全な優位のいずれか) を確認する方法を示しています。Trusted Solaris 7 は、プロセスがオブジェクトの機密ラベルを変更する場合や、より高い機密ラベルのオブジェクトに対して書き込みを行う場合、プロセス認可上限を調べます。認可上限と機密ラベル間の関係のテスト方法は、「2 つのレベル間の関係の確認」を参照してください。
レベルとは、機密ラベルの格付けとコンパートメントセットにより設定される認可上限のことで、データ型 blevel_t で定義します。2 つのレベルは、同等、一方が他方より優位、一方が他方より完全に優位のいずれかの関係になります。
同等 - 2 つのレベルの格付けの階層の位置が数学的に等しいとき、この 2 つのレベルは「同等」です。このとき、一方のコンパートメントは他方のコンパートメントをすべて含みその以外のコンパートメントを含んではいけません。
優位 - 格付けの階層において一方のレベルの格付けが他方のレベルの各付けより数学的に大きいか等しく、また、一方のコンパートメントが他方のコンパートメントをすべて含むとき、このレベルは他方のレベルより「優位」です。
完全な優位 - レベル 1 がレベル 2 より優位であるが、レベル 2 と等しくない場合、レベル 1 はレベル 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