Go to main content
マニュアルページ セクション 5: 標準、環境、マクロ

印刷ビューの終了

更新: 2016年12月6日
 
 

privileges (5)

名前

privileges - プロセスの特権モデル

説明

Oracle Solaris ソフトウェアには、プロセスのアクションをきめ細かく制御できるようにするための特権セットが実装されています。特定の特権の所有により、プロセスは、特定の一連の制限された操作を実行できるようになります。

開発者は、Oracle Solaris オペレーティングシステム内の主に特権に基づくセキュリティーモデルを変更することによって、プロセスをすべての特権 (スーパーユーザー) や特権なし (0 以外の UID) ではなく、実際に必要な特権操作に制限する機会が得られます。さらに、以前は制限されていなかった一連の操作にも特権が必要になりました。これらの特権は「基本」特権と呼ばれ、すべてのプロセスにデフォルトで付与されます。

まとめると、「基本」特権を除く定義されているすべての特権が、従来は root ユーザーに関連付けられた特権セットを構成します。「基本」特権は、以前、特権の設定されていないプロセスに与えられた「特権」です。

定義されている特権は次のとおりです:

PRIV_CONTRACT_EVENT

プロセスが、イベントの信頼できる配信をイベントエンドポイントにリクエストできるようにします。

プロセスが、ユーザーによって大量に生成される可能性のあるイベントをテンプレートのクリティカルイベント設定期間内に含めることができるようにします。

PRIV_CONTRACT_IDENTITY

プロセスがプロセス契約テンプレートのサービス FMRI 値を設定できるようにします。

PRIV_CONTRACT_OBSERVER

プロセスが、プロセスの実効ユーザー ID 以外のユーザーによって作成され、所有されている契約によって生成された契約イベントを監視できるようにします。

プロセスが、プロセスの実効ユーザー ID 以外のユーザーによって作成され、所有されている契約に属する契約イベントエンドポイントを開けるようにします。

PRIV_CPC_CPU

プロセスが CPU ごとのハードウェアパフォーマンスカウンタにアクセスできるようにします。

PRIV_DAX_ACCESS

プロセスが、DAX ハードウェアでサポートされているすべての操作を実行できるようにします。

この特権は、ソフトウェアインシリコンをサポートするシステム上で使用できます。

PRIV_DTRACE_KERNEL

DTrace のカーネルレベルのトレースを許可します。

PRIV_DTRACE_PROC

DTrace のプロセスレベルのトレースを許可します。プロセスレベルのトレースのプローブを、ユーザーがアクセス権を持っているプロセス内に配置し、有効にできるようにします。

PRIV_DTRACE_USER

DTrace のユーザーレベルのトレースを許可します。ユーザーがアクセス権を持っているプロセスを検査するために、システムコールおよびプロファイル DTrace プロバイダの使用を許可します。

PRIV_FILE_CHOWN

プロセスがファイルの所有者ユーザー ID を変更できるようにします。プロセスが、ファイルのグループ ID をプロセスの実効グループ ID 以外のグループ ID か、またはプロセスのいずれかの補助グループ ID に変更できるようにします。

PRIV_FILE_CHOWN_SELF

プロセスが自身のファイルを渡せるようにします。この特権を持つプロセスは、{_POSIX_CHOWN_RESTRICTED} が有効でないかのように動作します。

PRIV_FILE_DAC_EXECUTE

プロセスが、通常であればプロセスの実行権を禁止するアクセス権ビットまたは ACL を持つ実行可能ファイルを実行できるようにします。

PRIV_FILE_DAC_READ

プロセスが、通常であればプロセスの読み取り権を禁止するアクセス権ビットまたは ACL を持つファイルまたはディレクトリを読み取れるようにします。

PRIV_FILE_DAC_SEARCH

プロセスが、通常であればプロセスの検索権を許可しないアクセス権ビットまたは ACL を持つディレクトリを検索できるようにします。

PRIV_FILE_DAC_WRITE

プロセスが、プロセスの書き込み権を許可しないアクセス権ビットまたは ACL を持つファイルまたはディレクトリを書き込めるようにします。0 の実効 UID が存在しない場合に UID 0 によって所有されているファイルを書き込むには、すべての特権が必要です。

PRIV_FILE_DOWNGRADE_SL

プロセスが、ファイルまたはディレクトリの機密ラベルを既存の機密ラベルより優位でない機密ラベルに設定できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_FILE_FLAG_SET

