Go to main content

マニュアルページ セクション 7: 標準、環境、マクロ、文字セット、その他

印刷ビューの終了

更新: 2022年7月27日
 
 

privileges (7)

名前

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

説明

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

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

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

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

PRIV_CMI_ACCESS

Allow a process to perform basic segment operations defined in Oracle Coherent Memory Interface (CMI), including create/destroy, map/unmap, read/write, and token management.See cmi(7).

PRIV_CMI_OWNER

Allow a process to delete any memory reservation associated with CMI segments created by any user.

PRIV_CONTRACT_EVENT

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

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

PRIV_CONTRACT_IDENTITY

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

PRIV_CONTRACT_OBSERVER

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

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

PRIV_CPC_CPU

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

PRIV_DAX_ACCESS

Allow a process to perform all operations supported by the Data Analytics Accelerator (DAX) hardware.

This privilege will be available on systems that support DAX in hardware.

PRIV_DTRACE_KERNEL

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

PRIV_DTRACE_PROC

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

PRIV_DTRACE_USER

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

PRIV_FILE_AUDIT

プロセスがファイルの監査 ACL を取得および設定できるようにします。

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

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

PRIV_FILE_FLAG_SET

Allows a process to set immutable, nounlink or appendonly file attributes.

PRIV_FILE_LINK_ANY

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

PRIV_FILE_OWNER

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

PRIV_FILE_READ

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

PRIV_FILE_SETID

プロセスが、セットユーザー ID およびセットグループ ID ビットをクリアせずにファイルの所有権を変更したり、ファイルに書き込んだりできるようにします。プロセスが、プロセスの実効グループでも、プロセスのいずれかの補助グループでもないグループに属しているファイルまたはディレクトリにセットグループ ID ビットを設定できるようにします。Allow a process to set the set-user-ID bit on a file with different ownership in the presence of PRIV_FILE_OWNER.追加の制限は、setuid 0 のファイルを作成または変更する場合に適用されます。

PRIV_FILE_UPGRADE_SL

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

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_MRP_ACCESS

Allows a process in a non-global zone to lookup and access Memory Reservation Pools (MRPs) that reside in the global zone.This is used for booting Kernel Zones that are configured to allocate memory from an MRP.

PRIV_IPC_OWNER

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

PRIV_KSTAT_RD_SENSITIVE

プロセスが、kstat のヘッダーを確認し、メタデータに KSTAT2_MF_PRIV フラグが設定された kstat を読み取れるようにします。

PRIV_KSTAT_MANAGE

プロセスが、オプションの kstat を有効化および無効化できるようにします。このプロセスでは solaris.smf.manage.kstats 承認も必要になります。

PRIV_NET_ACCESS

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

PRIV_NET_BINDMLP

プロセスが、プロセスのゾーンのマルチレベルポート (MLP) として構成されているポートにバインドできるようにします。この特権は、共有アドレスとゾーン固有のアドレスの両方の MLP に適用されます。See tncfg(8) for information on configuring MLP ports.

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

PRIV_NET_ICMPACCESS

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

PRIV_NET_MAC_AWARE

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

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

PRIV_NET_OBSERVABILITY

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

PRIV_NET_PRIVADDR

プロセスが特権ポート番号にバインドできるようにします。The privileged port numbers are 1-1023 (the traditional UNIX privileged ports) as well as those ports marked as “extra-priv-ports” by ipadm(8), with the exception of the ports reserved for use by NFS and SMB, which are controlled via the PRIV_SYS_NFS and PRIV_SYS_SMB privileges instead.

PRIV_NET_RAWACCESS

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

PRIV_PROC_AUDIT

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

PRIV_PROC_CHROOT

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

PRIV_PROC_CLOCK_HIGHRES

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

PRIV_PROC_EXEC

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

PRIV_PROC_FORK

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

PRIV_PROC_INFO

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

PRIV_PROC_SELF is also required when using this privilege.

PRIV_PROC_LOCK_MEMORY

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

PRIV_PROC_OWNER

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

