privileges - プロセスの特権モデル
Oracle Solaris ソフトウェアには、プロセスのアクションをきめ細かく制御できるようにするための特権セットが実装されています。特定の特権の所有により、プロセスは、特定の一連の制限された操作を実行できるようになります。
開発者は、Oracle Solaris オペレーティングシステム内の主に特権に基づくセキュリティーモデルを変更することによって、プロセスをすべての特権 (スーパーユーザー) や特権なし (0 以外の UID) ではなく、実際に必要な特権操作に制限する機会が得られます。さらに、以前は制限されていなかった一連の操作にも特権が必要になりました。これらの特権は「基本」特権と呼ばれ、すべてのプロセスにデフォルトで付与されます。
まとめると、「基本」特権を除く定義されているすべての特権が、従来は root ユーザーに関連付けられた特権セットを構成します。「基本」特権は、以前、特権の設定されていないプロセスに与えられた「特権」です。
定義されている特権は次のとおりです:
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).
Allow a process to delete any memory reservation associated with CMI segments created by any user.
プロセスが、イベントの信頼できる配信をイベントエンドポイントにリクエストできるようにします。
プロセスが、ユーザーによって大量に生成される可能性のあるイベントをテンプレートのクリティカルイベント設定期間内に含めることができるようにします。
プロセスがプロセス契約テンプレートのサービス FMRI 値を設定できるようにします。
プロセスが、プロセスの実効ユーザー ID 以外のユーザーによって作成され、所有されている契約によって生成された契約イベントを監視できるようにします。
プロセスが、プロセスの実効ユーザー ID 以外のユーザーによって作成され、所有されている契約に属する契約イベントエンドポイントを開けるようにします。
プロセスが CPU ごとのハードウェアパフォーマンスカウンタにアクセスできるようにします。
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.
DTrace のカーネルレベルのトレースを許可します。
DTrace のプロセスレベルのトレースを許可します。プロセスレベルのトレースのプローブを、ユーザーがアクセス権を持っているプロセス内に配置し、有効にできるようにします。
DTrace のユーザーレベルのトレースを許可します。ユーザーがアクセス権を持っているプロセスを検査するために、システムコールおよびプロファイル DTrace プロバイダの使用を許可します。
プロセスがファイルの監査 ACL を取得および設定できるようにします。
プロセスがファイルの所有者ユーザー ID を変更できるようにします。プロセスが、ファイルのグループ ID をプロセスの実効グループ ID 以外のグループ ID か、またはプロセスのいずれかの補助グループ ID に変更できるようにします。
プロセスが自身のファイルを渡せるようにします。この特権を持つプロセスは、{_POSIX_CHOWN_RESTRICTED} が有効でないかのように動作します。
プロセスが、通常であればプロセスの実行権を禁止するアクセス権ビットまたは ACL を持つ実行可能ファイルを実行できるようにします。
プロセスが、通常であればプロセスの読み取り権を禁止するアクセス権ビットまたは ACL を持つファイルまたはディレクトリを読み取れるようにします。
プロセスが、通常であればプロセスの検索権を許可しないアクセス権ビットまたは ACL を持つディレクトリを検索できるようにします。
プロセスが、プロセスの書き込み権を許可しないアクセス権ビットまたは ACL を持つファイルまたはディレクトリを書き込めるようにします。0 の実効 UID が存在しない場合に UID 0 によって所有されているファイルを書き込むには、すべての特権が必要です。
プロセスが、ファイルまたはディレクトリの機密ラベルを既存の機密ラベルより優位でない機密ラベルに設定できるようにします。
Allows a process to set immutable, nounlink or appendonly file attributes.
プロセスが、プロセスの実効 UID とは異なる UID によって所有されているファイルへのハードリンクを作成できるようにします。
ファイルの所有者でないプロセスが、そのファイルのアクセスや変更時間を変更できるようにします。ディレクトリの所有者でないプロセスが、そのディレクトリのアクセスや変更時間を変更できるようにします。ファイルまたはディレクトリの所有者でないプロセスが、「実行後にテキストイメージを保存する」(スティッキー) ビットが設定された親ディレクトリを持つファイルまたはディレクトリの削除または名前変更を行うことができるようにします。ファイルの所有者でないプロセスが、そのファイル上に namefs をマウントできるようにします。ファイルまたはディレクトリの所有者でないプロセスが、そのファイルまたはディレクトリのアクセス権ビットまたは ACL を変更できるようにします。
プロセスが、プロセスの読み取り権を許可するアクセス権または ACL を持つファイルまたはディレクトリを読み取れるようにします。
プロセスが、セットユーザー 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 のファイルを作成または変更する場合に適用されます。
プロセスが、ファイルまたはディレクトリの機密ラベルを既存の機密ラベルより優位な機密ラベルに設定できるようにします。
プロセスが、プロセスの書き込み権を許可するアクセス権または ACL を持つファイルまたはディレクトリを書き込めるようにします。
プロセスがグラフィックスデバイスへの特権付き ioctl を作成できるようにします。通常、この特権を持つ必要があるのは xserver プロセスだけです。この特権を持つプロセスは、特権付きグラフィックスデバイスマッピングも実行できます。
プロセスが、グラフィックスデバイスから特権付きマッピングを実行できるようにします。
プロセスが、通常であればプロセスの読み取り権を許可しないアクセス権ビットを持つ System V IPC メッセージキュー、セマフォーセット、または共有メモリーセグメントを読み取れるようにします。
プロセスが、通常であればプロセスの書き込み権を許可しないアクセス権ビットを持つ System V IPC メッセージキュー、セマフォーセット、または共有メモリーセグメントを書き込めるようにします。
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.
System V IPC メッセージキュー、セマフォーセット、または共有メモリーセグメントの所有者でないプロセスが、メッセージキュー、セマフォーセット、または共有メモリーセグメントを削除したり、その所有権を変更したり、そのアクセス権ビットを変更したりできるようにします。
プロセスが、kstat のヘッダーを確認し、メタデータに KSTAT2_MF_PRIV フラグが設定された kstat を読み取れるようにします。
プロセスが、オプションの kstat を有効化および無効化できるようにします。このプロセスでは solaris.smf.manage.kstats 承認も必要になります。
プロセスが TCP、UDP、SDP、または SCTP ネットワークエンドポイントを開けるようにします。
プロセスが、プロセスのゾーンのマルチレベルポート (MLP) として構成されているポートにバインドできるようにします。この特権は、共有アドレスとゾーン固有のアドレスの両方の MLP に適用されます。See tncfg(8) for information on configuring MLP ports.
この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。
プロセスが ICMP パケットを送受信できるようにします。
プロセスが、setpflags(2) を使用して NET_MAC_AWARE プロセスフラグを設定できるようにします。また、この特権により、プロセスは setsockopt(3C) を使用して SO_MAC_EXEMPT ソケットオプションも設定できるようになります。NET_MAC_AWARE プロセスフラグと SO_MAC_EXEMPT ソケットオプションはどちらも、ローカルプロセスのラベルがピアのデフォルトラベルより優位な場合や、ローカルプロセスが大域ゾーンで実行されている場合に、ローカルプロセスがラベルの付いていないピアと通信できるようにします。
この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。
プロセスが、ネットワークトラフィックの受信やトラフィックの送信のみが禁止されているデバイスを開けるようにします。
プロセスが特権ポート番号にバインドできるようにします。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.
プロセスがネットワークレイヤーに直接アクセスできるようにします。
プロセスが監査レコードを生成できるようにします。プロセスが独自の監査事前選択情報を取得できるようにします。
プロセスが自身のルートディレクトリを変更できるようにします。
プロセスが高精度タイマーを使用できるようにします。
プロセスが、シグナルを送信できるプロセス以外のプロセスのステータスを検査できるようにします。検査できないプロセスは /proc に表示できないため、存在していないように見えます。
PRIV_PROC_SELF is also required when using this privilege.
プロセスが物理メモリー内のページをロックできるようにします。
プロセスが、所有権には関係なく、ほかのプロセスにシグナルを送信したり、ほかのプロセスにあるプロセスの状態を検査して変更したりできるようにします。別のプロセスを変更する場合は、追加の制限が適用されます: 接続しているプロセスの実効特権セットは、ターゲットプロセスの実効セット、許可セット、および継承可能セットのスーパーセットである必要があります。制限セットは、ターゲットの制限セットのスーパーセットである必要があります。ターゲットプロセスでいずれかの UID が 0 に設定されている場合は、実効 UID が 0 でないかぎり、すべての特権が表明されている必要があります。プロセスが CPU に任意のプロセスをバインドできるようにします。
プロセスが、自身の優先度を現在のレベルを超えて引き上げることができるようにします。プロセスが、自身のスケジューリングクラスを任意のスケジューリングクラス (RT クラスを含む) に変更できるようにします。
Allow a process to access files under /proc, including /proc/self.
プロセスが、シグナルまたはトレースプロセスをセッションの外部に送信できるようにします。
PRIV_PROC_SELF is also required when using this privilege.
UID 0 ですべての特権が表明されている必要がある場合、プロセスが自身の UID を自由に設定できるようにします。また、プロセスフラグ PRIV_PFEXEC_AUTH の設定も可能にします。
プロセスが、呼び出し元プロセスに新しいタスク ID を割り当てることができるようにします。
プロセスがシグナルをトレースしたり、ほかのゾーン内のプロセスに送信したりできるようにします。zones(7) を参照してください。
プロセスが、acct(2) を使用してアカウンティングを有効または無効にしたり、管理したりできるようにします。
プロセスが、ノードやドメイン名の設定、coreadm(8) および nscd(8) 設定の指定などのシステム管理タスクを実行できるようにします。
プロセスが (カーネル) 監査デーモンを起動できるようにします。プロセスが監査状態 (監査ユーザー ID、監査端末 ID、監査セッション ID、監査事前選択マスク) を表示したり、設定したりできるようにします。プロセスが監査を無効にしたり、有効にしたりできるようにします。プロセスが監査パラメータ (キャッシュとキューのサイズ、イベントからクラスへのマッピング、およびポリシーオプション) を構成できるようにします。
プロセスがさまざまなシステム構成タスクを実行できるようにします。ファイルシステム固有の管理手順 (ファイルシステム構成 ioctl、割り当て制限の呼び出し、スナップショットの作成と削除、PCFS ブートセクターの操作など) を許可します。
プロセスがデバイス特殊ファイルを作成できるようにします。プロセスが、許可されたアクセスをチェックするために、カーネルの drv_priv(9F) 関数を呼び出すカーネルモジュールを正常に呼び出せるようにします。プロセスが、実際のコンソールデバイスを直接開けるようにします。プロセスが、排他的に開かれていたデバイスを開けるようにします。
プロセスがシステムのデータリンクインタフェースを構成できるようにします。
プロセスがすべての InfiniBand (IB) Management Datagram (MAD) API や、ホストベースの IB 管理および診断ツールにアクセスできるようにします。
プロセスが InfiniBand (IB) Management Datagram (MAD) API や、ホストベースの IB 管理および診断ツールにアクセスし、構成情報を読み取れるようにします。
プロセスがシステムの IP インタフェースと経路を構成できるようにします。プロセスが TCP/IP パラメータを構成できるようにします。Allow a process to pop anchored STREAMS modules with matching zoneid.
プロセスが System V IPC メッセージキューバッファーのサイズを大きくすることができるようにします。
廃止: プロセスがディレクトリをリンク解除またはリンクすることを許可する場合に使用します。これを実装すると、ディレクトリでのリンクおよびリンク解除操作が禁止されます。
Allow a process to mount and unmount filesystems that would otherwise be restricted (that is, most filesystems except namefs).プロセスがスワップデバイスを追加したり、削除したりできるようにします。
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.
プロセスが NFS サービスを行うことができるようにします: NFS カーネルスレッドの起動、NFS ロック処理の実行、NFS で予約されたポート (ポート 2049 (nfs) およびポート 4045 (lockd)) へのバインド。
Obsolete: Allow a process to create, configure, and destroy PPP instances and control PPPoE plumbing.この特権は、排他的な IP スタックインスタンスゾーンにデフォルトで付与されます。
プロセスがプロセッサセットにプロセスをバインドできるようにします。
プロセスが、この段落で概要が説明されている次の操作に加えて、プロセッサセットにプロセスを 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 の動作ステータスを変更できるようにします。プロセスがファイルシステムの割り当て制限を構成できるようにします。プロセスがリソースプールを構成したり、プールにプロセスをバインドしたりできるようにします。
プロセスが、setrlimit(2) および setrctl(2) を使用して、自身に課せられたリソース制限を超えられるようにします。
プロセスがファイルシステムを共有したり、共有解除したりできるようにします。
プロセスが NetBIOS または SMB サービスを行うことができるようにします: SMB カーネルスレッドの起動、NetBIOS または SMB で予約されたポート (ポート 137、138、139 (NetBIOS)、および 445 (SMB)) へのバインド。
プロセスが、許可されたアクセスをチェックするために、カーネルの suser() 関数を呼び出すサードパーティー製のロード可能なモジュールを正常に呼び出せるようにします。この特権は、サードパーティー製のロード可能なモジュールの互換性のためにのみ存在し、Oracle Solaris では使用されません。
プロセスが、stime(2)、adjtime(2)、ntp_adjtime(2) のいずれかの適切なシステムコールを使用してシステム時間を操作できるようにします。
プロセスが、プロセスの機密ラベルと同等か、またはより優位なラベルを外部の文字列形式との間で変換できるようにします。
この特権は、システムが Trusted Extensions で構成されている場合にのみ解釈されます。
プロセスが仮想化環境を管理できるようにします。
プロセスがカラーマップの制限をオーバーライドできるようにします。
プロセスがカラーマップをインストールまたは削除できるようにします。
プロセスが、ほかのプロセスによって割り当てられたカラーマップセルエントリを取得できるようにします。
この特権は廃止されています。
プロセスが、X サーバーによって永続的に保持されているリソースを構成または破棄できるようにします。
プロセスがスクリーンセーバーのタイムアウト値を設定するために SetScreenSaver を使用できるようにします。
プロセスが表示アクセス制御リストを変更するために ChangeHosts を使用できるようにします。
プロセスが GrabServer を使用できるようにします。
プロセスが、ウィンドウ、ピクセルマップ、カラーマップ、プロパティー、カーソル、フォント、またはグラフィックコンテキストのリソースを保持できる SetCloseDownMode リクエストを使用できるようにします。
この特権は廃止されています。
プロセスが、所有していない (別のユーザー ID を持つ) ウィンドウリソースから読み取れるようにします。
この特権は廃止されています。
プロセスが、所有していない (別のユーザー ID を持つ) ウィンドウリソースに書き込んだり、このようなウィンドウリソースを作成したりできるようにします。新しく作成されるウィンドウのプロパティーは、そのウィンドウのユーザー ID を使用して作成されます。
この特権は廃止されています。
プロセスがウィンドウ入力デバイスに対する操作を実行できるようにします。
プロセスがキーボードやポインタの制御を取得したり、設定したりできるようにします。
プロセスがポインタボタンやキーのマッピングを変更できるようにします。
この特権は廃止されています。
プロセスがダイレクトグラフィックスアクセス (DGA) X プロトコルの拡張機能を使用できるようにします。フレームバッファーへの直接のプロセスアクセスは引き続き必要です。このため、プロセスがフレームバッファーへのアクセスを許可する MAC および DAC 特権を持っているか、またはそのプロセスにフレームバッファーが割り当てられている必要があります。
この特権は廃止されています。
プロセスが、ウィンドウリソースの機密ラベルを既存の機密ラベルより優位でない機密ラベルに設定できるようにします。
この特権は廃止されています。
プロセスがフォントパスを設定できるようにします。
この特権は廃止されています。
プロセスが、プロセスの機密ラベルと等しくない機密ラベルを持つウィンドウリソースから読み取れるようにします。
この特権は廃止されています。
プロセスが、プロセスの機密ラベルと等しくない機密ラベルを持つウィンドウリソースを作成できるようにします。新しく作成されるウィンドウのプロパティーは、そのウィンドウの機密ラベルを使用して作成されます。
この特権は廃止されています。
プロセスが、選択確認ダイアログボックスの介入なしでウィンドウ間のデータ移動をリクエストできるようにします。
この特権は廃止されています。
プロセスが、ウィンドウリソースの機密ラベルを既存の機密ラベルより優位な機密ラベルに設定できるようにします。
この特権は廃止されています。
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 つの特権セットで拡張されています:
exec で継承される特権。
プロセスのための最大の特権セット。
現在有効な特権。
プロセスおよびその子孫が取得できる特権の上限。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_SETID、PRIV_SYS_RESOURCE、PRIV_PROC_AUDIT、および PRIV_FILE_AUDIT が確認されています。
特定の状況では、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.
構成ファイル内またはコマンド行に特権が一覧表示されているときに、拡張ポリシーの構文を使用できる場合があります。拡張ポリシーとは、特権セットを中括弧で囲み、そのあとにコロンとオブジェクトを続けたものです。拡張ポリシーによって、指定されたオブジェクトに対してその特権の一覧を使用する機能が追加されます。現在は、ネットワークポート、UID、およびファイルオブジェクトのための拡張ポリシーがサポートされています。
たとえば、
/var/core の下にあるファイルへのアクセス時に特権 file_dac_read を使用できるようにします。
プロセスが TCP ポート 80 および 443 にネットワークエンドポイントをバインドできるようにします。
プロセスが UID を UID 80 から 100 まで (80 と 100 を含む) に変更できるようにします。
プロセスが UID をユーザー名「casper」の UID に変更できるようにします。
/var/user を操作するために、現在のゾーンで使用可能な特権をすべて付与します。ゾーンなどの特別なキーワードの定義については、priv_str_to_set(3C) マニュアルページを参照してください。
スーパーユーザーとして実行されていないアプリケーションが、root によって所有されているモード 755 のディレクトリ /system/volatile 内に service.pid ファイルを作成できるようにします。
スーパーユーザーとして実行されていないアプリケーションが、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.
次の一覧には、オブジェクトとそれに関連する特権のタイプが含まれています。
|
1 services(5) で定義されている数値
2 指定されたパス名で始まるすべてのファイル名に一致する
システムコールがアクセス権のエラーで失敗した場合は、その問題の原因がただちに明らかになるとは限りません。このような問題をデバッグするには、特権のデバッグと呼ばれるツールを使用できます。あるプロセスに対して特権のデバッグが有効になっている場合、カーネルは、存在しない特権をそのプロセスの制御端末に報告します。(プロセスに対するデバッグは、ppriv(1) の –D オプションを使用して有効にします。)さらに、管理者は次を使用して system(5) の変数 priv_debug を設定することにより、システム全体の特権のデバッグを有効化できます。
set priv_debug = 1
実行中のシステムでは、mdb(1) を使用すると、この変数を変更できます。
ユーザーまたは役割への特権の割り当てを変更するには、それぞれ 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
プロセスからいずれかの基本特権を削除することは、そのプロセスを標準に準拠しない状態のままにするだけでなく、予期しないアプリケーション障害を引き起こす可能性があるため、その潜在的な副作用を完全に理解した上でのみ行うようにしてください。
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:
|