プロセスが immutablenounlink、または appendonly ファイル属性を設定できるようにします。

PRIV_FILE_LINK_ANY

プロセスが、プロセスの実効 UID とは異なる UID によって所有されているファイルへのハードリンクを作成できるようにします。

PRIV_FILE_OWNER

ファイルの所有者でないプロセスが、そのファイルのアクセスや変更時間を変更できるようにします。ディレクトリの所有者でないプロセスが、そのディレクトリのアクセスや変更時間を変更できるようにします。ファイルまたはディレクトリの所有者でないプロセスが、「実行後にテキストイメージを保存する」(スティッキー) ビットが設定された親ディレクトリを持つファイルまたはディレクトリの削除または名前変更を行うことができるようにします。ファイルの所有者でないプロセスが、そのファイル上に namefs をマウントできるようにします。ファイルまたはディレクトリの所有者でないプロセスが、そのファイルまたはディレクトリのアクセス権ビットまたは ACL を変更できるようにします。

PRIV_FILE_READ

プロセスが、プロセスの読み取り権を許可するアクセス権または ACL を持つファイルまたはディレクトリを読み取れるようにします。

PRIV_FILE_SETID

プロセスが、セットユーザー ID およびセットグループ ID ビットをクリアせずにファイルの所有権を変更したり、ファイルに書き込んだりできるようにします。プロセスが、プロセスの実効グループでも、プロセスのいずれかの補助グループでもないグループに属しているファイルまたはディレクトリにセットグループ ID ビットを設定できるようにします。プロセスが、PRIV_FILE_OWNER が存在する場合に、別の所有権を持つファイルにセットユーザー ID ビットを設定できるようにします。追加の制限は、setuid 0 のファイルを作成または変更する場合に適用されます。

PRIV_FILE_UPGRADE_SL

プロセスが、ファイルまたはディレクトリの機密ラベルを既存の機密ラベルより優位な機密ラベルに設定できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_FILE_WRITE

プロセスが、プロセスの書き込み権を許可するアクセス権または ACL を持つファイルまたはディレクトリを書き込めるようにします。

PRIV_GRAPHICS_ACCESS

プロセスがグラフィックスデバイスへの特権付き ioctl を作成できるようにします。通常、この特権を持つ必要があるのは xserver プロセスだけです。この特権を持つプロセスは、特権付きグラフィックスデバイスマッピングも実行できます。

PRIV_GRAPHICS_MAP

プロセスが、グラフィックスデバイスから特権付きマッピングを実行できるようにします。

PRIV_IPC_DAC_READ

プロセスが、通常であればプロセスの読み取り権を許可しないアクセス権ビットを持つ System V IPC メッセージキュー、セマフォーセット、または共有メモリーセグメントを読み取れるようにします。

PRIV_IPC_DAC_WRITE

プロセスが、通常であればプロセスの書き込み権を許可しないアクセス権ビットを持つ System V IPC メッセージキュー、セマフォーセット、または共有メモリーセグメントを書き込めるようにします。

PRIV_IPC_OWNER

System V IPC メッセージキュー、セマフォーセット、または共有メモリーセグメントの所有者でないプロセスが、メッセージキュー、セマフォーセット、または共有メモリーセグメントを削除したり、その所有権を変更したり、そのアクセス権ビットを変更したりできるようにします。

PRIV_NET_ACCESS

プロセスが TCP、UDP、SDP、または SCTP ネットワークエンドポイントを開けるようにします。

PRIV_NET_BINDMLP

プロセスが、プロセスのゾーンのマルチレベルポート (MLP) として構成されているポートにバインドできるようにします。この特権は、共有アドレスとゾーン固有のアドレスの両方の MLP に適用されます。MLP ポートの構成については、Trusted Extensions のマニュアルページの tnzonecfg(4) を参照してください。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_NET_ICMPACCESS

プロセスが ICMP パケットを送受信できるようにします。

PRIV_NET_MAC_AWARE

プロセスが、setpflags(2) を使用して NET_MAC_AWARE プロセスフラグを設定できるようにします。また、この特権により、プロセスは setsockopt(3SOCKET) を使用して SO_MAC_EXEMPT ソケットオプションも設定できるようになります。NET_MAC_AWARE プロセスフラグと SO_MAC_EXEMPT ソケットオプションはどちらも、ローカルプロセスのラベルがピアのデフォルトラベルより優位な場合や、ローカルプロセスが大域ゾーンで実行されている場合に、ローカルプロセスがラベルの付いていないピアと通信できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_NET_OBSERVABILITY

