この例では、プロセスは、認可上限 Top Secret を使用して Confidential で実行されています。このプロセスは、ファイルの CMW ラベルの機密ラベル部を Top Secret に昇格します。ラベル昇格では常に特権が必要なため、このプロセスは file_upgrade_sl 特権を必要とします。第 3 章「特権」で説明している特権のブラケット化が必要な位置は、コード内のコメントで示してあります。
プロセスは、オブジェクトの機密ラベルを、プロセス自体の認可上限よりも高いレベルには昇格できません。機密ラベルと照らしてプロセス認可上限をチェックする方法は、「もっとも高いレベルともっとも低いレベルの検索」を参照してください。
ファイルの CMW ラベルが昇格された時に、システムがファイル名を表示しないよう管理者が /etc/system ファイルに設定するか、インストール時に指定した場合、Confidential でログインしたユーザーが、ディレクトリ中のファイルをリストしても昇格されたファイルは表示されません。システム変数の照会の詳細は、「システムセキュリティ構成の照会」を参照してください。
ASCII からバイナリへの変換では、NEW_LABEL フラグパラメータを使用して新しいラベルを作成します。ASCII からバイナリへのラベル変換およびフラグパラメータの詳細は、「ASCII からバイナリと 16 進への変換」を参照してください。
setcmwlabel(2) システムコールに渡される SETCL_SL 値は、機密ラベル部が設定されることを示します。新しい機密ラベルはファイルを含んでいるファイルシステムのラベルの範囲内になければならず、必要な特権が有効でなければなりません。
#include <tsol/label.h> main() { int retval, error; bclabel_t fileCMWlabel; bslabel_t fsenslabel; char *string = "TOP SECRET", *string1 = "TOP SECRET"; /* 機密ラベルの新しい値を作成する */ /* 有効セット内で sys_trans_label をオン (有効) にする */ retval = stobsl(string, &fsenslabel, NEW_LABEL, &error); /* sys_trans_label をオフ (無効) にする */ /* CMW ラベルの機密ラベル部を新しい値に設定する */ setcsl(&fileCMWlabel, &fsenslabel); /* ファイルの CMW ラベルを設定する */ /* 有効セット内で file_upgrade_sl をオン (有効) にする */ retval = setcmwlabel( "/export/home/zelda/afile", &fileCMWlabel, SETCL_SL); /* file_upgrade_sl をオフ (無効) にする */ }
ファイルのラベルの変化をチェックするには、getlabel(1) を使用してください。上記のプログラムが実行される前の afile の CMW ラベルを、次に示します。
%phoenix getlabel afile
afile: CONFIDENTIAL [C]
プログラムの実行後、CMW ラベルは次のようになります。getlabel(1) を Confidential で使用する場合、Top Secret ファイルのラベルを読み取るには sys_trans_label 特権が必要です。
%phoenix getlabel afile
afile: TOP SECRET [TS]