Solaris Trusted Extensions 開発ガイド

第 1 章 Solaris Trusted Extensions API とセキュリティーポリシー

SolarisTM Trusted Extensions ソフトウェア (Trusted Extensions) には、ラベルにアクセスしてその処理を行うアプリケーションの作成を可能にする、アプリケーションプログラミングインタフェース (API) が用意されています。この章では、その API の機能とTrusted Extensions セキュリティーポリシーの概要について説明します。

Trusted Extensions で使用する用語の定義については、『Solaris Trusted Extensions ユーザーズガイド』の用語集を参照してください。

Solaris オペレーティングシステム (Solaris OS) で Trusted Extensions API を使用する方法の例は、Solaris ソースコードを参照してください。OpenSolaris の Web サイト の左のナビゲーションバーにある「Source Browser」をクリックします。Source Browser を使用して Solaris のソースコードを検索します。

この章の内容は次のとおりです。

ラベルについて

Solaris Trusted Extensions ソフトウェアは、Solaris OS のセキュリティー機能を拡張する一連のポリシーおよびサービスを提供します。この拡張機能によって、ラベルの関係に基づくアクセス制御が可能になります。

ラベルは、データへのアクセスを制御し、データの格付けを管理します。ラベルは、システムセキュリティーポリシーによって解釈される属性です。「システムセキュリティーポリシー」は、システムで処理される情報を保護するために、システムソフトウェアによって強制される一連の規則です。「セキュリティーポリシー」という用語は、ポリシーそのものを指す場合と、ポリシーの実装を指す場合があります。詳細は、「Trusted Extensions セキュリティーポリシー」を参照してください。

この節では、ラベルの型、範囲、構成要素、および関係の概要を説明します。

ラベルの型

Trusted Extensions ソフトウェアは、機密ラベルと認可上限ラベルの 2 つの型のラベルを定義します。「機密ラベル」 は、エンティティーのセキュリティーレベルを示し、一般に「ラベル」と呼ばれます。「認可上限ラベル」は、ラベル範囲の上限を定義し、一般に「認可上限」と呼ばれます。

機密ラベル

Trusted Extensions ソフトウェアは、ゾーンを使用して、格付けされた情報をさまざまなレベルに収容します。各レベルは専用のゾーンに関連付けられ、ゾーンには機密ラベルが付けられます。機密ラベルは、ゾーンにおける情報の機密度を示し、ゾーン内のすべてのサブジェクトおよびオブジェクトに適用されます。ラベルには CONFIDENTIALSECRETTOP SECRET などがあります。「サブジェクト」は、プロセスなどの能動的なエンティティーであり、 情報をオブジェクト間で移動させたり、システムの状態を変化させます。「オブジェクト」はファイルやデバイスなどの受動的なエンティティーであり、データを収容したり、データを受け取ったりします。ゾーンで実行されるすべてのプロセス、またゾーンに含まれるすべてのファイルなどは、そのゾーンと同じ機密ラベルを持っています。すべてのプロセスおよびオブジェクトは、必須アクセス制御 (MAC) の決定に使用される機密ラベルを持ちます。デフォルトでは、機密ラベルはウィンドウシステムで表示されます。

認可上限ラベル

セキュリティー管理者は、各ユーザーに認可上限を割り当てます。認可上限は、ラベル範囲の上限を定義するラベルです。たとえば、ユーザーの認可上限が SECRET である場合、そのレベル以下に格付けされる情報にはアクセスできますが、それより上のレベルに格付けされる情報にはアクセスできません。「ユーザー認可上限」は、セキュリティー管理者によって割り当てられます。これは、ユーザーがセッション中にファイルにアクセスでき、プロセスを開始できる、最高位のラベルです。すなわち、ユーザー認可上限は、ユーザーのアカウントラベル範囲の上限です。ログイン時に、ユーザーはセッション認可上限を選択します。「セッション認可上限」によって、ユーザーがアクセスできるラベルが決まります。セッション認可上限は、ユーザーがそのログインセッション中にファイルにアクセスでき、プロセスを開始できる「最小上限」を定めます。セッション認可上限は、ユーザー認可上限によって決定されます。

ラベル範囲

セキュリティー管理者は、「必須アクセス制御」(MAC) ポリシを強制するためにラベル範囲およびラベルセットを定義します。「ラベル範囲」は、認可上限によって上端が区切られ、最小ラベルによって下端が区切られるラベルのセットです。「ラベルリミット」は、ラベル範囲の上限です。「ラベルセット」には、互いに共通要素がない場合もある 1 つ以上の別個のラベルが含まれます。ラベルセットの中のラベルには、どちらが優位であるかという関係はありません。