プロセスが、ネットワークトラフィックの受信やトラフィックの送信のみが禁止されているデバイスを開けるようにします。

PRIV_NET_PRIVADDR

プロセスが特権ポート番号にバインドできるようにします。特権ポート番号は 1 - 1023 (従来の UNIX 特権ポート) であり、さらに NFS や SMB で使用するために予約されているポートを除き、これらのポートは「udp/tcp_extra_priv_ports」とマークされています。

PRIV_NET_RAWACCESS

プロセスがネットワークレイヤーに直接アクセスできるようにします。

PRIV_PROC_AUDIT

プロセスが監査レコードを生成できるようにします。プロセスが独自の監査事前選択情報を取得できるようにします。

PRIV_PROC_CHROOT

プロセスが自身のルートディレクトリを変更できるようにします。

PRIV_PROC_CLOCK_HIGHRES

プロセスが高精度タイマーを使用できるようにします。

PRIV_PROC_EXEC

プロセスが exec(2) を呼び出せるようにします。

PRIV_PROC_FORK

プロセスが fork(2)fork1(2)、または vfork(2) を呼び出せるようにします。

PRIV_PROC_INFO

プロセスが、シグナルを送信できるプロセス以外のプロセスのステータスを検査できるようにします。検査できないプロセスは /proc に表示できないため、存在していないように見えます。

PRIV_PROC_LOCK_MEMORY

プロセスが物理メモリー内のページをロックできるようにします。

PRIV_PROC_OWNER

プロセスが、所有権には関係なく、ほかのプロセスにシグナルを送信したり、ほかのプロセスにあるプロセスの状態を検査して変更したりできるようにします。別のプロセスを変更する場合は、追加の制限が適用されます: 接続しているプロセスの実効特権セットは、ターゲットプロセスの実効セット、許可セット、および継承可能セットのスーパーセットである必要があります。制限セットは、ターゲットの制限セットのスーパーセットである必要があります。ターゲットプロセスでいずれかの UID が 0 に設定されている場合は、実効 UID が 0 でないかぎり、すべての特権が表明されている必要があります。プロセスが CPU に任意のプロセスをバインドできるようにします。

PRIV_PROC_PRIOCNTL

プロセスが、自身の優先度を現在のレベルを超えて引き上げることができるようにします。プロセスが、自身のスケジューリングクラスを任意のスケジューリングクラス (RT クラスを含む) に変更できるようにします。

PRIV_PROC_SESSION

プロセスが、シグナルまたはトレースプロセスをセッションの外部に送信できるようにします。

PRIV_PROC_SETID

UID 0 ですべての特権が表明されている必要がある場合、プロセスが自身の UID を自由に設定できるようにします。また、プロセスフラグ PRIV_PFEXEC_AUTH の設定も可能にします。

PRIV_PROC_TASKID

プロセスが、呼び出し元プロセスに新しいタスク ID を割り当てることができるようにします。

PRIV_PROC_ZONE

プロセスがシグナルをトレースしたり、ほかのゾーン内のプロセスに送信したりできるようにします。zones(5) を参照してください。

PRIV_SYS_ACCT

プロセスが、acct(2) を使用してアカウンティングを有効または無効にしたり、管理したりできるようにします。

PRIV_SYS_ADMIN

プロセスが、ノードおよびドメイン名の設定や、coreadm(1M) および nscd(1M) 設定の指定などのシステム管理タスクを実行できるようにします。

PRIV_SYS_AUDIT

プロセスが (カーネル) 監査デーモンを起動できるようにします。プロセスが監査状態 (監査ユーザー ID、監査端末 ID、監査セッション ID、監査事前選択マスク) を表示したり、設定したりできるようにします。プロセスが監査を無効にしたり、有効にしたりできるようにします。プロセスが監査パラメータ (キャッシュとキューのサイズ、イベントからクラスへのマッピング、およびポリシーオプション) を構成できるようにします。

PRIV_SYS_CONFIG

プロセスがさまざまなシステム構成タスクを実行できるようにします。ファイルシステム固有の管理手順 (ファイルシステム構成 ioctl、割り当て制限の呼び出し、スナップショットの作成と削除、PCFS ブートセクターの操作など) を許可します。