PRIV_PROC_PRIOCNTL

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

PRIV_PROC_SELF

Allow a process to access files under /proc, including /proc/self.

PRIV_PROC_SESSION

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

PRIV_PROC_SELF is also required when using this privilege.

PRIV_PROC_SETID

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

PRIV_PROC_TASKID

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

PRIV_PROC_ZONE

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

PRIV_SYS_ACCT

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

PRIV_SYS_ADMIN

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

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 パラメータを構成できるようにします。Allow a process to pop anchored STREAMS modules with matching zoneid.

PRIV_SYS_IPC_CONFIG

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

PRIV_SYS_LINKDIR

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

PRIV_SYS_MOUNT

Allow a process to mount and unmount filesystems that would otherwise be restricted (that is, most filesystems except namefs).プロセスがスワップデバイスを追加したり、削除したりできるようにします。

PRIV_SYS_NET_CONFIG

Allow a process to do all that PRIV_SYS_IP_CONFIG, PRIV_SYS_DL_CONFIG, PRIV_SYS_PPP_CONFIG, and PRIV_SYS_IB_CONFIG allow, plus the following: use the rpcmod STREAMS module and insert/remove STREAMS modules on locations other than the top of the module stack.

PRIV_SYS_NFS

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

PRIV_SYS_PPP_CONFIG

Obsolete: Allow a process to create, configure, and destroy PPP instances and control PPPoE plumbing.この特権は、排他的な IP スタックインスタンスゾーンにデフォルトで付与されます。

PRIV_SYS_RES_BIND

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

PRIV_SYS_RES_CONFIG

プロセスが、この段落で概要が説明されている次の操作に加えて、プロセッサセットにプロセスを PRIV_SYS_RES_BIND としてバインドできるようにします。Allow a process to create and delete processor sets, assign CPUs to processor sets and override the PSET_NOESCAPE property.プロセスが、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

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

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

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

この特権は廃止されています。

PRIV_WIN_CONFIG

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

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

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

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

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

この特権は廃止されています。

PRIV_WIN_DAC_READ

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

この特権は廃止されています。

PRIV_WIN_DAC_WRITE

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

この特権は廃止されています。

PRIV_WIN_DEVICES

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

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

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

この特権は廃止されています。

PRIV_WIN_DGA

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

この特権は廃止されています。

PRIV_WIN_DOWNGRADE_SL

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

この特権は廃止されています。

PRIV_WIN_FONTPATH

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

この特権は廃止されています。

PRIV_WIN_MAC_READ

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

この特権は廃止されています。

PRIV_WIN_MAC_WRITE

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

この特権は廃止されています。

PRIV_WIN_SELECTION

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

この特権は廃止されています。

PRIV_WIN_UPGRADE_SL

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

この特権は廃止されています。

Of the privileges listed above, the privileges PRIV_DAX_ACCESS, PRIV_FILE_LINK_ANY, PRIV_FILE_READ, PRIV_FILE_WRITE, PRIV_NET_ACCESS, PRIV_PROC_EXEC, PRIV_PROC_FORK, PRIV_PROC_INFO, PRIV_PROC_SELF, PRIV_PROC_SESSION, and PRIV_SYS_IB_INFO are considered “basic” privileges.これらは、特権の設定されていないプロセスから常に使用可能であった特権です。デフォルトでは、プロセスには引き続き基本特権が割り当てられます。

The set of basic privileges has changed over time as new privileges have been defined.The current set of basic privileges used on a system is listed by running the command ppriv -l basic.

The privileges PRIV_PROC_SETID, PRIV_PROC_AUDIT, and PRIV_SYS_RESOURCE must be present in the Limit set (see below) of a process in order for setuid root execs to be successful; that is, get an effective UID of 0 and additional privileges.

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_RESOURCEPRIV_PROC_AUDIT、および PRIV_FILE_AUDIT が確認されています。

Privilege Escalation

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