ラベルの構成要素

ラベルには、階層的な格付け、およびゼロ個以上の階層的でないコンパートメントのセットが含まれます。格付けは「レベル」または機密レベルとも呼ばれます。「格付け」は、TOP SECRETUNCLASSIFIED など、ラベルの階層内の 1 つのレベルを表します。「コンパートメント」は、格付けと関連付けられ、人事 (HR) 部や営業部の個人情報など、システム内の別個の階層的でない領域の情報を表します。コンパートメントは、特定領域の情報を知る必要があるユーザーにのみアクセスを制限します。たとえば、SECRET 格付けのユーザーのみが、コンパートメントの関連リストによって指定される機密情報にアクセスできますが、その他の機密情報にはアクセスできません。格付けとコンパートメントはともに、ゾーンのラベルとゾーン内のリソースを表します。

label_encodings ファイルに指定されるテキスト形式の格付けは、次のとおりです。


CLASSIFICATIONS:
name= CONFIDENTIAL; sname= C; value= 4; initial compartments= 4-5 190-239;
name= REGISTERED; sname= REG; value= 6; initial compartments= 4-5 190-239;

label_encodings ファイルに指定されるテキスト形式のコンパートメントは、次のとおりです。


WORDS:
name= HR; minclass= C; compartments= 0;

ラベルの定義および形式についての詳細は、『Solaris Trusted Extensions ラベルの管理』および『コンパートメントモードワークステーションのラベル作成: エンコード形式』を参照してください。ラベル API については、第 2 章「ラベルと認可上限」を参照してください。

ラベル関係

ラベルを比較することは、プロセスのラベルをターゲットのラベルと比較することであり、ターゲットは機密ラベルの場合も認可上限ラベルの場合もあります。比較の結果に基づいて、プロセスはオブジェクトへのアクセスを許可または拒否されます。プロセスのラベルがターゲットのラベルより優位である場合にのみ、アクセスが許可されます。ラベル関係と優位性については、この節で説明します。例は、「2 つのラベル間の関係の判別」を参照してください。

機密レベル」は数値による格付けです。ラベルは、エンティティーの機密レベルを示し、ゼロ個以上のコンパートメントを含むことがあります。エンティティーとは、プロセス、ゾーン、ファイル、デバイスなどのことであり、ラベルを付けることができます。

ラベルには次のような型があって、相互に一定の関係があります。

ラベルの格付けおよびコンパートメントの指定には、label_encodings ファイルが使用されます。label_encodings(4) のマニュアルページを参照してください。

いずれかの型のラベルに別のラベル以上の機密レベルがある場合、そのラベルは別のラベルより優位であると言います。セキュリティーレベルに関するこの比較は、ラベルの格付けとコンパートメントに基づきます。優位ラベルの格付けは、別のラベルの格付け以上にする必要があります。さらに、優位ラベルには別のラベルのすべてのコンパートメントが含まれている必要があります。2 つのラベルが同等な場合は、「互いに優位である」と言います。

label_encodings ファイルの次の抜粋例では、REGISTERED (REG) ラベルは CONFIDENTIAL (C) ラベルより優位です。比較は各ラベルの value キーワードの値に基づきます。REG ラベルの value キーワードの値は数値的に C ラベルの value キーワードの値以上です。両方のラベルは PUBLIC (P) ラベルより優位です。

initial compartments キーワードの値は、格付けに最初に関連付けられるコンパートメントのリストを示します。initial compartments キーワードの各数字は「コンパートメントビット」であり、それぞれが特定のコンパートメントを表します。

CLASSIFICATIONS:
name= PUBLIC; sname= P; value= 1;
name= CONFIDENTIAL; sname= C; value= 4; initial compartments= 4-5 190-239;
name= REGISTERED; sname= REG; value= 6; initial compartments= 4-5 190-239;

次の label_encodings の抜粋では、REG HR ラベル (人事) が REG ラベルより優位です。REG HR ラベルには、REGISTERED 格付けと HR コンパートメントがあります。HR コンパートメントの compartments キーワードで 0 コンパートメントビットが設定されるので、REG HR 格付けはコンパートメント 04–5、および 190–239 セットとなり、REG 格付けによって設定されるコンパートメントより値が大きくなります。