PRIV_SYS_DEVICES

プロセスがデバイス特殊ファイルを作成できるようにします。プロセスが、許可されたアクセスをチェックするために、カーネルの drv_priv(9F) 関数を呼び出すカーネルモジュールを正常に呼び出せるようにします。プロセスが、実際のコンソールデバイスを直接開けるようにします。プロセスが、排他的に開かれていたデバイスを開けるようにします。

PRIV_SYS_DL_CONFIG

プロセスがシステムのデータリンクインタフェースを構成できるようにします。

PRIV_SYS_IB_CONFIG

プロセスがすべての InfiniBand (IB) Management Datagram (MAD) API や、ホストベースの IB 管理および診断ツールにアクセスできるようにします。

PRIV_SYS_IB_INFO

プロセスが InfiniBand (IB) Management Datagram (MAD) API や、ホストベースの IB 管理および診断ツールにアクセスし、構成情報を読み取れるようにします。

PRIV_SYS_IP_CONFIG

プロセスがシステムの IP インタフェースと経路を構成できるようにします。プロセスが TCP/IP パラメータを構成できるようにします。プロセスが、アンカーされた STREAMS モジュールを一致する zoneid とともに pop できるようにします。

PRIV_SYS_IPC_CONFIG

プロセスが System V IPC メッセージキューバッファーのサイズを大きくすることができるようにします。

PRIV_SYS_LINKDIR

廃止: プロセスがディレクトリをリンク解除またはリンクすることを許可する場合に使用します。これを実装すると、ディレクトリでのリンクおよびリンク解除操作が禁止されます。

PRIV_SYS_MOUNT

プロセスが、通常であれば制限されるファイルシステム (つまり、namefs を除くほとんどのファイルシステム) をマウントしたり、アンマウントしたりできるようにします。プロセスがスワップデバイスを追加したり、削除したりできるようにします。

PRIV_SYS_NET_CONFIG

プロセスが、PRIV_SYS_IP_CONFIGPRIV_SYS_DL_CONFIGPRIV_SYS_PPP_CONFIG、および PRIV_SYS_IB_CONFIG で許可されるすべての操作に加え、rpcmod STREAMS モジュールの使用や、モジュールスタックの先頭以外の場所への STREAMS モジュールの挿入または削除を実行できるようにします。

PRIV_SYS_NFS

プロセスが NFS サービスを行うことができるようにします: NFS カーネルスレッドの起動、NFS ロック処理の実行、NFS で予約されたポート (ポート 2049 (nfs) およびポート 4045 (lockd)) へのバインド。

PRIV_SYS_PPP_CONFIG

プロセスが、pppd(1M) pppd(1M) を使用して PPP インスタンスを作成、構成、および破棄したり、sppptun(1M)sppptun(1M) を使用して PPPoE の plumb を制御したりできるようにします。この特権は、排他的な IP スタックインスタンスゾーンにデフォルトで付与されます。

PRIV_SYS_RES_BIND

プロセスがプロセッサセットにプロセスをバインドできるようにします。

PRIV_SYS_RES_CONFIG

プロセスが、この段落で概要が説明されている次の操作に加えて、プロセッサセットにプロセスを PRIV_SYS_RES_BIND としてバインドできるようにします。プロセスが、プロセッサセットを作成および削除したり、プロセッサセットに CPU を割り当てたり、PSET_NOESCAPE プロパティーをオーバーライドしたりできるようにします。プロセスが、p_online(2) を使用してシステム内の CPU の動作ステータスを変更できるようにします。プロセスがファイルシステムの割り当て制限を構成できるようにします。プロセスがリソースプールを構成したり、プールにプロセスをバインドしたりできるようにします。

PRIV_SYS_RESOURCE

プロセスが、setrlimit(2) および setrctl(2) を使用して、自身に課せられたリソース制限を超えられるようにします。

PRIV_SYS_SHARE

プロセスがファイルシステムを共有したり、共有解除したりできるようにします。

PRIV_SYS_SMB

プロセスが NetBIOS または SMB サービスを行うことができるようにします: SMB カーネルスレッドの起動、NetBIOS または SMB で予約されたポート (ポート 137、138、139 (NetBIOS)、および 445 (SMB)) へのバインド。

PRIV_SYS_SUSER_COMPAT

