Trusted Solaris 開発ガイド

第 11 章 プロセス間通信

Trusted Solaris 7 は、同じホスト上のプロセス間通信およびネットワークを介したプロセス間通信に対し、必須アクセス制御、任意アクセス制御、情報ラベルの浮上を実施します (情報ラベルの浮上がシステムで有効な場合)。この章では、Trusted Solaris 7 で利用できるプロセス間通信 (IPC) 機構の概要、およびアクセス制御、情報ラベルの浮上、特権の適用方法の概要を述べます。

使用されているプロセス間通信の種類によっては、数種類の特権が必要です。次に、使用すべき特権を知るためのガイドラインを示します。この章と後続の章では、特定の特権の詳細を述べています。すべての特権のリストとその説明は、priv_desc(4) マニュアルページを参照してください。

名前なしパイプ

名前なしパイプは、2 つ以上の関連したプロセス間で、データの片方向フローを形成します。パイプ上で通信するプロセスは、祖先のプロセスが共通なので、特権により属性が変更されないかぎり、それらはすべて親プロセスから継承した同じユーザー ID、グループ ID、および機密ラベルを持ちます。パイプが開かれる場合、必須または任意のアクセスチェックは行われません。また、パイプに対する読み取りや書き込みに対しても、アクセスチェックは行われません。

開いたパイプを使用したプロセスが特権を使用してそのユーザー ID、グループ ID、または機密ラベルを変更する場合、そのパイプ上で続いて行われる通信は、任意アクセス制御および必須アクセス制御をうまく回避します。そして、特権が与えられたプロセスは、自分自身で通信を制御する必要があります。

データを書き込んでいるプロセスの機密ラベルと情報ラベルは、パイプ内のデータの各バイトと対応しています。読み取りプロセスの情報ラベルは、読み取られるデータの各バイトごとに浮上します。セキュリティポリシーとアプリケーション特権の詳細は、該当するマニュアルページを参照してください。

名前付きパイプ (FIFO)

名前付きパイプ (FIFO) は、ファイルシステムエントリにより、関連のないプロセスが通信するためにそのパイプを探して開くことができる点を除き、名前なしパイプと同じです。名前付きパイプが開かれると、任意アクセス制御と必須アクセス制御が実行され、名前付きパイプのアクセス権ビットと機密ラベルに基づき FIFO 特殊ファイルが作成されます。

データを書き込むプロセスの機密ラベルと情報ラベルは、パイプ内で送られるデータの各バイトと対応しています。読み取りプロセスの情報ラベルは、読み取られるデータの各バイトごとに浮上します。名前付きパイプとの間の書き込みと読み取りに対する必須アクセスポリシーは、同位読み取りと同位書き込みです。セキュリティポリシーとアプリケーション特権の詳細は、該当するマニュアルページを参照してください。

仮想端末デバイス (PTY)

仮想端末デバイス (PTY) には、コントローラとスレーブのペアで動作する専用のデバイスファイルが自動的に割り当てられます。ペアの一方を開くプロセスは、ペアの他方を開くプロセスと通信します。PTY ペアは、端末インタフェースをエミュレートします。PTY は、cmdtool(1) ウィンドウや、遠隔ログインサービスのサポートに使用されます。PTY が開かれる場合、任意アクセス制御と必須アクセス制御が実行されます。

コントローラデバイスに書き込まれるデータは、消去や終了のような端末入力処理が実施された後に、スレーブデバイスから読み取られます。スレーブデバイスに書き込まれるデータは、NL から CR-LF への変換のような端末出力処理が実施された後に、コントローラデバイスから読み取られます。PTY との間の読み取りと書き込みの必須アクセス制御は、下位読み取りと上位書き込みです。セキュリティポリシーとアプリケーション特権の詳細は、該当するマニュアルページを参照してください。

シグナル

シグナルは、非同期イベントをプロセスに知らせます。任意アクセスポリシーにより、送信側の実ユーザー ID または実効ユーザー ID は、受信側の実ユーザー ID または実効ユーザー ID と等しくなければなりません。必須アクセスポリシーは、下位読み取りと上位書き込みです。シグナルは極めてわずかな情報しか転送しないため、シグナルを受け取るプロセスの情報ラベルは浮上しません。セキュリティポリシーとアプリケーション特権の詳細は、該当するマニュアルページを参照してください。

プロセストレース

プロセストレースは、アドレス空間とレジスタに対する読み取りと書き込み、制御フローの変更、ブレークポイントの設定などによって、1 つのプロセスが別のプロセスの内容を操作するデバッグツールです。任意アクセスポリシーにより、それらのプロセスの実効ユーザー ID は等しくなければなりません。別のプロセスの内容を操作する必須アクセスポリシーは、同位読み取りと同位書き込みです。セキュリティポリシーとアプリケーション特権の詳細は、該当するマニュアルページを参照してください。

マップメモリー

マップメモリーを使用すると、プロセスは、ファイル内容の一部またはすべてをそのアドレス空間にマップできます。ファイルがマップされると、マップメモリー領域に対する機械命令によるアクセスを介して、ファイル内容のアドレスを直接指定することができます。プロセスは、複数のファイルをマップできます。また、同じファイルを、複数のプロセスにマップできます。

任意アクセスチェックと必須アクセスチェックは、ファイルが開かれる場合に行われます。ファイルが読み取り目的だけで開かれる場合は、そのファイルの属性が書き込みアクセスを許可するときでも、読み取り専用としてマップできます。マップメモリー領域の情報ラベルは、その領域に書き込みアクセスによってアタッチされたすべてのプロセスの情報ラベルによって常に浮上します。プロセスの情報ラベルは、それがアタッチされるマップメモリー領域の情報ラベルによって常に浮上します。セキュリティポリシーとアプリケーション特権の詳細は、該当するマニュアルページを参照してください。