CLASSIFICATIONS:
name= REGISTERED; sname= REG; value= 6; initial compartments= 4-5 190-239;
...
WORDS:
name= HR; minclass= C; compartments= 0;

オブジェクトにアクセスするために厳密優位が必要な場合があります。前の例で、REG ラベルは P ラベルより厳密に優位であり、REG HR ラベルは REG ラベルより厳密に優位です。ラベルを比較すると、REG ラベルは別の REG ラベルより優位です。

互いに優位でないラベルは、分離していると言います。「分離」ラベルは、会社内の部門を分けるために使用されることがあります。次の例では、REG HR ラベル (人事) は REG Sales ラベルから分離していると定義されます。これらのラベルは、それぞれのコンパートメントによって異なるコンパートメントビットが設定されるために、分離されます。


CLASSIFICATIONS:
name= REGISTERED; sname= REG; value= 6; initial compartments= 4-5 190-239;
...
WORDS:
name= HR; minclass= C; compartments= 0;
name= Sales; minclass= C; compartments= 1;

ラベル API については、「機密ラベル API」を参照してください。

Trusted Extensions API

この節では、このマニュアルで説明される次の 3 つの Trusted Extensions API の概要を説明します。

これらの Trusted Extensions API のほかに、Solaris OS で使用できるセキュリティー API を使用できます。Trusted Extensions で実行されるアプリケーションでは、その他のセキュリティー属性の操作が必要な場合があります。たとえば、ユーザーおよびプロファイルデータベースには、ユーザー、役割、承認、およびプロファイルに関する情報が格納されています。これらのデータベースは、だれがプログラムを実行できるかを制限できます。さまざまな Solaris プログラム、さらに他社製アプリケーションに特権をコーディングすることができます。

これらの Solaris OS セキュリティー API に関する詳細は、『Solaris セキュリティーサービス開発ガイド』の第 2 章「特権付きアプリケーションの開発」を参照してください。

Solaris OS は、データの所有者がデータへのアクセスをだれに許可するかを決定する「任意アクセス制御」(DAC) を提供します。Trusted Extensions ソフトウェアは、必須アクセス制御 (MAC) と呼ばれる追加のアクセス制御を提供します。MAC では、一般ユーザーは「セキュリティーポリシー」を指定したり上書きしたりできません。セキュリティー管理者がセキュリティーポリシーを設定します。

アプリケーションは Trusted Extensions API を使用して、ホスト、ゾーン、および役割のラベルを取得します。セキュリティーポリシーが許可する場合、API によってユーザープロセスまたは役割プロセスに対してラベルを設定できます。ゾーンまたはホストに対するラベルの設定は、管理上の手続きであり、プログラム化する手続きではありません。

ウィンドウラベルをカスタマイズするためにアプリケーションを作成できます。Trusted Extensions ソフトウェアは、ラベル作成の基本的なユーザーインタフェースをアプリケーションに追加するための Motif ベースのプログラミングインタフェースを提供します。ラベル作成インタフェースによって、ユーザーは有効な機密ラベルおよび認可上限を対話形式で作成できます。

ラベル API は不透明なラベルで機能します。「不透明なラベル」では、ラベルの内部構造は外に現れません。不透明なラベルを使用することによって、ラベルの内部構造が変化しても、API で作成した既存のプログラムが機能するようにできます。たとえば、ラベルの特定ビットを配置するためにラベル API を使用することはできません。ラベル API では、ラベルの取得およびラベルの設定が可能です。セキュリティーポリシーによって許可されている場合のみ、ラベルの設定を行えます。

ラベル API

ラベル、ラベル範囲、およびラベル制限は、Trusted Extensions が設定されているシステム上の情報にだれがアクセスできるかを決定します。

ラベル API を使用して、ラベル、ラベル範囲と制限、およびラベル関係に対してアクセス、変換、および比較を実行します。ラベルは別のラベルより優位になったり、別のラベルから分離したりできます。

label_encodings ファイルには、それぞれの Trusted Extensions 環境に適した機密ラベル、認可上限ラベル、ラベル範囲、およびラベル関係が定義されています。このファイルはラベルの表示も制御します。セキュリティー管理者が label_encodings ファイルの作成および管理を担当します。label_encodings(4) のマニュアルページを参照してください。

プロセスのラベルは、プロセスが実行されるゾーンによって決定されます。