プロセスが、許可されたアクセスをチェックするために、カーネルの suser() 関数を呼び出すサードパーティー製のロード可能なモジュールを正常に呼び出せるようにします。この特権は、サードパーティー製のロード可能なモジュールの互換性のためにのみ存在し、Oracle Solaris では使用されません。

PRIV_SYS_TIME

プロセスが、stime(2)adjtime(2)ntp_adjtime(2) のいずれかの適切なシステムコールを使用してシステム時間を操作できるようにします。

PRIV_SYS_TRANS_LABEL

プロセスが、プロセスの機密ラベルと同等か、またはより優位なラベルを外部の文字列形式との間で変換できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_VIRT_MANAGE

プロセスが仮想化環境を管理できるようにします。

PRIV_WIN_COLORMAP

プロセスがカラーマップの制限をオーバーライドできるようにします。

プロセスがカラーマップをインストールまたは削除できるようにします。

プロセスが、ほかのプロセスによって割り当てられたカラーマップセルエントリを取得できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_CONFIG

プロセスが、X サーバーによって永続的に保持されているリソースを構成または破棄できるようにします。

プロセスがスクリーンセーバーのタイムアウト値を設定するために SetScreenSaver を使用できるようにします。

プロセスが表示アクセス制御リストを変更するために ChangeHosts を使用できるようにします。

プロセスが GrabServer を使用できるようにします。

プロセスが、ウィンドウ、ピクセルマップ、カラーマップ、プロパティー、カーソル、フォント、またはグラフィックコンテキストのリソースを保持できる SetCloseDownMode リクエストを使用できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_DAC_READ

プロセスが、所有していない (別のユーザー ID を持つ) ウィンドウリソースから読み取れるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_DAC_WRITE

プロセスが、所有していない (別のユーザー ID を持つ) ウィンドウリソースに書き込んだり、このようなウィンドウリソースを作成したりできるようにします。新しく作成されるウィンドウのプロパティーは、そのウィンドウのユーザー ID を使用して作成されます。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_DEVICES

プロセスがウィンドウ入力デバイスに対する操作を実行できるようにします。

プロセスがキーボードやポインタの制御を取得したり、設定したりできるようにします。

プロセスがポインタボタンやキーのマッピングを変更できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_DGA

プロセスがダイレクトグラフィックスアクセス (DGA) X プロトコルの拡張機能を使用できるようにします。フレームバッファーへの直接のプロセスアクセスは引き続き必要です。このため、プロセスがフレームバッファーへのアクセスを許可する MAC および DAC 特権を持っているか、またはそのプロセスにフレームバッファーが割り当てられている必要があります。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_DOWNGRADE_SL

プロセスが、ウィンドウリソースの機密ラベルを既存の機密ラベルより優位でない機密ラベルに設定できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_FONTPATH

プロセスがフォントパスを設定できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_MAC_READ

プロセスが、プロセスの機密ラベルと等しくない機密ラベルを持つウィンドウリソースから読み取れるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_MAC_WRITE

プロセスが、プロセスの機密ラベルと等しくない機密ラベルを持つウィンドウリソースを作成できるようにします。新しく作成されるウィンドウのプロパティーは、そのウィンドウの機密ラベルを使用して作成されます。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_SELECTION

プロセスが、選択確認ダイアログボックスの介入なしでウィンドウ間のデータ移動をリクエストできるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

PRIV_WIN_UPGRADE_SL

プロセスが、ウィンドウリソースの機密ラベルを既存の機密ラベルより優位な機密ラベルに設定できるようにします。

この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。

上に示された特権のうち、PRIV_FILE_LINK_ANYPRIV_FILE_READPRIV_FILE_WRITEPRIV_PROC_INFOPRIV_PROC_SESSIONPRIV_NET_ACCESSPRIV_PROC_FORKPRIV_PROC_EXEC の各特権が「基本」特権と見なされます。これらは、特権の設定されていないプロセスから常に使用可能であった特権です。デフォルトでは、プロセスには引き続き基本特権が割り当てられます。

setuid root exec を成功させる (つまり、0 の実効 UID と追加の特権を取得する) には、プロセスの制限セット (下記を参照) 内に PRIV_PROC_SETIDPRIV_PROC_AUDITPRIV_SYS_RESOURCE の各特権が存在する必要があります。

Oracle Solaris での特権の実装では、プロセス資格が次の 4 つの特権セットで拡張されています:

I、継承可能セット

