#include <errno.h>
このセクションでは、Trusted Solaris 環境の全システムコールについて説明します。
Trusted Solaris 環境に固有で、ここから派生したコール (たとえば、secconf(2) など)。secconf()システムコールは、設定時に昇格されたファイル名を隠す変数など、構成可能なセキュリティ関連のシステム変数の値をプロセスが決定できるようにします。
Trusted Solaris のセキュリティポリシーに従って動作するように変更されたシステムコールのことです (たとえば、link(2))。変更されたシステムコールのマニュアルページは書き直され、Trusted Solaris 環境でのシステムコールの動作に当てはまらない情報は削除されました。変更されたマニュアルページには、追加された新しい機能や引数などの説明も追加されています。
Solaris 7 リリースから変更されていない SunOS 5.7 システムコール (たとえば、exit() など)。
印刷版マニュアルには、Trusted Solaris 環境で変更されたか、または Trusted Solaris 環境から派生したシステムコールだけが含まれます。変更のない SunOS 5.7 マニュアルページの印刷版は、SunOS 5.7 リファレンスマニュアル にあります。
システムコールのマニュアルページで、呼び出しプロセスが特定の (1 つ以上) 特権を持たなければならない、または表明しなければならないと記述されているとき、次のようなことを意味します。
(1 つ以上) 特権は、許容された特権として実行可能プログラムで利用できなければなりません。
特権は、次に示すどちらかの方法で、プロセスの有効な特権セットに存在しなければなりません。
親プロセスから継承される
実行可能プログラムに強制された特権として割り当てられる
大多数のシステムコールには、エラー条件が返される可能性があります。通常はありえない値が返されることによって、エラー条件の発生が示されます。その値には -1 または NULL ポインタが使われるのが一般的です。 詳細については個々のシステムコールの説明文を参照してください。 またエラー発生時には、外部変数 errno にエラー番号が与えられます。なおシステムコールが正常に終了しても errno はクリアされないので、この変数はエラーが返されたときにだけ確認してください。
マルチスレッドアプリケーションの場合、_REENTRANT フラグを コンパイル時 のコマンド行 (-D_REENTRANT) で定義してください。_REENTRANT フラグを定義すると、errno はマクロになり、スレッド毎に個別の errno を保持できるようになります。また、この errno は代入文の左辺、右辺のどちらにも使用できるので、 変数と同様に扱えます。
アプリケーションとしては、_lwp_*() 関数ではなく 結合スレッドを使用してください (thr_create(3T) 参照)。LWP (軽量プロセス) を直接使用することはお勧めできません。ライブラリは、LWP ではなくスレッドで使用した場合にのみ 安全であるためです。
本セクション中の各システムコールの説明では、そのコールが返す可能性があるエラー番号をすべて記述しています。各エラー番号に対応するエラー名 (<errno.h> 中に定義) とその意味を以下に説明します。
適切な特権が表明されていません。
このエラーは、通常、その所有者や適切な特権を持つプロセスを除き、禁止された方法でファイルを変更しようとしたことを示します。また、特権を必要とするようなことを通常のユーザが行おうとしたときにも、このエラーが戻されます。「定義」の項「特権」を参照してください。
ファイルまたはディレクトリが存在しません。
指定された名前を持つファイルが存在すべきなのに存在しない、またはパス名中のいずれかのディレクトリが存在しません。
プロセス、LWP、あるいはスレッドが存在しません。
指定された PID、LWPID_t、あるいは thread_t に該当するプロセスがシステム上に存在しません。
システムコールに割り込みがかかりました。
システムサービス関数の実行中に、ユーザーがキャッチするよう指定した 非同期シグナル (割り込みや終了など) が発生しました。シグナルの処理が終了した後に、システム関数の実行が再開されると、あたかもその関数へのコールがこのエラーを返したかのように見えます。
マルチスレッドアプリケーションでは、他のスレッドまたは LWP が fork(2) を呼び出すと、EINTR が返されることがあります。
I/O エラー。
物理的な I/O エラーが発生しました。場合によっては、I/O エラーを実際に起こしたコールの直後のコールに対してこのエラーが返されることがあります。
デバイスまたはアドレスが存在しません。
特殊ファイルへの I/O を指定したが、該当するサブデバイスが存在しない、または該当するサブデバイスがデバイスの限度を超えて存在します。またこのエラーは、たとえばテープデバイスがオンライン状態にない、あるいはディスクデバイスにディスクパックがロードされていないような場合にも返されます。
引数リストが長すぎます。
exec ファミリの関数に対して、ARG_MAX が示すバイト数より長い引数リストが渡されました (exec(2) 参照)。引数リストの最大長は、実際の引数リストの長さと環境がエクスポートしたシェル変数の長さの合計値です。
exec フォーマットエラー。
ファイル実行要求が出され、アクセス権は適切ですが、 ファイルのフォーマットが正しくありません (a.out(4) 参照)。
ファイル番号が間違っています。
ファイル記述子が示すファイルがオープンされていません。あるいは書き込み専用にオープンされたファイルへ読み取り要求 (read(2)) が 発行されました (または逆に、読み取り専用にオープンされたファイルへの書き込み要求 ( write(2)) が発行されました)。
子プロセスができていません。
プロセスが wait(2) 関数を実行しましたが、存在するあるいは待つべき子プロセスがありませんでした。
プロセス数、あるいは LWP が限界です。
たとえばシステムのプロセステーブルが満杯またはユーザーがこれ以上のプロセスを生成することを許されていないなどの理由で fork(2) 関数の実行が失敗しました。またはメモリー不足あるいはスワップ領域不足のためコールが失敗しました。
領域が足りません。
brk()、sbrk() (brk(2) 参照)、または exec ファミリの関数のどれか 1 つを実行中に、システムが 割り当て可能な限度を超えた領域をプログラムが要求しました。 割り当て可能領域の最大値は一時的な値ではなく、システムパラメータとして定義されています。一部のアーキテクチャでは、テキストセグメント、データセグメント、またはスタックセグメントを構築するのに必要なセグメンテーションレジスタが多すぎる場合、および fork(2) 関数の実行中にスワップ領域が不足した 場合にも、このエラーが発生します。 リモート ファイルシェアリング (RFS) に関連したリソース上でこのエラーが発生した場合、一時的なメモリー不足を表す場合もあります (システムコールが発行されたときのシステムの動作により異なります)。
アクセス権が与えられていません。
この種類の DAC または MAC の制限による失敗は、(1 つ以上の) 適切な無効化特権が呼び出し元プロセスで表明できる場合 (つまり、否定されたアクセスの種類によって、使用すべき特権が判定できる場合)、セキュリティ管理者の自由裁量で回避できます。「定義」の項の「任意アクセス制御」、「ファイルのアクセス権」、 「必須アクセス制御」、「特権」、「セキュリティポリシー」を参照してください。
アドレスが間違っています。
ルーチンの引数を使おうとしたときハードウェアのエラーを検出しました。たとえば、ポインタ引数を用いるルーチンに不当なアドレスが与えられたとき、(その状態をシステムが検出できるなら) errno は EFAULT に設定される可能性があります。不当なアドレスをどのように検出するかは システムにより異なります。したがってあるシステムにおいては、誤ったアドレスをルーチンに渡した場合の結果は予測できない場合があります。
ブロック型デバイスを指定しなくてはなりません。
ブロック型デバイスを指定すべきところ (たとえば mount(2) 関数の呼び出し) に、非ブロック型デバイスまたはファイルが記述されていました。
デバイスは使われています。
すでにマウントされているデバイスをマウントしようとしました。または現在稼動中のファイル (オープンされているファイル、現在のディレクトリ、マウントされているファイル、使用中のテキストセグメントなど) が存在しているデバイスをアンマウントしようとしました。 現在すでに使用可能なアカウンティングを さらに使用可能にしようとした場合にも このエラーが発生します。このエラーが発生したときは、該当するデバイスやリソースは使用不可です。 すでにロックされていることを示す場合に、ミューテックス (mutex)、セマフォ、条件付き変数、および読み取り / 書き込みロックによって、EBUSY が使用されます。また、プロセッサ制御関数、P_ONLINE も EBUSY を使用します。
ファイルが存在します。
存在しないファイル名を記述すべきところ (たとえば link(2) 関数の呼び出し) に、既存のファイル名を指定しました。
デバイスにまたがるリンクになります。
別のデバイス上のファイルへのハードリンクを試みました。
デバイスが存在しません。
あるデバイスに対して不当な操作を試みました (たとえば 書き込み専用デバイスへの読み取り要求など)。
ディレクトリではありません。
ディレクトリ名を指定すべきところ (たとえば chdir(2) 関数への引数やパスの接頭辞) に、ディレクトリ でない名前を指定しました。
ディレクトリです。
ディレクトリに書き込もうとしました。
引数が正しくありません。
signal(3C) または kill(2) 関数の呼び出しに未定義のシグナルが指定されるような 不当な引数が指定されました ( たとえばマウントされていないデバイスを アンマウントしようとした場合など)。
ファイルテーブルがオーバフローしました。
システムのファイルテーブルが満杯、つまり SYS_OPEN が示す個数のファイルがオープンされていて、現在はこれ以上のファイルはオープンできません。
オープンされたファイルが多すぎます。
あるプロセスが、一度に OPEN_MAX の値を超える数のファイル記述子をオープンしようとしました。
デバイスへの ioctl が正しくありません。
特殊文字デバイス以外のファイルを指定して ioctl(2) 関数を呼び出しました。
テキストファイルは使われています (旧仕様)。
現在書き込み用にオープンされています。あるいはプロシージャのみからなるプログラムを 実行しようとしました。あるいは現在実行中のプロシージャのみからなるプログラムを 書き込み用にオープンまたは削除しようとしました (このエラーは旧仕様です)。
ファイルが大きすぎます。
ファイルのサイズが RLIMIT_FSIZE が示す値を超えました。 つまり、ファイルシステムがサポートするファイルサイズを超えているか、または、ファイル記述子のオフセット最大値を超えています。 後述の「定義」の「ファイル記述子」の項を参照してください。
デバイス上の容量が足りません。
通常ファイルへの書き込みまたは ディレクトリエントリの生成を試みましたが、デバイス上の使用可能な容量が十分ではありませんでした。 システム上にレコードエントリが残っていないので、fcntl(2) 関数実行時に レコードロックの設定または削除ができませんでした。
シークが正しくありません。
lseek(2) 関数の呼び出しがパイプに対して発行されました。
読み取り専用のファイルシステムです。
読み取り専用でマウントされたデバイス上で、ファイルまたはディレクトリを更新しようとしました。
リンクが多すぎます。
LINK_MAX が示す値を超える数のリンクを生成しようとしました。
パイプが中断されました。
データを読み込むプロセスが存在しない パイプで書き込みを行おうとしました。この状態が発生すると通常はシグナルが発行され、そのシグナルが無視されるとこのエラーが返されます。
数学引数が関数の領域外です。
数学パッケージ (3M) 中の関数の引数が、その関数の領域外でした。
数学関数結果が表示不可能です。
数学パッケージ (3M) 中の関数の結果の値を、当該マシンの精度では表すことができませんでした。
要求されたタイプのメッセージがありません。
指定されたメッセージ待ち行列に存在しない種類のメッセージを受信しようとしました ( msgrcv(2) 参照)。
識別子が取り去られています。
このエラーは、ファイルシステムの名前スペースから 識別子が削除されたために実行を再開するプロセスに対して返されます ( msgctl(2)、semcl(2)、および shmctl(2) 参照)。
チャネル番号が範囲外です。
レベル 2 が同期していません。
レベル 3 停止
レベル 3 リセット
リンク番号が範囲外です。
プロトコルドライバが装備されていません。
構造体がありません。
レベル 2 停止
デッドロック状態。
デッドロック状態を検出したので回避しました。このエラーは、ファイルおよびレコードのロック処理 に対して発生します。また、 ミューテックス、セマフォ、条件付き変数、および読み取り / 書き込みロック についても、このエラーは発生します。
レコードロックが使用できません。
使用可能なロックが存在しません。システムのロックテーブルが満杯です ( fcntl(2) 参照)。
命令が取り消されました。
関連する非同期 命令が終了前に取り消されました。
サポートしません。
このバージョンのシステムではこの機能をサポートしません。将来のバージョンでサポートします。
ディスクの制限を超えました。
ユーザーに配分されたディスクブロックを使い果たしたため、通常ファイルへの write(2)、またはディレクトリやシンボリックリンクの作成、またはディレクトリエントリの作成に失敗しました。あるいは ユーザーに配分された i ノードを使い果たしたため、新しくファイルを作成するための i ノードの割り当てに失敗しました。
予約領域
ストリームデバイスではありません。
STREAMS デバイスではないファイル記述子に対して putmsg(2) または getmsg(2) システムコールを試みました。
データがありません。
タイマーが終了しました。
STREAMS ioctl(2) コール用にタイマーに設定した時間が経過しました。このエラーの原因はデバイスにより異なり、ハードウェア上のエラー、ソフトウェア上のエラーのどちらも考えられます。 また、設定した時間が 要求した動作に対して短すぎた、という場合も考えられます。ioctl() 動作の状態は確定できません。これは _lwp_cond_timedwait(2) あるいは _lwp_cond_wait(2) の場合にも返されます 。
ストリーム資源が使い尽くされました。
STREAMS の open(2) 処理において、STREAMS 待ち行列または STREAMS ヘッドのデータ構造体が使用不可能でした。このエラー状態は一時的なもので、他のプロセスがリソースを解放すれば回復できる場合があります。
マシンがネットワーク上にありません。
リモートファイルシェアリング (RFS) 固有のエラーです。立ち上げ時にネットワークに接続するよう操作しなかったマシン上で、リモートリソースのアドバタイズ、アンアドバタイズ、マウント、またはアンマウントを試みました。
パッケージがインストールされていません。
インストールされていないパッケージからのコールを使おうとしました。
オブジェクトがリモート側にあります。
リモートファイルシェアリング (RFS) 固有のエラーです。ローカルマシン上にないリソースをアドバタイズしようとしました。あるいはリモートマシン上のデバイス (またはパス名) をマウントまたはアンマウントしようとしました。
リンクが切断されました。
リモートファイルシェアリング (RFS) 固有のエラーです。リモートマシンと接続していたリンク (仮想回線) が切断されてしまいました。
アドバタイズエラー。
リモートファイルシェアリング (RFS) 固有のエラーです。すでにアドバタイズ済みのリソースをアドバタイズしようとしました。あるいはアドバタイズ中のリソースが存在しているのに RFS を停止しようとしました。あるいは アドバタイズ中のリソースを強制的にアンマウントしようとしました。
Srmount エラー。
リモートファイルシェアリング (RFS) 固有のエラーです。リモートマシンがマウントしたリソースが存在しているのに RFS を停止しようとしました。または、現在リソースをマウントしているリモートマシンが含まれていない クライアントリストを使って、リソースを再アドバタイズしようとしました。
送信時に通信エラーが発生しました。
リモートファイルシェアリング (RFS) 固有のエラーです。現プロセスがリモートマシンからのメッセージを待っているときに、仮想回線が異常終了しました。
プロトコルエラー。
何らかのプロトコルエラーが発生しました。このエラーはデバイス固有のものですが、 通常はハードウェアのエラーには起因しません。
エラー 76。
リモートファイルシェアリング (RFS) 固有のエラーです。プロセスがマウントポイントから転送し直したことを、サーバーがクライアントに伝える手段として用います。
データメッセージではありません。
STREAMS デバイスに対する read(2)、getmsg(2)、または ioctl(2) I_RECVFD コール中に、処理できない何かが待ち行列の先頭に置かれました。その何かとは、以下に示すようにコールによって異なります。
制御情報、または渡されたファイル記述子
渡されたファイル記述子
制御情報またはデータ情報
ファイル名が長すぎます。
パス名引数の長さが PATH_MAX が示す最大長を超えていました。あるいは _POSIX_NO_TRUNC が有効なときにパス名を構成する名前の 1 つが NAME_MAX が示す値より長すぎました。最大長に関しては limits(4) を参照してください。
定義されたデータ形式に関して、値が大きすぎます。
名前 (name) がネットワーク上に複数存在します。
指定された名前がネットワーク上で一意ではありませんでした。
ファイル記述子が正しくありません。
ファイル記述子がオープン済みのファイルを示していません。または 書き込み専用にオープンされたファイルに 対して読み取り要求を発行しました。
リモート側のアドレスが変更されています。
必要な共有ライブラリが見つかりません。
共有スタティックライブラリを必要とする a.out を実行しようとしましたが、ライブラリが 存在しませんでした。あるいはユーザーが そのライブラリを使うための正しいアクセス権を 持っていませんでした。
共有ライブラリが壊れています。
共有スタティックライブラリを必要 (リンク対象) とする a.out を実行しようとしましたが、exec がそのライブラリをロードできませんでした。 原因としては、ライブラリが壊れている可能性があります。
a.out ファイルの .lib 部分が壊れています。
共有スタティックライブラリを必要 (リンク対象) とする a.out を実行しようとしましたが、 a.out 中の .lib セクションに不当なデータを検出しました。 .lib セクションは、どの共有ライブラリが必要かを exec に伝える役割を果たします。エラーの原因としては、a.out が壊れている可能性があります。
システム限界数以上の共有ライブラリをリンクしようとしています。
現在システムに定義されている許容最大値を超える数の 共有ライブラリを必要とする a.out を実行しようとしました。詳細は、「NFS の管理」を参照してください。
共有ライブラリは直接実行 (exec) できません。
共有ライブラリを直接実行しようとしました。
エラー 88。
不当なバイトシーケンスを検出しました。複数の文字を 1 文字として扱ってください。
動作を適用できません。
パス名の確認中に見つかったシンボリックリンクの数が MAXSYMLINKS を超えました。
システムコールは再開できます。
割り込みを受けたシステムコールは再起動する必要があります。
パイプ/FIFO の場合、ストリームヘッドで休止できません。
ストリームのパイプエラー (外部からは見えません)。
ディレクトリが空ではありません。
ユーザーが多すぎます。
ソケットに対する操作がソケット以外に適用されました。
宛先のアドレスが必要です。
トランスポートの終端における動作で、必要な宛先アドレスが省略されていました。
メッセージが長すぎます。
トランスポートプロバイダに送信されたメッセージの長さが、内部メッセージバッファのサイズまたはネットワーク上の制限値を超えていました。
プロトコルの型がソケット用ではありません。
指定されたプロトコルは、要求されたソケットのタイプのセマンティクスをサポートしていません。
プロトコル使用不可能。
プロトコル用オプションの獲得または設定時に、不当なオプションまたはレベルが指定されました。
プロトコルがサポートされていません。
指定されたプロトコルはシステム中に定義されていません。またはそのプロトコル用のバージョンが導入されていません。
ソケットの型がサポートされていません。
指定されたソケットはシステム中に定義されていません。またはそのソケット用のバージョンが導入されていません。
動作がトランスポートの終端でサポートされていません。
たとえばデータグラムのトランスポートの 終端で、接続を受け付けようとしました。
プロトコルファミリがサポートされていません。
指定されたプロトコルファミリはシステム中に定義されていません。またはそのプロトコルファミリ用のバージョンが導入されていません。この状態はインターネットプロトコルに適用されます。
プロトコルファミリがアドレスファミリをサポートしていません。
要求されたプロトコルと互換性のないアドレスが使用されました。
アドレスがすでに使われています。
現在使用中のアドレスを使おうとしましたが、プロトコルはこのような指定を許していません。
要求されたアドレスを割り当てられません。
現在のマシン上に存在しないアドレスを使ってトランスポートの終端を生成しようとしました。
ネットワークがダウンしています。
指定動作実行中にネットワークのダウンを検出しました。
ネットワークに到達できません。
到達できないネットワークに対する動作を試みました。
リセットによりネットワーク接続が中断されました。
接続先のホストがクラッシュしてリブートされました。
ソフトウェアによって接続が中断されました。
ホストマシン内部で接続を異常終了しました。
接続が相手側によってリセットされました。
相手側により接続が強制的に切断されました。通常この状態は、タイムアウトまたはリブートによりリモートホストとの接続が失われたときに発生します。
バッファ領域がありません。
バッファの領域が不十分または待ち行列が満杯のため、トランスポート終端またはパイプにおける動作が実行されませんでした。
トランスポートの終端は接続されています。
すでに接続されているトランスポート終端 に対して接続要求が発行されました。または接続されているトランスポート終端上で、接続済みの宛先が指定された sendto(3N) または sendmsg(3N) 要求が発行されました。
トランスポートの終端が接続されていません。
トランスポート終端が接続されていません。さらに (データグラム送信の場合) アドレスが指定されていないので、データの送信要求または受信要求は受け付けられません。
ソケットのシャットダウン後で送信できません。
トランスポート終端がシャットダウン済みなので、データ送信要求は受け付けられません。
参照が多すぎます。つなぎ合わせられません。
接続が時間切れです。
相手側が一定時間内に正しい応答を返さなかったので、connect(3N) 要求、または send(3N) 要求は 実行できませんでした。 あるいは、ファイルが soft オプションでマウントされた NFS ファイルシステム上に存在するため、 write(2) 要求、または fsync(3C) 要求に失敗しました。
接続が拒否されました。
相手側マシンにより拒否されたので、接続要求は実行できませんでした。 通常この状態は、リモートホストでは稼動していない サービスへ接続しようとした場合に発生します。
ホストがダウンしています。
宛先ホストがダウンしたため、トランスポートプロバイダの処理が失敗しました。
ホストへの経路がありません。
到達不可能なホストに対して、トランスポートプロバイダの処理を試みました。
すでに動作中です。
非ブロック型オブジェクトに対して処理を試みましたが、そのオブジェクトはすでに何らかの動作を実行中でした。
動作続行中です。
非ブロック型オブジェクトに対して、長時間を要する処理 (たとえば connect()) を試みました。
NFS のファイルハンドルが無効です。
「アクセス制御リスト」を参照してください。
互換性の目的のために作成されたもの。chmod(1) でファイルまたはディレクトリのアクセス権を変更するときに、既存の ACL エントリを破壊せずにマスクします。この後、chmod をもう一度実行して、元のアクセス権に復元する場合、マスクされた名前は復元できます
所有者がファイルまたはディレクトリに指定できるエントリのリストに基づく任意アクセス制御の一種。アクセス制御リスト (ACL) によって、任意の数の個人またはグループのアクセス権を制限または許可することによって、標準の UNIX のアクセス権ビットよりもきめ細かい制御を行うことができます。
実際は範囲でなく、特定のラベルの集まり。Trusted Solaris 環境における 2 種類の認可範囲についての詳細は、「ユーザ認可範囲」と「システム認可範囲」を参照してください。
制御端末との接続を確立したセッションにおける、フォアグラウンドプロセスグループを除くすべてのプロセスグループ。
情報ラベルと機密ラベルの両方を持つ構造。この構造によって、情報ラベルと機密ラベルを 1 つのかたまりとして、つまり、2 つのラベルが結合されたものを 1 つの単位として、プログラムで変換および操作できます。
機密ラベル、情報ラベル、認可上限の中で上下関係を示す部分。それぞれを示すラベルには、格付けが 1 つだけ含まれています。各格付けは外部用の名前 (テキスト文字列) と内部用の番号 (整数) を持ち、階層中で、最下位の格付けには最下位の番号が割り当てられ、残りの格付けには他の番号が上下関係に従って割り当てられます。ファイルまたはディレクトリに割り当てられた機密ラベルでは、格付けは、ファイルまたはディレクトリに含まれている情報の保護レベルを示します。保護レベルは、情報の機密度に基づいて相対的に決められます。ユーザとユーザのプロセスに割り当てられた認可上限では、格付けは信用のレベルを示します。
各プロセスには認可上限が割り当てられています。認可上限は格付けとコンパートメントのセットから構成され、機密ラベルと似ています。プロセスの認可上限は、プロセスがアクセス権を持つラベルの上限です。プロセスは、自分の機密ラベルを自分の認可上限よりも優位なラベルには設定できません。また、機密ラベルがプロセスの認可上限よりも優位なオブジェクト (ファイルまたは他のプロセス) にはアクセスできません。
1 つ以上のコンパートメントビットに関連付けられた語句。機密ラベル、情報ラベルは認可上限の一部として label_encodings(4) ファイルで定義できます。コンパートメントには、コンパートメントを含み、MAC 決定に使用されるラベルの対象範囲や、そのラベルに関わる作業グループを示す語句が指定されます。コンパートメントには本質的に順番は関係ありません。しかし、コンパートメント同士およびコンパートメントと格付けの許容可能な組み合わせについては、label_encodings ファイルに、階層型の制約を指定することができます。
制御端末との接続を確立したセッションのリーダープロセス。
セッションに対応している端末。各セッションは制御端末を 1 つだけ 持つことができ、また 1 つの制御端末は 1 つのセッションにだけ対応できます。制御端末から入力されるある種のシーケンスは、その制御端末に対応するセッション中の プロセスグループへのシグナル送信を伴います。詳細は termio(7I) を参照してください。
「任意アクセス制御」を参照してください。
デバイスオブジェクトには、プリンタ、ワークステーション、テープドライブ、 フロッピードライブ、オーディオデバイス、内部仮想端末デバイスがあります。MAC ポリシーの定義については、「必須アクセス制御」を参照してください。デバイスは「同位読み取り、同位書き込み」のポリシーに従います。
ファイルを階層構造システムに組織化するためのもので、ファイル階層構造における分岐点となります。ディレクトリもファイルの一種であり、一群のファイルや、 階層構造のすぐ下の階層にある一群の他のディレクトリ (サブディレクトリ という) をまとめています。ディレクトリファイル中の項目はリンクと呼ばれ、リンクはファイル記述子とファイル名とを対応付けます。 通常、各ディレクトリには最低 2 つのリンクが含まれます。それは . (ドット) と .. (ドットドット) です。ドットはそのディレクトリ自身を指すリンクで、ドットドットは 自身のすぐ上の階層のディレクトリ (親ディレクトリ) を表すリンクです。 階層構造の頂点にあるルートディレクトリにとっては、 自身が親ディレクトリとなります。ルートディレクトリのパス名は / で、その親ディレクトリのパス名も / となります。
ファイルまたはディレクトリの所有者が、その自由裁量によって、許可または拒否できるアクセス権の一種。Trusted Solaris 環境は「アクセス権ビット」と「アクセス制御リスト」の 2 種類の任意アクセス制御 (DAC) を提供します。
任意の種類 (機密ラベル、情報ラベル、認可上限のいずれか) の 2 つのラベルが比較され、2 つのどちらのラベルもお互いに優位でない場合、これらのラベルは無関係であると言います。無関係なラベル間の情報の移動は降格であるとみなさられます。
任意の種類のラベル (機密ラベル、情報ラベル、認可上限のいずれか) が、 比較対象とする別のラベル以上のセキュリティレベルを持つとき、「1 番目のラベルは 2 番目のラベルよりも優位である」と言います。優位なラベルの格付けは 2 番目のラベルの格付け以上でなければなりません。さらに、優位なラベルは、別のラベルに含まれるすべての語句 (もしあれば、コンパートメントとマーキング) を含んでいなければなりません。MAC を決定するときは、機密ラベルを比較して、どちらが優位であるかを決定します。「完全な優位」と「無関係」を参照してください。
ストリームにおける、ストリームヘッドからドライバへの方向を指します。
1 つのストリームでは、ドライバが周辺ハードウェア機器と ストリームとのインタフェースを提供します。ドライバは、マルチプレクサやログドライバ (log(7D) 参照) のような擬似ドライバの形をとることもあります。この場合ハードウェアデバイスは無関係です。
稼動中の各プロセスは実効ユーザー ID と実効グループ ID を 1 つずつ持っていて、これらはファイルへの アクセス権 (後述) を検査する際に使用されます。これら 2 つの ID はそれぞれ、当該プロセスの実ユーザー ID および実グループ ID と同一です。ただし、当該プロセスまたはその祖先が ユーザー ID セットのビットまたは グループ ID セットのビットが設定されたファイル (exec(2) 参照) から生成されている場合を除きます。
厳密に言えば、UNIX システムでは、ファイル、ディレクトリ、デバイスなどのオブジェクトはファイルとして扱われます。しかし、この節では、ファイルシステムオブジェクトのアクセス規則だけを説明します。ファイル、ディレクトリ、デバイスはわずかに必須アクセス規則が異なるので、これらの規則は別々に説明します。別の種類のオブジェクトに適用される規則については、「プロセスオブジェクト」、「System V IPC オブジェクト」、「STREAMS オブジェクト」、「ネットワーク終端オブジェクト」、「デバイスオブジェクト」、「X Window オブジェクト」を参照してください。
ファイル、ディレクトリ、デバイスにアクセスする方法は、次の 3 つです。
ファイル、ディレクトリ、デバイスの名前を表示できる。
ファイル、ディレクトリ、デバイスの内容または属性を表示できる。
ファイル、ディレクトリ、デバイスの内容または属性を変更できる。
Trusted Solaris 環境では、これらのアクセスの種類が許可または拒否されるかは、任意アクセス制御のチェック (「ファイルのアクセス権」を参照) と必須アクセス制御のチェックを通過しているかどうかによって決定されます。
すべての種類のアクセス権を得るには、プロセスの機密ラベルがパス接頭辞内のすべてのディレクトリの機密ラベルよりも優位であり、さらに、プロセスの所有者もパス接頭辞内のすべてのディレクトリへの任意検索アクセス権を持っていなければなりません。ファイル、ディレクトリ、またはデバイスの名前を表示するアクセス権を得るには (昇格された名前を隠すようにシステムが構成されていなければ)、その部分のチェックに通過しているだけでかまいません。
ファイルまたはディレクトリの内容または属性を表示するためのアクセス権 (読み取り権) を得るには、プロセスの機密ラベルがファイルまたはディレクトリの機密ラベルよりも優位でなければなりません。デバイスの内容を表示するためのアクセス権を得るには (たとえば、テープドライブにあるテープの情報を読み取るには)、プロセスの機密ラベルがデバイスの機密ラベルと等しくなければなりません。さらに、プロセスの所有者もファイル、ディレクトリ、デバイスへの任意読み取りアクセス権を持っていなければなりません。
プロセスがファイルに書き込んだり、ファイルの属性を変更したりするには、ファイルの機密ラベルがプロセスの機密ラベルよりも優位であり、さらに、プロセスの認可上限 (「プロセス認可上限」を参照) よりも低くなければなりません。プロセスがディレクトリに書き込む (つまり、ファイルまたはシンボリックリンクを作成する) には、プロセスの機密ラベルはディレクトリの機密ラベルとも等しくなければなりません。プロセスがデバイスに書き込む (たとえば、テープドライブにあるテープに情報を格納する) には、プロセスの機密ラベルもデバイスの機密ラベルと等しくなければなりません。デバイスファイルのセキュリティポリシーは通常ファイルのポリシーと異なるものでもかまいません。この場合、セキュリティ管理者が device_policy(4) ファイルにポリシーを定義します。プロセスの所有者は、ファイル、ディレクトリ、ディレクトリへの任意書き込みアクセス権を持っていなければなりません。
MAC または DAC チェックが (さまざまな理由で) 失敗するとき、拒否されているアクセス権の種類によっては、特定の無効化特権をコマンドに適用できます。ただし、コマンドに対する特権の適用を決定できるのは、セキュリティ管理者だけです。実行するユーザに適切な特権を使用許可を与えコマンドの信頼性を維持することで特権の乱用によるセキュリティ侵害が起こらないようにする責任がセキュリティ管理者にあるためです。「プロセス特権セット」と「継承可能な特権」を参照してください。
次に示す条件と無効化特権は、すべての種類のアクセス権に適用されます。
プロセスの機密ラベルがパス名中のディレクトリの機密ラベルよりも優位でない場合、プロセスは、上位検索 (プロセスの機密ラベルよりも優位である機密ラベルを持つディレクトリを検索すること) するための特権 PRIV_FILE_MAC_SEARCH を持っていなければなりません。
コマンドを実行したユーザがパス名内のディレクトリに任意検索アクセス権を持っていない場合、ディレクトリにアクセスするとき、プロセスは検索制限を無効にする特権 PRIV_FILE_DAC_SEARCH を持っていなければなりません。
次に示す条件と無効化特権は、表示 (読み取り) アクセス権に適用されます。
プロセスの機密ラベルがファイルの機密ラベルよりも優位でない場合、あるいは、ディレクトリまたはデバイスの機密ラベルと等しくない場合、プロセスは MAC 読み取り制限を無効にする特権 PRIV_FILE_MAC_READ を持っていなければなりません。
コマンドを実行したユーザがファイルまたはディレクトリの任意読み取りアクセス権を持っていない場合、プロセスは DAC 読み取り制限を無効にする特権 PRIV_FILE_DAC_READ を持っていなければなりません。
次に示す条件と無効化特権は、変更 (書き込み) アクセス権に適用されます。
ファイルの機密ラベルがプロセスの機密ラベルにより優位でない場合、あるいは、ディレクトリまたはデバイスの機密ラベルがプロセスの機密ラベルと等しくない場合、プロセスは MAC 書き込み制限を無効にして、ユーザが認可上限を超えて上位書き込みできるようにする特権PRIV_FILE_MAC_WRITE を持っていなければなりません。
コマンドを実行したユーザがファイルまたはディレクトリの任意書き込みアクセス権を持っていない場合、プロセスは DAC 書き込み制限を無効にする特権 PRIV_FILE_DAC_WRITE を持っていなければなりません。
以下のいずれかの条件が満たされる場合に、ファイルに対する読み取り権、書き込み権、実行権/検索権が、プロセスに与えられます。
プロセスの実効 UID がファイルの UID に一致する場合、ファイルの「所有者」アクセス権セットが許可していれば、アクセス権が与えられます。
プロセスの実効 UID が ACL ユーザエントリに一致する場合、エントリと ACL マスクが許可していれば、アクセス権が与えられます。
プロセスの実効 GID、または、その補助グループの 1 つの実効 GID がファイルの GID または任意の ACL エントリのグループ ID に一致する場合、アクセス権セットは (次に示すように) 一致するすべての「グループ」アクセス権セットの論理和として計算されます。
プロセスの実効 GID、または、その補助グループの 1 つの実効 GID がファイルの GID に一致し、ファイルの所有者グループの ACL エントリがない場合、グループのアクセス権セットが、一致するグループアクセス権セットと見なされます。
プロセスの実効 GID、または、その補助グループの 1 つの実効 GID がファイルの GID に一致し、ファイルの所有者グループの ACL エントリがある場合、ACL エントリが、一致するグループアクセス権セットと見なされます。
プロセスの実効 GID、またはその補助グループの実効 GID が、ACL のグループエントリに一致する場合は、その ACL エントリのアクセス権セットが、一致するグループアクセス権セットと見なされます。
算定されたアクセス権セットと、ACL マスクがある場合は ACL マスクによって許可されていれば、アクセス権が与えられます。
上記の条件のいずれも適用されない場合、ファイルの「その他」アクセス権セットと ACL マスク (もしあれば) が許可していれば、アクセス権が与えられます。
上記の適切な条件が満たされている場合、あるいは、希望の操作に対応する DAC 無効化特権がプロセスによって表明されている場合は、プロセスにアクセス権が与えられます。それ以外の場合、アクセス権は拒否されます。
ファイルへの入出力を実行するのに使用される小さな整数値。最小値は 0 で、最大値は NOFILES の値から 1 を引いた値です。各プロセスは、NOFILES 値を超える数のファイル記述子を同時にオープンすることはできません。 ファイル記述子は open(2) や pipe(2) などのコールにより返されます。 また read(2)、write(2)、ioctl(2)、close(2) などのコールの引数として使用されます。
各ファイル記述子には対応するオフセット最大値が決まっています。O_LARGEFILE フラグを設定しないでオープンする通常ファイルでは、オフセット最大値は 2 G バイトより 1 バイト小さい値 (231 - 1 バイト) です。O_LARGEFILE フラグを設定してオープンする通常ファイルでは、オフセット最大値は 263 バイトよりも 1 バイト小さい値です。
通常ファイル、特殊ファイル、およびディレクトリに与えられる名前。名前を構成する文字数の最小値は 1 で、最大値は NAME_MAX の値です。
ファイル名には、¥0 (NULL) および / (スラッシュ) の ASCII コードを除くすべての文字が使用できます。
ただし、*、?、[、] の 4 文字はシェル sh(1)、csh(1)、ksh(1) 参照) に対して特別な意味を持つので、(通常は使用しないでください。また印刷できない文字は、使用することは 許されていますが、避けてください。
ファイル名は、パス名を構成する 1 つの項目としても考えられます。パス名の各項目の解釈は、その項目の接頭辞に対応した NAME_MAX および _POSIX_NO_TRUNC の値により異なります。 つまりパス名中のある項目の長さが NAME_MAX 値を超えていて、かつその項目のパス接頭辞に対して _POSIX_NO_TRUNC が有効な場合 ( fpathconf(2) および limits(4) 参照)、 その環境ではその項目はエラーとなります。_POSIX_NO_TRUNC が有効でなければ、その項目の先頭部分 (バイト数は NAME_MAX 値に等しい) が項目名として用いられます。
許容された特権と強制された特権から構成されています。ファイル特権セットは、実行可能ファイル (プログラム) によって使用され許容された特権セットは、どの特権をプロセスが使用できるか、特権が実行可能ファイルに強制されるか継承されるかのか (「継承可能な特権」を参照) を制限します。強制された特権セット中の特権は、許容された特権セットにある限り、プログラムを呼び出す任意のプロセスで利用できます。
ファイルシステムオブジェクトには、ファイル (通常ファイル、プロセスファイル、デバイス特殊ファイル)、ディレクトリ、シンボリックリンク、FIFO (名前付きパイプ)、パイプ、および UNIX ドメインソケットのアクセス場所があります。MAC ポリシーの定義については、「必須アクセス制御」を参照してください。通常ファイル、デバイスファイル、シンボリックリンク、およびディレクトリに適用される MAC 規則については、「ファイルのアクセス権」を参照してください。別のファイルオブジェクトのポリシーは次のとおりです。UNIX ドメインソケットのアクセス場所と FIFO (名前付きパイプ) は「上位書き込み、下位読み取り」ポリシーに従います。パイプは「同位読み取り、同位書き込み」ポリシーに従います。
制御端末と接続を確立したセッションは、そのセッションのプロセスグループ群のうちの 1 つを制御端末のフォアグラウンドプロセスグループとして認識します。このグループは、他のグループ(バックグラウンドプロセスグループ)には許されないような特別なアクセスを制御端末に対して行うことができます。
情報ラベルは、概念的に、関連するデータの現在の実際の格付けとコンパートメント (さらに、適用される必須マーキングと取り扱い方法) を表します。情報ラベルは、階層型の格付けと非階層型のコンパートメントのセットから構成されます。この格付けとコンパートメントの組み合わせを、情報ラベルの「情報レベル」と言います。情報レベルに加えて、情報ラベルには非階層型のマーキングのセットも含まれています。
新しいプログラムの強制された特権セットまたは許容された特権セットによって影響されることなく、プロセスが execve(2) 経由でプログラムに渡すことができる特権。つまり、fork(2) で作成された子プロセスは親プロセスのすべての特権セットを受け取ります。新しいプログラムがプロセスによって実行されるとき、プロセスの継承可能な特権セットは、古いプログラムの継承可能な特権セットに等しくなるように設定されます (I[プロセス]=I[プログラム])。継承可能な特権セットは、現在実行中のプログラムの強制された特権または許容された特権の影響は受けません。これによって、特権使用できないプログラムから使用できるプログラムに特権を渡すことができます。
struct iovec 配列の項目の最大数。
必要な保護レベルに基づいてオブジェクトに割り当てられるセキュリティ識別子。あるいは、プロセスを実行したユーザに提供できる信用度に基づいてプロセスに割り当てられるセキュリティ識別子。
最上位ラベルと最下位ラベルを示すことによって、コマンド、ファイルシステム、割り当て可能デバイスに割り当てられる機密ラベルの集まり。割り当て可能なデバイスの場合、最下位ラ ベルと最上位ラベルによって、デバイスを割り当てられる機密ラベルの範囲が制限されます。allocate(1M)を参照してください。コマンドの場合、最下位ラベルと最上位ラベルによって、コマンドを実行できる機密ラベルの範囲が制限されます。ファイルシステムの場合、最下位ラベルと最上位ラベルによって、情報を各ファイルシステムに格納できる機密ラベルの範囲が制限されます。
ラベル表示プロセス属性フラグは、admin low と admin high の内部ラベルの変換と表示を制御します。値 External は、admin low と admin high のラベルが label_encodings(4) ファイルで定義されている最下位と最上位のラベルにマップされることを指定します。値 Internal は、admin low と admin high のラベルが label_encodings ファイルで指定されている文字列に変換されることを指定します。このような名前が指定されていない場合、文字列 ADMIN_LOW と ADMIN_HIGH が使用されます。値が設定されていない場合、label_encodings ファイルで指定されているデフォルトのラベル表示が使用されます。
これらの 15 ビットフラグは、label_encodings(4) ファイルの GFI FLAGS= オプションをサポートします。このオプションによってアプリケーションがこれらのフラグを使用できるようになります。ラベル変換フラグを表示または変更できるのは、トラステッドパスプロセスだけです。
中括弧 {LIMIT} は、実装状態ごとに決められた大きさの制限を表示するのに使われます。これは、ヘッダーファイル ({ } はなし) によって決定できる値、または 構成調査 ( pathconf(2) 引数 _PC_LIMIT ) を呼び出すことによって実行時に得ることができる 実際の値を示しています。
「必須アクセス制御」を参照してください。
「マルチレベルディレクトリ」を参照してください。
オブジェクトの機密ラベルと、オブジェクトにアクセスしようとするプロセスの機密ラベルとの比較に基づく制御の一種。さまざまな種類のオブジェクトに適用される MAC ポリシーは、同位読み取り、同位書き込み、下位読み取り、および上位書き込みです。各種類のオブジェクトに適用されるポリシーについては、個々の定義を参照してください。「同位読み取り」ポリシーが適用される場合、プロセスの機密ラベルがオブジェクトの機密ラベルと等しいときだけ、オブジェクトは読み取り用にアクセスできます。「同位書き込み」ポリシーが適用される場合、プロセスの機密ラベルとオブジェクトの機密ラベルが等しいときだけ、オブジェクトは書き込み用にアクセスできます。「上位書き込み」ポリシーが適用される場合、プロセスの機密ラベルがオブジェクトの機密ラベルよりも劣位であるときだけ、オブジェクトは書き込み用にアクセスできます(つまり、プロセスはオブジェクトに上位書き込みします)。上位書き込みポリシーには「同位書き込み」も含まれます。「下位読み取り」ポリシーが適用されるとき、プロセスの機密ラベルオブジェクトの機密ラベルよりも優位なときだけ、オブジェクトは読み取り用にアクセスできます。下位読み取りポリシーには「同位読み取り」も含まれます。
指定された mode 引数中のアクセス権ビットをクリアするための生成関数コールの 呼び出し時に使用される、プロセスのファイルモード生成マスク。umask(cmask) 中に設定されていたビットは、生成されるファイルのモードではクリアされています。
ストリーム中におけるデータまたは情報の何ブロックかの集まりで、STREAMS 制御構造体を伴います。メッセージにはいくつかの形式が定義されていて、形式によりメッセージの内容の種類が表されます。ストリーム中においては、メッセージがデータ送信および通信の唯一の手段です。
ストリーム中において、モジュールまたは ドライバによる処理を待っているリンクされたメッセージ群。
msgget(2) コールにより生成される一意な正の整数で、メッセージを識別します。msqid とも表されます。各 msqid は、メッセージ待ち行列とそれに対応したデータ構造体を含んでいます。データ構造体は msqid_ds と表され、以下のメンバーからなります。
struct ipc_perm msg_perm; struct msg *msg_first; struct msg *msg_last; ulong_t msg_cbytes; ulong_t msg_qnum; ulong_t msg_qbytes; pid_t msg_lspid; pid_t msg_lrpid; time_t msg_stime; time_t msg_rtime; time_t msg_ctime;
msqid_ds 構造体のメンバーを以下に説明します。
msg_perm メンバーは ipc_perm 構造体の 1 つで、メッセージ操作用のアクセス権を指定する (後述) 。 この構造体には以下のメンバーが含まれる。
uid_t cuid; /* creator user id */ gid_t cgid; /* creator group id */ uid_t uid; /* user id */ gid_t gid; /* group id */ mode_t mode; /* r/w permission */ ulong_t seq; /* slot usage sequence # */ key_t key; /* key */
*msg_first メンバーは、待ち行列内の先頭のメッセージへのポインタ
*msg_last メンバーは、待ち行列内の最後のメッセージへのポインタ
msg_cbytes メンバーは、現在の待ち行列の内容の総バイト数
msg_qnum メンバーは、現在待ち行列にあるメッセージの数
msg_qbytes メンバーは、待ち行列に置くことのできる最大バイト数
msg_lspid メンバーは、最後に msgsnd() 動作を実行したプロセスのプロセス ID
msg_lrpid メンバーは、最後に msgrcv() 動作を実行したプロセスのプロセス ID
msg_stime メンバーは、最後に msgsnd() 動作を実行した時刻
msg_rtime メンバーは、最後に msgrcv() 動作を実行した時刻
msg_ctime メンバーは、上記構造体のメンバーを変更する msgctl() 動作を最後に実行した時刻
msgctl(2)、msgget(2)、msgrcv(2)、および msgsnd(2) の関数の説明では、操作に必要なアクセス権を {token} で表していて、この token はアクセス権の種類で以下のように解釈されます。
00400 ユーザーによる読み取り 00200 ユーザーによる変更 00040 グループによる読み取り 00020 グループによる変更 00004 その他による読み取り 00002 その他による変更
同位読み取り同位書き込みの必須アクセス制御チェックを通過している場合、またはプロセスが適切な無効化特権 ( PRIV_IPC_MAC_READ または PRIV_IPC_MAC_WRITE のどちらか) を表明している場合、さらに、次の条件の 1 つが真である場合、msqid の読み取り権と書き込み権がプロセスに与えられます。
そのプロセスの実効ユーザー ID が msqid に対応するデータ構造体中の msg_perm.cuid または msg_perm.uid と一致していて、かつ msg_perm.mode の「ユーザー」部分 (0600) の正しいビットが設定されている
cr_gid および cr_groups の有効プロセスの グループ ID が msg_perm.cgid または msg_perm.gid と一致していて、かつ msg_perm.mode の「グループ」部分 (060) の正しいビットが設定されている
msg_perm.mode の「その他」部分 (006) の正しいビットが設定されている
プロセスは、適切な DAC 特権 PRIV_FILE_DAC_READ または PRIV_FILE_DAC_WRITE を表明しています。
上記の条件がいずれもあてはまらない場合、プロセスが要求する種類のアクセス権は拒否されます。
データの入出力用の処理ルーチンの集まり。常にストリームの中間、つまりストリームヘッドからドライバまでの間に存在します。ストリームにおけるモジュールは、シェルパイプラインにおけるコマンドと似ています。ただしモジュールには、双方向 (ダウンストリームと アップストリーム) データ送信と処理を独立して 実施することを可能にするための 2 つの関数が含まれています。
異なる機密ラベルの情報を別々のサブディレクトリ (シングルレベルディレクトリ (SLD) と呼ぶ) に保持しているディレクトリ。ほとんどのインタフェースでは、単一の名前を持つ単一のディレクトリのように見えます。Trusted Solaris 環境では、複数の標準アプリケーションがさまざまなラベルでファイルを格納するディレクトリ (/tmp ディレクトリ、/var/spool/mail、ユーザの$HOME ディレクトリなど) は、MLD に設定されます。プロセスが MLD にアクセスするには、パス名変換を使用するか、または装飾名を使用するかの 2 つの方法があります。プロセスが装飾名なしで MLD を参照するとき、Trusted Solaris プロセスはその参照を透過的に拡張して、プロセスの機密ラベルに対応する SLD に変換します。プロセスがファイルを作成している場合、さらに、正しい SLD がまだ存在していない場合、Trusted Solaris は SLD を作成して、プロセスの機密ラベルを割り当てます。これによって、そのファイルに対して、正しいシングルレベルのディレクトリが存在します。プロセスが MLD に直接アクセスしたい場合、パスの最終構成要素に MLD 修飾を使用しなければなりません。デフォルトの装飾はテキスト文字列 .MLD. です。装飾は、setfsattr(1M) で変更可能なファイルシステム属性です。装飾を使用することによって、プロセスと同じ SL を持つ SLD の代わりに、プログラムは MLD を直接参照できます。
複数のユーザプロセスに対応したストリーム群を 1 つのドライバに接続したり、複数のドライバを 1 つのユーザプロセスに接続することを可能にするドライバ。STREAMS は一般的な多重化用ドライバを備えてはいませんが、ストリームを構築したり多重化されたストリーム群を接続したりする機能は提供します。
ネットワーク終端オブジェクトはソケットであり、転送レベルインタフェース (TLI) です。MAC ポリシーの定義については、「必須アクセス制御」を参照してください。ネットワーク終端オブジェクトは「同位読み取り、同位書き込み」ポリシーに従います。
Trusted Solaris 環境でプロセスがアクセスできるすべてのもの。主にファイルシステムオブジェクト、プロセスオブジェクト、System V IPC オブジェクト、STREAMS オブジェクト、ネットワーク終端オブジェクト、デバイスオブジェクト、 X Window オブジェクトの6種類のオブジェクトがあります。
オフセット最大値は、オープンファイルの記述の属性で、ファイルオフセットとして使用できる最大値を表します。
グループ内の全メンバーの親が、そのグループのメンバーか、 あるいはグループのセッションのメンバーではないようなプロセスグループ。オーファンとは「親がない」という意味です。
スラッシュ (/) で区切られたディレクトリ名の集まりで、NULL 文字で終わる文字列。先頭がスラッシュの場合や、最後がファイル名の場合もあります。
パス名の先頭がスラッシュの場合、パスの検索は ルートディレクトリから始まります。先頭がスラッシュでなければ、 検索は現在の作業ディレクトリから始まります。
スラッシュ 1 つだけからなるパス名はルートディレクトリを指します。
特に断わりのない限り、NULL のパス名は「存在しないファイルを表す」ものと解釈されます。
各プロセスは、システム中に存在している間つまり寿命が終わるまで、プロセス ID と呼ばれる一意な正の整数で認識されます。あるプロセス ID を割り当てた後、その ID を持つプロセス、プロセスグループ、およびセッションの寿命がすべて終わるまで、システムはその ID を再使用しません。プロセス中には thread_t および LWPID_t と呼ばれている スレッド ID を持つスレッドがあります。これらのスレッドは 外のプロセスからは見えません。
現在動作中のプロセスが新たなプロセスを生成した場合 (fork(2) 参照)、現プロセスが新プロセスの親プロセスとなり、現プロセスのプロセス ID が親プロセス ID となります。
適切な特権を持つと言うことは、セキュリティポリシーのいくつかの点を無効にできる能力を持つということです。DAC または MAC 制限をバイパスするために、システムコールは「適切な特権」を持つまたは表明する必要があるとマニュアルページで説明している場合、「ファイルのアクセス権」の向こうか特権と、それに寄って無効にされるアクセスの種類を参照してください。セキュリティ管理者は、コマンド自身またはコマンドを使用した人が信頼できる方法でその特権を使用できると判断したときだけ、特権を与えます。「ファイル特権セット」と「プロセス特権セット」を参照してください。
この 1 ビットフラグは、プロセスが特権デバッグモードにあることを示します。この操作モードでは、特権を使用しようとするプロセスの試みがすべて記録されます。このフラグは任意のプロセスが表示およびクリアできます。ただし、設定できるのはトラステッドパスプロセスだけです。このフラグは、特権デバッグモードでコマンドを実行するときに、runpd(1M) によって設定され、そのプロセスによって継承されます。特権デバッグモードは、_PRIVS_DEBUG カーネルスイッチも有効になっているときだけ動作します (secconf(2) を参照)。
fork(2) であるプロセスから別プロセスにコピーされ、exec(2) で変更されずにクローンされる、セキュリティ関連の値を示すフラグ。具体的には、ネットワークのドークンマッピングプロセスフラグ、ラベル表示フラグ(外部用表示が内部表示を設定)、ラベル変換フラグ、ディスクレスブートフラグの一部、カット&ペーストセレクションエージェントフラグの一部を指します。詳細については、 pattr(1)、getpattr(2)、setpattr(2)を参照してください。
システム中の各プロセスは、必ずあるプロセスグループのメンバーです。各グループはプロセスグループ ID により認識されます。現在プロセスグループリーダーではないプロセスは、新たなグループを生成してそのグループのリーダーとなることができます。さらに現在プロセスグループリーダーではないプロセスは、 同じセッション中の他の既存のプロセスグループに加わることができます。新たに生成されたプロセスは、その親プロセスが属するプロセスグループのメンバーとなります。
プロセスグループ ID と同一のプロセス ID を持つプロセス。
動作中の各プロセスは、必ずあるプロセスグループのメンバーであり、プロセスグループはプロセスグループ ID と呼ばれる正の整数により認識されます。プロセスグループ ID は、そのグループのリーダーのプロセスのプロセス ID です。プロセスをグループ化することにより、 関連したプロセス群に一括してシグナルを送信できます ( kill(2) 参照)。
プロセスの寿命とは、フォークされたときから、終了したことを親プロセスが認識するまでの間を指します。 wait(2) を参照してください。
プロセスグループの寿命は、プロセスグループリーダーによりグループが生成されたときから、そのグループの最後のプロセスの寿命が終わるときまたは最後のプロセスがグループから離れるときまでを指します。
プロセスと軽量プロセス (実行のスレッドが独自にスケジュールされているプロセス) は「上位書き込み、下位読み取り」ポリシーに従います。MAC ポリシーの定義については、「オブジェクト」を参照してください。
プロセスが使用する特権は、継承可能な特権セット、許可された特権セット、有効な特権セット、保存された特権セットと呼ばれるセットに格納されます。プロセスが execve(2) システムコール経由でプログラムを実行するとき、許可された特権セット (P) と有効な特権セット (E) は同じ値になるようにリセットされます。この値は、プロセスに以前から存在する継承可能な特権 (I) であり、かつ、プログラムファイルの強制された特権 (F) と許容された特権 (A) の両方に含まれるものです。つまり、P=E=(I[プロセス] と (A[プログラム] で制限された F[プログラム]) との論理和です。保存された特権セットは、最初に、既存の継承可能な特権セットとファイルの許可された特権の論理和に設定されます。つまり、S=(Aに含まれる I[プロセス]) です。これによって、プロセスは、現在実行中のプログラムが呼び出されたときに、どの特権を持つのかを決定できます。新しいプログラムが呼び出されるとき、継承可能な特権セットは、最初に、現在のプログラムを呼び出したプロセスの継承可能な特権と同じになるように設定されます。つまり、I[新しいプロセス]=I[古いプロセス] です。実行可能なプログラムの強制された特権または許容された特権を参照せずに継承可能な特権を設定することによって、使用できないプログラムから使用できるプログラムにそのまま特権を渡すことができます。ベースシステムのスーパーユーザの能力との互換性を持たせるために、既存UID が setuid(2) でオリジナルとは異なるように設定される場合、有効な特権セットは保存された特権セットにコピーされて、有効な特権セットはクリアされます。つまり、S=E; E=0 です。プロセスが自分の実効 UID を元の内容に戻すとき、つまり、その特権付き状態に復元するとき、保存された特権セットは有効な特権セットにコピーされます。つまり、E=S です。 execve() または setuid() の結果として特権セットが自動的に変更されることに加えて、プロセスは自分の特権セットをgetppriv(2) とsetppriv(2) システムコールで操作できます。たとえば、これらのシステムコールで許可された特権を自分の有効な特権セットに組み込んだり外したりすることによって、プロセスは特権をブラケット化(一時的に設定を変更する)することができます。有効な特権セットに PRIV_SET_FPRIV 特権を持つプロセスは、 setfpriv(2) を使用して、ファイルに特権を設定できます。システムコールを使用してプログラム内で特権を操作する方法についての詳細は、Trusted Solaris 開発ガイド を参照してください。
プロセスが Solaris オペレーティング環境から受け取るセキュリティ属性は、プロセス ID (PID)、実ユーザ ID、実効ユーザ ID、保存されたユーザ ID、実 ID、実効 ID、保存された ID、追加グループ ID、ユーザ監査 ID、監査セッション ID、監査前選択マスク、端末 ID umask (「マスク」を参照) です。プロセスが Trusted Solaris システムから受け取るセキュリティ属性は、プロセスの 認可上限、CMW ラベル、プロセス属性フラグ、許可された特権セット、有効な特権セット、継承可能な特権セット、保存されたプロセス特権セットです。
システムのプロセッサは、プロセッサセットとして知られるサブセットに分割できます。ある 1 つのプロセッサセットに結合されたプロセスは、そのプロセッサセット内のプロセッサ上でのみ動作し、またセット内のプロセッサは、通常、そのセットに結合されたプロセスだけを実行します。有効な各プロセッサセットは正の整数によって識別されます (pset_create(2) 参照)。
ストリームにおけるモジュールまたはドライバ中のメッセージ待ち行列で、アップストリーム方向のメッセージを含んでいます。
システム上に存在することを許されたユーザーは、実ユーザー ID と呼ばれる正の整数 (範囲は 0 から MAXUID の値まで) により認識されます。
各ユーザーはグループのメンバーでもあります。各グループは、実グループ ID と呼ばれる正の整数により認識されます。
動作中のプロセスの実ユーザー ID と実グループ ID は、そのプロセスを生成したユーザーの実ユーザー ID と実グループ ID に設定されています。
パス名を検索するために、各プロセスには ルートディレクトリと 現在の作業ディレクトリが対応付けられています。 プロセスのルートディレクトリは、ルートファイルシステムのルートディレクトリと同じである必要はありません。
保存されたリソース制限はプロセスの属性で、exec 関数群や setrlimit(2) で記述されるように、現在有効でないリソース制限の処理を適用できるようにします。
保存されたユーザー ID と保存されたグループ ID の値は、ユーザーセットまたはグループセットファイルモードビットが設定されたファイルを実行する前の実効ユーザー ID および実効グループ ID の値です (exec(2) 参照)。
「シングルレベルディレクトリ」を参照してください。
Trusted Solaris セキュリティポリシーを実施するために使用される属性。 Solaris オペレーティング環境と Trusted Solaris オペレーティング環境の両方のシステムのさまざまなセキュリティ属性のセットが、プロセス、ユーザ、ファイル、ディレクトリ、ファイルシステム、トラステッドネットワーク上のホスト、割り当て可能デバイスなどのに割り当てられます。「プロセスのセキュリティ属性」を参照してください。
Trusted Solaris 環境では、情報がどのようにアクセスされるかを定義する DAC、MAC、情報ラベル付け、および特権解釈の規則を指す。顧客のサイトでは、そのサイトで処理されている情報の重要度を定義する規則であり、承認されていないアクセスから情報を保護するために使用される基準を指します。
セマフォ識別子 (semid) は、semget(2) コールにより生成される一意な正の整数です。各 semid は、一群のセマフォとそれに関連付けられたデータ構造体を持ちます。このデータ構造体は semid_ds と呼ばれ、次のメンバーから構成されます。
struct ipc_perm sem_perm; /* operation permission struct */
struct sem *sem_base; /* ptr to first semaphore in set */
ushort_t sem_nsems; /* number of sems in set */
time_t sem_otime; /* last operation time */
time_t sem_ctime; /* last change time */
/* Times measured in secs since */
/* 00:00:00 GMT, Jan. 1, 1970 */
semid_ds 構造体のメンバーを以下に説明します。
sem_perm メンバーは、セマフォ操作用アクセス権 (後述) を指定する ipc_perm 構造体であり、以下のメンバーを含む
uid_t uid; /* user id */ gid_t gid; /* group id */ uid_t cuid; /* creator user id */ gid_t cgid; /* creator group id */ mode_t mode; /* r/a permission */ ulong_t seq; /* slot usage sequence number */ key_t key; /* key */
sem_nsems メンバーは、そのセマフォ群に含まれている セマフォの数。各セマフォは、sem_num と呼ばれる負ではない整数により参照される。sem_num の値の最小値は 0 で、最大値は sem_nsems の値から 1 を引いた値
sem_otime メンバーは、最後に semop(2) 動作を実行した時刻
sem_ctime メンバーは、上記構造体のメンバーを変更する semcl(2) 動作を最後に実行した時刻
セマフォは、次のメンバーからなる sem という名のデータ構造体です。
ushort_t semval; /* semaphore value */ pid_t sempid; /* pid of last operation */ ushort_t semncnt; /* # awaiting semval > cval */ ushort_t semzcnt; /* # awaiting semval = 0 */
sem 構造体のメンバーを以下に説明します。
semval メンバーは、セマフォの実の値に等しい 0 以上の整数
sempid メンバーは、このセマフォに対する セマフォ操作を最後に実行したプロセスのプロセス ID
semncnt メンバーは、このセマフォの semval 値が現在の値より大きくなるまで待つように 中断状態に置かれているプロセス数
semzcnt メンバーは、このセマフォの semval 値が 0 になるまで待つように中断状態に置かれているプロセス数
00400 ユーザーによる読み取り 00200 ユーザーによる変更 00040 グループによる読み取り 00020 グループによる変更 00004 その他による読み取り 00002 その他による変更
同位読み取り同位書き込みの必須アクセス制御チェックを通過している場合、またはプロセスが適切な無効化特権 ( PRIV_IPC_MAC_READ またはPRIV_IPC_MAC_WRITE のどちらか) を表明している場合、さらに、次の条件の 1 つが真である場合、 semid の読み取り権と書き込み権がプロセスに与えられます。
そのプロセスの実効ユーザー ID が semid に対応するデータ構造体中の sem_perm.cuid または sem_perm.uid と一致していて、かつ sem_perm.mode の「ユーザー」部分 (0600) の正しいビットが設定されている
そのプロセスの実効グループ ID が sem_perm.cgid または sem_perm.gid と一致していて、かつ sem_perm.mode の「グループ」部分 (060) の正しいビットが設定されている
sem_perm.mode の「その他」部分 (06) の正しいビットが設定されている
プロセスが、適切な DAC 特権 ( PRIV_FILE_DAC_READ または PRIV_FILE_DAC_WRITE のどちらか) を表明している。
上記の条件がいずれもあてはまらない場合、プロセスが要求する種類のアクセス権は拒否されます。
機密ラベルは、ラベル付きオブジェクトの保護レベルまたはラベル付きサブジェクトのアクセスレベルを定義します。機密ラベルは、Trusted Solaris 環境によるすべての必須アクセス制御 (MAC) 決定で使用されます。機密ラベルは、階層型の格付けと非階層型のコンパートメントから構成されます。この格付けとコンパートメントの組み合わせを機密ラベルの「レベル」と呼びます。
セッション ID と呼ばれる識別子によって認識される一群のプロセスで、 制御端末との接続を確立する機能を持っています。 現在プロセスグループリーダーではないプロセスは、 新たなセッションとプロセスグループを生成することができます。そのときそのプロセスは、新セッションのセッションリーダーとなり、さらに新プロセスグループのプロセスグループリーダーとなります。新たに生成されたプロセスは、それを生成したセッションに属することになります。
システム中の各セッションは、その寿命が終わるまで、セッション ID という正の整数値により一意に認識されます。このセッション ID は、セッションリーダーとなっているプロセスのプロセス ID です。
セッション ID と同一のプロセス ID およびプロセスグループ ID を持つプロセス。
セッションの寿命は、セッションリーダーによりセッションが 生成されたときから、そのセッションの最後のプロセスの寿命が終わるとき または最後のプロセスがセッションから離れるときまでを指します。
共有メモリー識別子 ( shmid ) は、semget(2) コールにより生成される一意な正の整数です。各 shmid は、共有メモリーセグメントと呼ばれるメモリー領域と、 それに対応したデータ構造体を持っています (ユーザーは、共有メモリーセグメントへの参照が終わったら、必ずそのセグメントを削除する必要があります)。 データ構造体は shmid_ds と呼ばれ、以下のメンバーで構成されます。
struct ipc_perm shm_perm; /* operation permission struct */
int shm_segsz; /* size of segment */
struct region *shm_reg; /* ptr to region structure */
char pad[4]; /* for swap compatibility */
pid_t shm_lpid; /* pid of last operation */
pid_t shm_cpid; /* creator pid */
ushort_t shm_nattch; /* number of current attaches */
ushort_t shm_cnattch; /* used only for shminfo */
time_t shm_atime; /* last attach time */
time_t shm_dtime; /* last detach time */
time_t shm_ctime; /* last change time */
/* Times measured in secs since */
/* 00:00:00 GMT, Jan. 1, 1970 */
shmid_ds 構造体のメンバーを以下に説明します。
shm_perm メンバーは、共有メモリー操作用アクセス権 (後述) を指定する ipc_perm 構造体であり、以下のメンバーを含む
uid_t cuid; /* creator user id */ gid_t cgid; /* creator group id */ uid_t uid; /* user id */ gid_t gid; /* group id */ mode_t mode; /* r/w permission */ ulong_t seq; /* slot usage sequence # */ key_t key; /* key */
shm_segsz メンバーは、共有メモリーセグメントのサイズをバイト単位で表す
shm_cpid メンバーは、この共有メモリー識別子を生成したプロセスのプロセス ID
shm_lpid メンバーは、最後に shmat() と shmdt() 動作を実行したプロセスのプロセス ID (shmop(2) 参照)
shm_nattch メンバーはこのセグメントが現在アタッチされているプロセス数
shm_atime メンバーは、最後に shmat() 動作を実行した時刻 (shmop(2) 参照)
shm_dtime メンバーは、最後に shmdt() 動作を実行した時刻 (shmop(2) 参照)
shm_ctime メンバーは、上記構造体のメンバーを変更する shmcl(2) 動作を最後に実行した時刻
shmctl(2) 、 shmat() と shmdt() ( shmop(2) 参照) の関数の説明では、操作に必要なアクセス権を {token} で表していて、この token はアクセス権の種類で以下のように解釈されます。
00400 ユーザーによる読み取り 00200 ユーザーによる書き込み 00040 グループによる読み取り 00020 グループによる書き込み 00004 その他による読み取り 00002 その他による書き込み
同位読み取り同位書き込みの必須アクセス制御チェックに通過している場合、またはプロセスが適切な無効化特権 ( PRIV_IPC_MAC_READ または PRIV_IPC_MAC_WRITE のどちらか) を表明している場合、さらに、次の条件の 1 つが真である場合、 shmid の読み取り権と書き込み権がプロセスに与えられます。
そのプロセスの実効ユーザー ID がスーパーユーザーである
そのプロセスの実効ユーザー ID が shmid に対応するデータ構造体中の shm_perm.cuid または shm_perm.uid と一致していて、かつ shm_perm.mode の「ユーザー」部分 (0600) の正しいビットが設定されている
そのプロセスの実効グループ ID が shm_perm.cgid または shm_perm.gid と一致していて、かつ shm_perm.mode の「グループ」部分 (060) の正しいビットが設定されている
shm_perm.mode の「その他」部分 (06) の正しいビットが設定されている
プロセスが、適切な DAC 特権 PRIV_FILE_DAC_READ または PRIV_FILE_DAC_WRITE のどちらかを表明している。
上記の条件がいずれもあてはまらない場合、プロセスが要求する種類のアクセス権は拒否されます。
同じの機密ラベルのファイルだけを含む、MLD 内のディレクトリ。SLD ディレクトリ名は、そのディレクトリを作成したプロセスから派生します。たとえば、/tmp 中の SLD の名前は /tmp/.SLD.<作成したプロセスの機密ラベル> という形式になります。 これ以降、/tmp ディレクトリ中のファイルへのすべての参照は、/tmp/fileとして透過的に行われます。パス名変換が透過的に行われるため、MLD 装飾と SLD の名前を使用するように選択されていなければ、プロセスは明示的に SLD ディレクトリを参照する必要がありません。
プロセス ID の値が 0 または 1 のプロセス (kill(2) 参照)。ID が 0 のプロセスは proc0 と呼ばれるプロセススケジューラです。ID が 1 のプロセスは proc1 と呼ばれる初期化プロセス (init) で、システム中の他のすべての プロセスの祖先であり、プロセス構造体を制御するために使用されます。
カーネルメカニズムの集合体で、ネットワークドライバおよび通信ドライバの開発をサポートする機能を持っています。 STREAMS はカーネル内部およびカーネルとユーザーレベルのプロセスとの間での、文字の入出力に関するインタフェース基準を定義します。STREAMS メカニズムは、各種のユーティリティルーチン、カーネル機能、およびデータ構造体から構成されます。
カーネル内におけるユーザープロセスとドライバルーチンとの間の 全二重データパス。主な内容は、1 つのストリームヘッド、1 つのドライバ、そして その両者の間に位置するいくつか (0 個の場合もある) のモジュールです。ストリームはシェルのパイプラインと似ていますが、データの流れと処理が双方向に行われる点が異なります。
ストリームの両端のうち、ストリームとユーザープロセスとの インタフェースを提供する端。ストリームヘッドの主要な機能は、 STREAMS に関連したシステムコールを処理すること、およびストリームとユーザープロセス間でデータや情報を送信することです。
任意の種類のラベル (機密ラベル、情報ラベル、認可上限のいずれか) が、比較対象とす る別のラベルのセキュリティレベルよりも高いセキュリティレベルを持っているとき、「1 番目のラベルは 2 番目のラベルよりも完全に優位である」と言います。完全な優位と は、等しい場合がないことを意味します。つまり、1 番目のラベルの格付けが 2 番目のラベルの格付けよりも高く、1 番目のラベルが 2 番目のラベルのすべてのコンパートメントを含んでいる場合、あるいは、両方のラベルの格付けが同じであるが、1 番目のラベルが 2 番目のラベルのすべてのコンパートメントを含んでいて、さらに 1 つまたは複数の追加のコンパートメントを持っている場合のことです。
各サイトのセキュリティ管理者が label_encodings(4) ファイルで定義した規則と、すべての Trusted Solaris 環境で使用される 2 つの管 理ラベル ADMIN_LOW と ADMIN_HIGH に従って作成される、すべての有効な (正しい形式の) ラベルのセット。
実効ユーザー ID の値が 0 のプロセス (スーパーユーザープロセス) に対応するユーザー。スーパーユーザープロセスには、ファイルがアクセス権で保護されていてもアクセスできるなどの特権が与えられています。 Trusted Solaris 環境でのスーパーユーザーは、責任を共有する管理役割に置き換わっています。
トラステッドパス属性とも呼ばれます。この 1 ビットフラグは、プロセスがトラステッドパスで実行中であることを示します。
ストリームにおける、ドライバからストリームヘッドへの方向を指します。
ストリームにおけるモジュールまたはドライバ中のメッセージ待ち行列で、 ダウンストリーム方向のメッセージを含んでいます。
X Window オブジェクトは、共通デスクトップ環境 (X Window システムに基づく) のウィンドウです。MAC ポリシーの定義については、「必須アクセス制御」を参照してください。通常、ウィンドウオブジェクトは「同位読み取り、同位書き込み」ポリシーに従います。例外については、X ライブラリのマニュアルページ (セクション 3X11TSOL) を参照してください。