すべてのオブジェクトはラベルに関連付けられ、ラベル範囲に関連付けられる場合もあります。オブジェクトは、定義されたラベル範囲内の特定ラベルでアクセスできます。ラベル範囲に関連付けられるオブジェクトは、次のとおりです。

ラベルについての詳細は、「ラベルの型」を参照してください。

アクセス制御の決定にラベルを使用する

MAC は、ラベルを持つアプリケーションを実行するプロセスのラベル、またはプロセスがアクセスしようとするオブジェクトのラベル範囲を比較します。MAC は、プロセスが下位ラベルを読み取るのを許可し、等位ラベルに書き込むのを許可します。


Label[Process] >= Label[Object]

マルチレベルポート (MLP) に対するプロセス制約は、複数ラベルの要求を待機し、要求の発信元に応答を送信できます。Trusted Extensions では、そのような応答は等位書き込みです。


Label[Process] = Label[Object]

ラベル API の型

機密ラベル API

機密ラベル API は、次のために使用できます。

この API については、第 2 章「ラベルと認可上限」を参照してください。

認可上限ラベル API

ユーザー、デバイス、およびネットワークインタフェースにはラベル範囲があります。範囲の上限は、実質上の認可上限です。範囲の上限と範囲の下限が同じである場合、範囲は単一のラベルです。

認可上限ラベル API は、次のために使用できます。

この API については、第 2 章「ラベルと認可上限」を参照してください。

ラベル範囲 API

ラベル範囲は、次に対して制限を設定するために使用します。

ラベル範囲は管理のために割り当てられます。ラベル範囲は、ユーザー、役割、ホスト、ゾーン、ネットワークインタフェース、プリンタ、およびその他のオブジェクトに適用できます。

次の方法によって、ラベル範囲に関する情報を取得できます。

この API については、第 2 章「ラベルと認可上限」を参照してください。

トラステッド X ウィンドウシステム API

トラステッド X ウィンドウシステム, Version 11 サーバーがログイン時に起動します。このサーバーは、信頼できるプロセス間通信 (IPC) パスを使用してワークステーションウィンドウシステムを処理します。ウィンドウ、プロパティー、セレクション、および ToolTalkTM のセッションが複数の機密ラベルで別個のオブジェクトとして作成されます。この複数の機密ラベルでの別個のオブジェクトの作成は、「多インスタンス化」と呼ばれます。Motif ウィジェット、Xt イントリンシクス、Xlib、およびデスクトップインタフェースによって作成されるアプリケーションは、セキュリティーポリシーの制約内で実行されます。この制約は X11 プロトコルに対する拡張によって強制されます。

第 6 章「トラステッド X ウィンドウシステム」では、「Trusted Extensions セキュリティーポリシー」に示されるセキュリティー属性情報にアクセスできるプログラミングインタフェースについて説明しています。このプログラミングインタフェースは、ラベルおよび認可上限をテキストに変換する場合にも使用できます。そのテキストは、トラステッド X ウィンドウシステムで表示するために指定した幅およびフォントリストによって制限できます。

トラステッド X ウィンドウシステムは、次のセキュリティー属性を格納します。

監査 ID 

トラステッドパスフラグ 

グループ ID 

トラステッドパスウィンドウ 

インターネットアドレス 

ユーザー ID 

プロセス ID 

X ウィンドウサーバー所有者 ID 

機密ラベル 

X ウィンドウサーバー認可上限 

セッション ID 

X ウィンドウサーバー最小ラベル 

トラステッドパスフラグは、トラステッドパスウィンドウとしてウィンドウを指定します。トラステッドパスウィンドウは、信頼できないプログラムによってシステムがアクセスされないように保護します。このウィンドウは、スクリーンストライプ、ログインウィンドウなどのように、常に最上位に位置するウィンドウです。

付録 B 「Solaris Trusted Extensions API リファレンス」 に、X11 トラステッド IPC パスを作成するために使用できる拡張機能がリストされています。

ラベルビルダー API

Trusted Extensions ソフトウェアは、アプリケーションのためにグラフィカルユーザーインタフェース (GUI) を作成できるラベルビルダー API を提供します。GUI はユーザー入力を受け取って、その入力から有効なラベルを作成します。

Solaris Trusted Extensions が構成されているシステム は、ラベル作成の基本的なユーザーインタフェースをアプリケーションに追加するための Motif ベースのプログラミングインタフェースを提供します。ラベル作成インタフェースによって、ユーザーは有効な機密ラベルおよび認可上限を対話形式で作成できます。このプログラミングインタフェースについては、第 7 章「ラベルビルダー API」を参照してください。