exec で継承される特権。

P、許可セット

プロセスのための最大の特権セット。

E、実効セット

現在有効な特権。

L、制限セット

プロセスおよびその子孫が取得できる特権の上限。L への変更は、次回の exec で有効になります。

I、P、E の各セットは通常、特権の設定されていないプロセスの基本的な特権セットと同じです。制限セットは通常、完全な特権セットです。

各プロセスには、PA (特権を認識する) と NPA (PA 以外) の値を取ることができる特権認識状態 (PAS) があります。PAS は、古いスーパーユーザーモデルとの完全な互換性と、実効 UID の完全な無視のどちらかを選択できるようにするための移行メカニズムです。

説明を簡単にするために、「監視された実効セット」(oE) および「監視された許可セット」(oP) の概念と、実装セット iE および iP を導入します。

プロセスは、setppriv(2) を使用して実効セット、許可セット、または制限特権セットを操作するか、あるいは setpflags(2) を使用することによって、特権を認識するようになります。いずれの場合も、特権を認識するようになるプロセスでは oE および oP は不変です。特権を認識するようになるプロセスでは、次の割り当てが実行されます:

iE = oE
iP = oP

プロセスが特権を認識する場合、UID の変更の下で oE および oP は不変です。プロセスが特権を認識しない場合、oE および oP は次のように監視されます:

oE = euid == 0 ? L : iE
oP = (euid == 0 || ruid == 0 || suid == 0) ? L : iP

特権を認識しないプロセスに 0 の実効 UID が割り当てられている場合、そのプロセスは、その制限セット (特権の上限) に含まれている特権を行使できます。特権を認識しないプロセスにいずれかの UID 0 が割り当てられている場合は、潜在的に L 内のすべての特権を行使できることを示します。

setpflags() を使用すると、特権を認識しない状態にプロセスを戻すことができます。カーネルは常に、exec(2) でこれを試みます。この操作は、次の条件が満たされた場合にのみ許可されます:

  • いずれかの UID が 0 に等しい場合は、P が L に等しいことが必要です。

  • 実効 UID が 0 に等しい場合は、E が L に等しいことが必要です。

プロセスが特権の認識を放棄した場合は、次の割り当てが実行されます:

if (euid == 0) iE = L & I
if (any uid == 0) iP = L & I

0 の UID を持っていないときに取得された特権は、制限セットで制限された、プロセスの継承可能セットです。

プロセスの (監視された) 実効特権セット内の特権によってのみ、プロセスは制限された操作の実行を許可されます。プロセスは、いずれかの特権操作関数を使用して特権セットに特権を追加したり、特権セットから特権を削除したりすることができます。特権は、常に削除できます。実効セットや継承可能セットに追加できるのは、許可セットにある特権だけです。制限セットは拡張できません。継承可能セットは、許可セットより大きくすることができます。

プロセスが exec(2) を実行すると、カーネルは次の特権セットの変更を行う前に、まず特権の認識を放棄しようとします。

E' = P' = I' = L & I
L is unchanged

プロセスが自身の特権を操作していない場合は、E、P、および I がすでに同一であるため、特権セットは実質的に同じままになります。

制限セットは、exec の実行時に適用されます。

特権を認識しないアプリケーションを下位互換性がある方法で実行するには、特権を認識するアプリケーションが、特権を認識しないアプリケーションを I=basic で起動するようにしてください。

ほとんどの特権の場合は、その特権が存在しなければ単に失敗するだけです。場合によっては、特権が存在しないためにシステムコールが異なった動作をすることがあります。その他の場合として、特権を削除すると、強制的に setuid ルートアプリケーションの重大な誤動作が引き起こされることがあります。このタイプの特権は「安全ではない」と見なされます。プロセスの制限セットに、いずれかの安全ではない特権が含まれていない場合、システムは setuid ルートアプリケーションの setuid ビットに従いません。実効ユーザー ID を変更することも、特権を増やすこともなく、setuid ルートアプリケーションの実行が続行されます。安全ではない特権として、PRIV_PROC_SETIDPRIV_SYS_RESOURCE および PRIV_PROC_AUDIT が識別されています。

特権エスカレーション

特定の状況では、1 つの特権によってプロセスが、そのプロセスに明示的には付与されていなかった 1 つ以上の追加の特権を取得する可能性があります。特権のこのようなエスカレーションを回避するために、セキュリティーポリシーには、これらの追加の特権に対する明示的なアクセス権が必要になります。

