Solaris Trusted Extensions 開発ガイド

ファイルのラベルの取得と設定

setflabel() ルーチン、getlabel() システムコール、および fgetlabel() システムコールが、ファイルのラベルの取得と設定のために使用されます。次の記述には、ルーチンおよびシステムコールのプロトタイプ宣言が含まれます。

int setflabel(const char *path, const m_label_t *label_p);

setflabel() ルーチンは、ファイルの機密ラベルを変更します。ファイルの機密ラベルが変わると、新しいラベルに対応するゾーンにファイルが移動します。ファイルは、ほかのゾーンのルートに相対的な新しいパス名に移動します。

setflabel(3TSOL) のマニュアルページを参照してください。

たとえば、setflabel() ルーチンを使用してファイル /zone/internal/documents/designdoc.odt のラベルを INTERNAL から RESTRICTED に変更すると、ファイルの新しいパスは /zone/restricted/documents/designdoc.odt になります。移動先のディレクトリが存在しない場合、ファイルは移動しません。

ファイルの機密ラベルを変更すると、元のファイルは削除されます。移動元と移動先のファイルシステムが同じ基礎となるファイルシステムからループバックマウントされる場合は例外です。この場合、ファイルの名前が変更されます。

プロセスがオブジェクトを作成する場合、オブジェクトは呼び出し元プロセスの機密ラベルを継承します。setflabel() ルーチンは、ファイルシステムオブジェクトの機密ラベルをプログラムによって設定します。

ファイルマネージャーアプリケーションおよび setlabel コマンドでは、承認ユーザーが既存のファイルを異なる機密ラベルに移動することができます。setlabel(1) のマニュアルページを参照してください。

int getlabel(const char *path, m_label_t *label_p);

getlabel() システムコールは、path によって指定されるファイルのラベルを取得します。ラベルは、割り当てた m_label_t 構造体に格納されます。

getlabel(2) のマニュアルページを参照してください。

int fgetlabel(int fd, m_label_t *label_p);

fgetlabel() システムコールは、ファイル記述子を指定することによって、開かれているファイルのラベルを取得します。

m_label_t 構造体を割り当てる場合、割り当てられたメモリーを m_label_free() ルーチンを使用して解放する必要があります。m_label(3TSOL) のマニュアルページを参照してください。