Trusted Extensions セキュリティーポリシー

機密ラベルはデータへのアクセスを制御し、データの格付けを管理します。すべてのプロセスおよびオブジェクトには、MAC の決定に使用される機密ラベルがあります。ラベルは、システムセキュリティーポリシーによって解釈される属性です。「システムセキュリティーポリシー」は、システムで処理される情報を保護するためにシステムソフトウェアによって強制される一連の規則です。

このあとの節で、Trusted Extensions セキュリティーポリシーがマルチレベルの操作、ゾーン、およびラベルに対してどのように影響を及ぼすかについて説明します。

マルチレベル操作

複数の機密レベルで実行される操作を作成する場合、次の問題を考慮する必要があります。

大域ゾーンのプロセスのみが指定ラベルでプロセスを開始できるので、複数の機密レベルで実行される操作は大域ゾーンによって制御されます。

大域ゾーンにおける下位書き込みポリシー

下位のラベルのオブジェクトを書き込むプロセスなどのサブジェクトの機能は「下位書き込み」と呼ばれます。大域ゾーンにおける下位書き込みポリシーは管理のために指定されます。大域ゾーンプロセスは ADMIN_HIGH ラベルで実行されるので、ほかのラベルに関連付けられている特定のファイルシステムは、大域ゾーンで読み取り/書き込みマウントが可能です。ただし、このような特別なファイルシステムマウントは、管理のための自動マウントマップで指定する必要があり、大域ゾーンオートマウンタによってマウントされなければなりません。このマウントには、エクスポートされたファイルシステムと同じラベルを持つゾーンのゾーンパス内にマウントポイントがなければなりません。そのマウントポイントは、ラベル付けされたゾーン内から可視ではあってはいけません。

たとえば、PUBLIC ゾーンに /zone/public のゾーンパスがある場合、/zone/public/home/mydir の書き込み可能なマウントポイントが許可されます。それに対し、/zone/public/root/home/mydir の書き込み可能なマウントポイントは、ラベル付けされたゾーンによってアクセスできるが、大域ゾーンによってはアクセスできないので許可されません。クロスゾーン NFS マウントは許可されません。すなわち、NFS マウントのファイルは、そのファイルシステムをマウントしたゾーンで実行されるプロセスによってのみアクセスできます。大域ゾーンプロセスは、標準の任意アクセス制御 (DAC) ポリシーに従って、そのようなファイルに下位書き込みできます。

ゾーンに関連付けられたローカルファイルシステムは、ファイル「アクセス権」とアクセス制御リスト (ACL) を使用する DAC によって、大域ゾーンプロセスによるアクセスから保護されます。各ゾーンのルート (/) ディレクトリの親ディレクトリは、root プロセスまたは file_dac_search 特権を表明するプロセスのみによってアクセス可能です。

一般に、大域ゾーンから下位書き込みできるかどうかは制限されています。下位書き込みが使用されるのは、通常、setflabel() インタフェースを使用してファイルが再格付けされる場合、または特権ユーザーが異なるゾーンでファイルマネージャーアプリケーション間をファイルをドラッグ&ドロップする場合のみです。

デフォルトのセキュリティー属性

デフォルトのセキュリティー属性は、ほかの「ホストタイプ」から Trusted Extensions ホストに届くメッセージに割り当てられます。この属性の割り当ては、ネットワークデータベースファイルの設定に従って行われます。ホストタイプ、サポートされるセキュリティー属性、およびネットワークデータベースファイルのデフォルト設定については、『Solaris Trusted Extensions 管理の手順』を参照してください。

デフォルトのネットワークポリシー

データを送受信するネットワーク操作の場合、デフォルトポリシーとして、ローカルプロセスと遠隔ピアが同じラベルを持っている必要があります。このポリシーは、ネットワークラベルが ADMIN_LOW である、大域ゾーンを含むすべてのゾーンに適用されます。ただし、このデフォルトのネットワークポリシーは、ファイルシステムをマウントするためのポリシーより柔軟性があります。Trusted Extensions には、デフォルトのネットワークポリシーを上書きするための管理インタフェースおよびプログラマチックインタフェースがあります。たとえば、システム管理者は、大域ゾーンまたはラベル付けされたゾーンに MLP を作成して、異なるラベルでの待機を可能にすることができます。