エスカレーションの一般的な例として、「生の」インタフェースによるシステムリソースの変更を許可するメカニズムがあります。たとえば、/dev/kmem によるカーネルデータ構造の変更や、/dev/dsk/* によるファイルの変更があります。エスカレーションはまた、プロセスが、制御プロセスより多くの特権を使用してプロセスを制御する場合にも発生します。この特殊な場合として、UID 0 によって所有されているオブジェクトの操作または作成や、setuid(2) を使用して UID 0 を取得しようとする場合が挙げられます。UID 0 はすべてのシステム構成ファイルを所有するだけでなく、通常のファイル保護メカニズムでは UID 0 を持つプロセスがシステム構成を変更できるため、UID 0 には特別な扱いが必要です。適切なファイル変更を使用すると、0 の実効 UID で実行されている特定のプロセスがすべての特権を取得できます。

プロセスが UID 0 を取得する可能性のある状況では、セキュリティーポリシーに追加の特権 (最大の場合、完全な特権セット) が必要です。システムファイルの保護のための追加のメカニズムが使用できる場合には、このような制限を緩和または解消できる可能性があります。Oracle Solaris の現在のリリースには、このようなメカニズムはありません。

UID 0 プロセスの使用は、できるだけ制限するようにしてください。別の UID の下で実行されていて、しかも必要な特権を持つプログラムに置き換えるようにしてください。

サブプロセスを exec で実行する必要がないデーモンの場合は、その許可セットと制限セットから PRIV_PROC_EXEC 特権を削除するようにしてください。

割り当てられる特権と保護手段

ユーザーに特権が割り当てられる場合、システム管理者はそのユーザーに、意図したより多くの権限を与える可能性があります。管理者は、保護手段が必要かどうかを考慮するべきです。たとえば、ユーザーに PRIV_PROC_LOCK_MEMORY 特権が与えられる場合、そのユーザーがすべてのメモリーをロックしないようにするために、管理者は project.max-locked-memory リソース制御も設定することを考慮するべきです。

拡張ポリシー

構成ファイル内またはコマンド行に特権が一覧表示されているときに、拡張ポリシーの構文を使用できる場合があります。拡張ポリシーとは、特権セットを中括弧で囲み、そのあとにコロンとオブジェクトを続けたものです。拡張ポリシーによって、指定されたオブジェクトに対してその特権の一覧を使用する機能が追加されます。現在は、ネットワークポート、UID、およびファイルオブジェクトのための拡張ポリシーがサポートされています。

たとえば、

{file_dac_read}:/var/core/*

/var/core の下にあるファイルへのアクセス時に特権 file_dac_read を使用できるようにします。

{net_privaddr}:80/tcp,{net_privaddr}:443/tcp

プロセスが TCP ポート 80 および 443 にネットワークエンドポイントをバインドできるようにします。

{proc_setid}:80-100

プロセスが UID を UID 80 から 100 まで (80 と 100 を含む) に変更できるようにします。

{proc_setid}:casper

プロセスが UID をユーザー名「casper」の UID に変更できるようにします。

拡張ポリシーに一覧表示されている特権セットは、そのポリシーの特権セットにゾーン内で使用可能なすべての特権が含まれていないかぎり、その拡張ポリシーがインストールされたときに継承可能セットから削除され、その結果、許可セットと実効セットから削除されます。たとえば、{zone}:/etc/shadow という形式の拡張ポリシーをインストールした場合は、どの特権も削除されません。これに対して、拡張ポリシーの形式が {file_dac_read}:/etc/shadow である場合は、PRIV_FILE_DAC_READ 特権が削除されます。

拡張ポリシーは、実効セットに特権が存在しない場合にのみ有効になります。

{all}:/some/file などの拡張ポリシーを指定することは可能ですが、システムは引き続き、setuid ビットの追加など、一部のアプリケーションを制限します。

拡張ポリシーに一覧表示されているすべての特権は、プロセスがそのポリシーをインストールするときに、そのプロセス内で有効である必要があります。たとえば、ポリシーをインストールするために ppriv(1) が使用される場合は、その実効セットに記載されたすべての特権を持っている必要があります。ppriv のオブジェクトであるプロセスには、このような制限は適用されません。ただし、その制限セットによって拡張ポリシー内のすべての特権がオーバーライドされます。

一部のコンテキストでは、拡張ポリシーの構文の一部をエスケープする必要があります。たとえば、exec_attr(4) では、コロン (:) をバックスラッシュ (\) でエスケープする必要があります。また、コンテキストによっては、ファイル名にある一部の文字もバックスラッシュでのエスケープが必要になる可能性があります。

拡張ポリシーは、ファイルシステム内のすべてのレイヤーで評価されます。lofs(7FS) ファイルシステムの場合、指定されたポリシーでは、そのポリシーが lofs ファイルシステムとベースとなるファイルシステムの両方を指定する必要があるという点を考慮に入れる必要があります。

次の一覧には、オブジェクトとそれに関連する特権のタイプが含まれています。

オブジェクト
構文
特権
ユーザー名
名前
proc_setid
Uid
uid
proc_setid
uid の範囲
uid1-uid2
proc_setid
ネットワークポート1
port/udpport/tcp
net_privaddr
port/sctpport/*
ポートの範囲
port1-port2/<proto>
net_privaddr
ファイル名
パス名
ファイル特権、proc_exec
ワイルドカード2
パス名*
ファイル特権、proc_exec

1 services(4) で定義されている数値

2 指定されたパス名で始まるすべてのファイル名に一致する

特権のデバッグ

システムコールがアクセス権のエラーで失敗した場合は、その問題の原因がただちに明らかになるとは限りません。このような問題をデバッグするには、特権のデバッグと呼ばれるツールを使用できます。あるプロセスに対して特権のデバッグが有効になっている場合、カーネルは、存在しない特権をそのプロセスの制御端末に報告します。(プロセスに対するデバッグは、ppriv(1)–D オプションを使用して有効にします。)さらに、管理者は次を使用して system(4) の変数 priv_debug を設定することにより、システム全体の特権のデバッグを有効化できます。

set priv_debug = 1

実行中のシステムでは、mdb(1) を使用すると、この変数を変更できます。

特権の管理

ユーザーまたは役割に特権を割り当てたり、ユーザーまたは役割への特権を変更したりするには、それぞれ、usermod(1M) または rolemod(1M) を使用します。システム上でサポートされている特権を列挙するには ppriv(1) を、プログラムにどの特権が必要かを確認するには truss(1) を使用します。

関連項目

mdb(1), ppriv(1), add_drv(1M), ifconfig(1M), lockd(1M), nfsd(1M), pppd(1M), rem_drv(1M), smbd(1M), sppptun(1M), update_drv(1M), Intro(2), access(2), acct(2), acl(2), adjtime(2), chmod(2), chown(2), chroot(2), creat(2), exec(2), fcntl(2), fork(2), fpathconf(2), getacct(2), getpflags(2), getppriv(2), getsid(2), kill(2), link(2), memcntl(2), mknod(2), mount(2), msgctl(2), nice(2), ntp_adjtime(2), open(2), p_online(2), priocntl(2), priocntlset(2), processor_bind(2), pset_bind(2), pset_create(2), readlink(2), resolvepath(2), rmdir(2), semctl(2), setegid(2), seteuid(2), setgid(2), setgroups(2), setpflags(2), setppriv(2), setrctl(2), setregid(2), setreuid(2), setrlimit(2), settaskid(2), setuid(2), shmctl(2), shmget(2), shmop(2), sigsend(2), stat(2), statvfs(2), stime(2), swapctl(2), sysinfo(2), uadmin(2), ulimit(2), umount(2), unlink(2), utime(2), utimes(2), bind(3SOCKET), door_ucred(3C), priv_addset(3C), priv_set(3C), priv_getbyname(3C), priv_getbynum(3C), priv_set_to_str(3C), priv_str_to_set(3C), socket(3SOCKET), t_bind(3NSL), timer_create(3C), ucred_get(3C), exec_attr(4), proc(4), services(4), system(4), user_attr(4), lofs(7FS)ddi_cred(9F), drv_priv(9F), priv_getbyname(9F), priv_policy(9F), priv_policy_choice(9F), priv_policy_only(9F)

Oracle Solaris 11.3 でのシステムおよび接続されたデバイスのセキュリティー保護

プロセスからいずれかの基本特権を削除することは、そのプロセスを標準に準拠しない状態のままにするだけでなく、予期しないアプリケーション障害を引き起こす可能性があるため、その潜在的な副作用を完全に理解した上でのみ行うようにしてください。