Common examples of escalation are those mechanisms that allow modification of system resources through “raw” interfaces; for example, changing kernel data structures through /dev/kmem or changing files through /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 特権を削除するようにしてください。

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

ユーザーに特権が割り当てられる場合、システム管理者はそのユーザーに、意図したより多くの特権を与える可能性があります。管理者は、保護手段が必要かどうかを考慮するべきです。For example, if the PRIV_PROC_LOCK_MEMORY privilege is given to a user, the administrator should consider setting the project.max-locked-memory resource control as well, to prevent that user from locking all memory.

Extended Policy

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

/var/user を操作するために、現在のゾーンで使用可能な特権をすべて付与します。ゾーンなどの特別なキーワードの定義については、priv_str_to_set(3C) マニュアルページを参照してください。

{zone}:/system/volatile/service.pid

スーパーユーザーとして実行されていないアプリケーションが、root によって所有されているモード 755 のディレクトリ /system/volatile 内に service.pid ファイルを作成できるようにします。

{zone}:/system/volatile/ikev2

スーパーユーザーとして実行されていないアプリケーションが、root によって所有されているモード 755 のディレクトリ /system/volatile 内にファイルまたはディレクトリ ikev2 を作成できるようにします。新たに作成されたファイルまたはディレクトリの所有者は、そのファイルまたはディレクトリを作成したユーザーになるので、ワイルドカードを使用する必要はありません。

拡張ポリシーに一覧表示されている特権セットは、そのポリシーの特権セットにゾーン内で使用可能なすべての特権が含まれていないかぎり、その拡張ポリシーがインストールされたときに継承可能セットから削除され、その結果、許可セットと実効セットから削除されます。For example, when installing an Extended Policy of the form {zone}:/etc/shadow, no privileges are dropped; if, on the other hand, the Extended Policy has the form {file_dac_read}:/etc/shadow, the PRIV_FILE_DAC_READ privilege is removed.

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

While it is possible to specify an Extended Policy such as {all}:/some/file, the system will still restrict some applications such as adding a setuid bit.

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

一部のコンテキストでは、拡張ポリシーの構文の一部をエスケープする必要があります。たとえば、exec_attr(5) では、コロン (:) をバックスラッシュ (\) でエスケープする必要があります。Some characters in filenames may also need to be escaped using a backslash, depending on the context.

The Extended Policy is evaluated at every layer in the filesystem; in the case of lofs(4FS) file systems, the specified policy needs to takes this into account: the policy needs to specify both the lofs filesystem and the underlying filesystem.

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

Object
構文
特権
ユーザー名
名前
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
Wildcard2
pathname*
ファイル特権、proc_exec

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

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

Privilege Debugging

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

set priv_debug = 1

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

Privilege Administration

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

関連項目

mdb(1), ppriv(1), 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), spawn(2), stat(2), statvfs(2), stime(2), swapctl(2), sysinfo(2), uadmin(2), ulimit(2), umount(2), unlink(2), utime(2), utimes(2), bind(3C), door_ucred(3C), priv_addset(3C), priv_getbyname(3C), priv_getbynum(3C), priv_set(3C), priv_set_to_str(3C), priv_str_to_set(3C), socket(3C), t_bind(3C), timer_create(3C), ucred_get(3C), lofs(4FS), exec_attr(5), proc(5), services(5), system(5), user_attr(5), add_drv(8), ifconfig(8), lockd(8), nfsd(8), rem_drv(8), smbd(8), tncfg(8), update_drv(8), ddi_cred(9F), drv_priv(9F), priv_getbyname(9F), priv_policy(9F), priv_policy_choice(9F), priv_policy_only(9F)

About Privileges in Developer’s Guide to Oracle Solaris 11.4 Security

Process Rights Management in Securing Users and Processes in Oracle Solaris 11.4

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

History

The process privilege model was added in Solaris 10 3/05.

Support for Extended Policies was added in Oracle Solaris 11.1.0.

Support for the following privileges was first added in the listed Oracle Solaris release:

PRIVILEGE
RELEASE
PRIV_PROC_SELF 11.4.5
PRIV_IPC_MRP_ACCESS 11.4.1
PRIV_FILE_AUDIT, PRIV_KSTAT_MANAGE, PRIV_KSTAT_RD_SENSITIVE 11.4.0
PRIV_CMI_ACCESS, PRIV_CMI_OWNER 11.3.11
PRIV_DAX_ACCESS 11.2.8
PRIV_SYS_IB_CONFIG, PRIV_SYS_IB_INFO 11.0.12
PRIV_CONTRACT_IDENTITY, PRIV_FILE_FLAG_SET, PRIV_FILE_READ, PRIV_FILE_WRITE, PRIV_NET_MAC_IMPLICIT, PRIV_NET_OBSERVABILITY, PRIV_SYS_DL_CONFIG PRIV_SYS_FLOW_CONFIG, PRIV_SYS_IPTUN_CONFIG, PRIV_SYS_PPP_CONFIG, PRIV_SYS_RES_BIND, PRIV_SYS_SHARE, PRIV_SYS_SMB 11.0.0
PRIV_NET_ACCESS 10 9/10 (Update 9)
PRIV_SYS_IP_CONFIG 10 8/07 (Update 4)
PRIV_FILE_DOWNGRADE_SL, PRIV_FILE_UPGRADE_SL, PRIV_GRAPHICS_ACCESS, PRIV_GRAPHICS_MAP, PRIV_NET_BINDMLP, PRIV_NET_MAC_AWARE, PRIV_SYS_TRANS_LABEL, PRIV_WIN_COLORMAP, PRIV_WIN_CONFIG, PRIV_WIN_DAC_READ, PRIV_WIN_DAC_WRITE, PRIV_WIN_DEVICES, PRIV_WIN_DGA, PRIV_WIN_DOWNGRADE_SL, PRIV_WIN_FONTPATH, PRIV_WIN_MAC_READ, PRIV_WIN_MAC_WRITE, PRIV_WIN_SELECTION, PRIV_WIN_UPGRADE_SL 10 11/06 (Update 3)
PRIV_CONTRACT_EVENT, PRIV_CONTRACT_OBSERVER, PRIV_CPC_CPU, PRIV_DTRACE_KERNEL, PRIV_DTRACE_PROC, PRIV_DTRACE_USER, PRIV_FILE_CHOWN, PRIV_FILE_CHOWN_SELF, PRIV_FILE_DAC_EXECUTE, PRIV_FILE_DAC_READ, PRIV_FILE_DAC_SEARCH, PRIV_FILE_DAC_WRITE, PRIV_FILE_LINK_ANY, PRIV_FILE_OWNER, PRIV_FILE_SETID, PRIV_IPC_DAC_READ, PRIV_IPC_DAC_WRITE, PRIV_IPC_OWNER, PRIV_NET_ICMPACCESS, PRIV_NET_PRIVADDR, PRIV_NET_RAWACCESS, PRIV_PROC_AUDIT, PRIV_PROC_CHROOT, PRIV_PROC_CLOCK_HIGHRES, PRIV_PROC_EXEC, PRIV_PROC_FORK, PRIV_PROC_INFO, PRIV_PROC_LOCK_MEMORY, PRIV_PROC_OWNER, PRIV_PROC_PRIOCNTL, PRIV_PROC_SESSION, PRIV_PROC_SETID, PRIV_PROC_TASKID, PRIV_PROC_ZONE, PRIV_SYS_ACCT, PRIV_SYS_ADMIN, PRIV_SYS_AUDIT, PRIV_SYS_CONFIG, PRIV_SYS_DEVICES, PRIV_SYS_IPC_CONFIG, PRIV_SYS_LINKDIR, PRIV_SYS_MOUNT, PRIV_SYS_NET_CONFIG, PRIV_SYS_NFS, PRIV_SYS_RESOURCE, PRIV_SYS_RES_CONFIG, PRIV_SYS_SUSER_COMPAT, PRIV_SYS_TIME 10 3/05