マルチレベルポート


注意 – 注意 –

マルチレベルポートを使用して MAC ポリシーに違反するには、十分な注意が必要です。このメカニズムを使用する場合、サーバーアプリケーションで MAC ポリシーが強制されていることを確認してください。


マルチレベルポート (MLP) は、tnzonecfg 管理データベースにリストされています。ゾーン内のプロセスは、net_bindmlp 特権を表明する場合、MLP にバインドできます。ポート番号が 1024 より小さい場合、net_privaddr 特権の表明が必要です。このバインドによって、プロセスは、バインドされる IP アドレスに関連付けられているすべてのラベルで接続を受け入れることができます。ネットワークインタフェースに関連付けるラベルは、tnrhdb データベースおよび tnrhtp データベースで指定します。ラベルの指定は、範囲、明示的列挙のラベル、または両方の組み合わせによって行えます。

MLP にバインドされている特権プロセスが TCP 要求を受信すると、要求元のラベルで応答が自動的に送信されます。UDP データグラムの場合、SO_RECVUCRED オプションによって指定されるラベルで応答が送信されます。

特権プロセスは、要求のラベルとほかのパラメータを比較することによって、より制限の多い MAC ポリシーを実装できます。たとえば、Web サーバーは、要求プロセスのラベルと URL で指定されるファイルのラベルを比較できます。getpeerucred() 関数を使用すると、遠隔ピアの資格が返されるので、遠隔ラベルを決定できます。同じホストのゾーンでピアが実行されている場合、ucred_get() ライブラリルーチンによって資格のフルセットが返されます。ピアがローカルであるか遠隔であるかにかかわらず、ucred_getlabel() 関数を使用することによって、ucred データ構造からピアのラベルにアクセスできます。このラベルは、bldominates() などの関数によってほかのラベルと比較できます。

ゾーンは単一レベルポートおよびマルチレベルポートにすることができます。「マルチレベルポートについて」を参照してください。

MAC 適用外ソケット

Trusted Extensions ソフトウェアには、下位ラベルの終端と通信するためにソケットを使用できるように指定する明示的なソケットオプション SO_MAC_EXEMPT があります。


注意 – 注意 –

SO_MAC_EXEMPT ソケットオプションは絶対に誤って使用しないでください。このソケットオプションを使用して MAC ポリシーを無効にする際には、十分に注意してください。このメカニズムを使用する場合、クライアントアプリケーションで MAC ポリシーが強制されていることを確認してください。


Trusted Extensions ソフトウェアは、SO_MAC_EXEMPT オプションの使用を次のように制限します。

詳細は、user_attr(4) のマニュアルページを参照してください。

ソケットがライブラリによって管理される場合など、このソケットオプションを明示的に設定するのは実用的でないことがあります。このような状況では、ソケットオプションを暗黙に設定できます。setpflags() システムコールによって、NET_MAC_EXEMPT プロセスフラグを設定できます。このプロセスフラグを設定するには、net_mac_exempt 特権も必要です。プロセスフラグが有効な間に開かれているすべてのソケットは、SO_MAC_EXEMPT ソケットオプションが自動的に設定されます。setpflags(2) および getpflags(2) のマニュアルページを参照してください。

変更または再コンパイルできないアプリケーションの場合、ppriv -M コマンドを使用して net_mac_exempt プロセスフラグをアプリケーションに渡します。この場合、そのアプリケーションによって開かれるすべてのソケットは SO_MAC_EXEMPT オプションが設定されます。ただし、アプリケーションの子プロセスには、このプロセスフラグや関連特権はありません。

SO_MAC_EXEMPT ソケットオプションを使用する必要がある場合、可能であれば必ずアプリケーションのソースコードを精査して修正してください。コードをそのように変更できない場合、またより安全な方法がない場合は、ppriv -M コマンドを使用することもできます。

SO_MAC_EXEMPT ソケットオプションは Solaris OS では多用されていません。このオプションは NFS クライアントによって使用されていました。NFS クライアントは、信頼できないオペレーティングシステムで異なるラベルで実行される NFS サーバーと通信する必要のある場合があります。NFS クライアントは MAC ポリシーを強制することによって、不適切な要求が認められないようにします。