System V IPC

Trusted Solaris 7 は、System V IPC をサポートし、System V IPC オブジェクトの CMW ラベル、機密ラベル、情報ラベル、アクセス制御リスト (ACL) を管理するインタフェースが用意されています。

System V IPC オブジェクトを作成するプロセスの機密ラベルと情報ラベルは、オブジェクトに書き込まれるデータの各バイトと対応しています。必須アクセスポリシーは、同位読み取りと同位書き込みです。特権を持つプロセスは、そのプロセスの機密ラベル以外の機密ラベルで System V IPC オブジェクトにアクセスし、情報ラベルの浮上を停止できます。System V IPC オブジェクトのインタフェース、セキュリティポリシー、特権の詳細については、第 12 章「System V のプロセス間通信」を参照してください。

通信終端

Trusted Solaris 7 は、次に示すソケット型機構を使用して、通信終端上のプロセス間通信をサポートします。

この節では、ソケット通信機構と関連するセキュリティポリシーの概要を述べます。セキュリティポリシーとアプリケーション特権の詳細は、該当するマニュアルページを参照してください。

マルチレベルポート

Trusted Solaris 7 は、シングルレベルとマルチレベルのポートをサポートします。マルチレベルポートは任意の機密ラベルでデータを受信でき、シングルレベルポートは指定された機密ラベルでしかデータを受信できません。

Berkeley ソケットと TSIX ライブラリを使用してマルチレベルポート接続を確立する短いアプリケーション例は、第 13 章「トラステッドセキュリティ情報交換ライブラリ」「クライアントサーバーアプリケーション」を参照してください。


注 -

接続がマルチレベルの場合、そのアプリケーションがある機密レベルで接続を行い、別の機密レベルでデータの送受信を行うことがないように気を付けてください。このような設定は、承認のない宛先にデータが届く原因となります。


ソケットと TLI

Trusted Solaris 7 は、シングルレベルポートとマルチレベルポート上で、Berkeley ソケットとトランスポートレイヤーインタフェース (TLI) を使用したネットワーク通信をサポートします。システムコールの UNIX アドレスファミリは、完全に解決されたパス名によって指定された特殊ファイルを使用して、同じホスト上にプロセス間接続を確立します。システムコールのインターネットアドレスファミリは、IP アドレスとポート番号を使用して、ネットワーク上のプロセス間接続を確立します。

PAF_DISKLESS_BOOT プロセス属性フラグは、ディスクレスブートサーバーをサポートします。このフラグがオンの場合、ネットワークパケットヘッダー内のセキュリティ属性情報は送信されません。プロセスの属性フラグの取得と設定は、第 2 章「プログラミングインタフェースの概要」を参照してください。

UNIX アドレスファミリ

UNIX アドレスファミリのインタフェースでは、1 つのファイルに対し 1 つのサーバーバインド (結合) しか確立できません。マルチレベルポート接続を行う場合、サーバープロセスの有効セットに net_mac_read 特権が必要です。シングルレベルのポート接続が確立される場合には、サーバープロセスはソケットに対する必須同位読み取り権を必要とし、クライアントプロセスは必須同位書き込み権を必要とします。両プロセスとも、ファイルに対する必須アクセス権と任意アクセス権が必要です。ファイルに対するアクセスが拒否される場合、拒否されたプロセスは、有効セットに適切なファイル特権を入れてアクセス権を取得する必要があります。

サーバープロセスは、同じ MLD 内の複数の SLD にある同じ名前のファイルを使用して、複数のシングルレベルバインドを確立できます。この方法は、マルチレベルポート接続と異なり、並列のシングルレベルポート接続 (多重インスタンス化されたポート) を設定し、指定されたシングルレベルディレクトリに対する任意アクセスまたは必須アクセスが拒否されないかぎり特権を必要としません。第 8 章「マルチレベルディレクトリ」を参照してください。

インターネットアドレスファミリ

インターネットアドレスファミリでは、プロセスは、特権を持つポート番号または特権のないポート番号に対する、シングルラベルまたはマルチラベルの接続を確立できます。特権を持つポート番号にマルチレベルポート接続を行う場合には、net_mac_read 特権のほかに net_priv_addr 特権が必要です。

TSIX

トラステッドセキュリティ情報交換 (TSIX) ライブラリには、着信メッセージのセキュリティ属性を受け取るインタフェースや、発信メッセージのセキュリティ属性を変更するインタフェースが用意されています。メッセージには、本来、その発信プロセスのセキュリティ属性情報が付いています。TSIX ライブラリを使用すると、メッセージのセキュリティ属性を直接変更することも、メッセージが送信される通信終端上でセキュリティ属性を変更することも、あるいはこの両方を実施することもできます。プログラミングインタフェースと関連する特権の詳細は、第 13 章「トラステッドセキュリティ情報交換ライブラリ」を参照してください。

RPC

Trusted Solaris 7 の遠隔手続き呼び出し (RPC) 機構は、Berkeley インターネットソケットとトラステッドセキュリティ情報交換 (TSIX) ライブラリで構築されます。RPC 機構は、トランスポートレイヤーインタフェース (TLI) をサポートします。RPC を使用すると、クライアントプロセスに代わってサーバープロセス側で手続きを呼び出し、メッセージのセキュリティ属性情報を処理できます。RPC プログラミングインタフェースと関連する特権の詳細は、第 14 章「遠隔手続き呼び出し」を参照してください。