Solaris OS では、NFS のサーバーコードとクライアントコードに MAC ポリシーが組み込まれて強制されるので、Solaris クライアントまたはサーバーと信頼できないクライアントまたはサーバーとの通信で MAC ポリシーが有効になります。信頼できないホストが Trusted Extensions を実行するシステムと通信できるようにするには、信頼できないホストのエントリが tnrhdb データベースにある必要があります。詳細は、『Solaris Trusted Extensions 管理の手順』「トラステッドネットワークデータベースの構成 (作業マップ)」を参照してください。


注 –

Trusted Extensions API を Solaris OS で使用する方法の例は、Solaris ソースコードを参照してください。OpenSolaris の Web サイト の左のナビゲーションバーにある「Source Browser」をクリックします。Source Browser を使用して Solaris のソースコードを検索します。


ゾーンとラベル

Trusted Extensions が設定されているシステムのすべてのオブジェクトは、ゾーンに関連付けられています。そのゾーンは「ラベル付けされたゾーン」と呼ばれます。ラベル付けされたゾーンは非大域ゾーンであり、一般ユーザーがアクセスできます。複数のラベルでクリアされるユーザーは、その各ラベルでゾーンにアクセスすることができます。

大域ゾーン」は、システムのセキュリティーポリシーを制御するファイルおよびプロセスを含む特別なゾーンです。大域ゾーンのファイルには、役割および特権プロセスのみがアクセスできます。

大域ゾーンのラベル

大域ゾーンはラベルの範囲に割り当てられます。その範囲は ADMIN_LOW から ADMIN_HIGH までです。ADMIN_HIGHADMIN_LOW は「管理ラベル」です。

ほかのゾーンと共有される大域ゾーンのオブジェクトには ADMIN_LOW ラベルが割り当てられます。たとえば、/usr/sbin、および/lib ディレクトリのファイルには ADMIN_LOW ラベルが割り当てられます。これらのディレクトリとその内容はすべてのゾーンで共有されます。これらのファイルおよびディレクトリは、通常、パッケージからインストールされ、パッケージまたはパッチの手順の場合を除いて一般に変更されません。ADMIN_LOW ファイルを変更するには、通常、プロセスがスーパーユーザーによって、またはすべての特権を持つユーザーによって実行される必要があります。

大域ゾーン専用の情報には ADMIN_HIGH ラベルが割り当てられます。たとえば、大域ゾーンのすべてのプロセス、および /etc ディレクトリのすべての管理ファイルには ADMIN_HIGH ラベルが割り当てられます。役割に関連付けられているホームディレクトリには ADMIN_HIGH ラベルが割り当てられます。ユーザーに関連付けられているマルチレベル情報にも ADMIN_HIGH ラベルが割り当てられます。「マルチレベル操作」を参照してください。大域ゾーンへのアクセスは制限されています。システムサービスおよび管理役割のみが大域ゾーンのプロセスを実行できます。

ラベル付けされたゾーン

非大域ゾーンは「ラベル付けされたゾーン」と呼ばれます。ラベル付けされたゾーンにはそれぞれ固有のラベルがあります。ラベル付けされたゾーン内のすべてのオブジェクトのラベルは同じです。たとえば、ラベル付けされたゾーンで実行されるすべてのプロセスのラベルは同じです。ラベル付けされたゾーンの書き込み可能なすべてのファイルのラベルも同じです。複数のラベルでクリアされるユーザーは、ラベル付けされたゾーンに各ラベルでアクセスできます。

Trusted Extensions は、ゾーン用のラベル API のセットを定義します。次の API は、ラベル付けされたゾーンに関連付けられているラベル、およびゾーン内のパス名を取得します。

これらの API の詳細は、「ゾーンのラベルへのアクセス」を参照してください。

ファイルのラベルは、ゾーンのラベル、またはファイルを所有するホストのラベルに基づきます。したがって、ファイルの再ラベル付けを行う場合、該当するラベル付けされたゾーンまたはラベル付けされたホストにファイルを移動する必要があります。ファイルの再ラベル付けのプロセスは、ファイルの「再格付け」とも呼ばれます。setflabel() ライブラリルーチンは、ファイルを移動することによってファイルの再ラベル付けを行います。ファイルの再ラベル付けのためには、プロセスが file_upgrade_sl 特権または file_downgrade_sl 特権を表明する必要があります。getlabel(2) および setflabel(3TSOL) のマニュアルページを参照してください。

特権の設定に関する詳細は、『Solaris セキュリティーサービス開発ガイド』の第 2 章「特権付きアプリケーションの開発」を参照してください。