特権は Oracle Solaris に組み込まれています。このセクションでは、Oracle Solaris がデバイス、リソース管理、およびレガシーアプリケーションで特権をどのように使用するかを説明します。
プロセスが特権を継承するか、またはプロセスに特権を割り当てることができます。プロセスは、その親から特権を継承します。ログイン時に、ユーザーの初期継承可能特権セットによって、そのユーザーのプロセスで使用できる特権が決まります。ユーザーの当初のログインの子プロセスはすべて、このセットを継承します。
また、プログラム、ユーザー、役割、および特定のリソースに特権を直接割りてることもできます。プログラムで特権が必要な場合は、権利プロファイル内でそのプログラムの実行可能ファイルに特権を割り当てます。そのプログラムの実行を許可されたユーザーまたは役割には、そのプログラムが入ったプロファイルを割り当てます。ログイン時、あるいはプロファイルシェルが開かれている場合、プログラムの実行可能ファイルがプロファイルシェルで入力されると、そのプログラムは特権を使用して実行されます。たとえば、Object Access Management プロファイルが含まれる役割は、file_chown 特権を使用して chmod コマンドを実行できるため、その役割が所有していないファイルの所有権を変更できます。
付加的な特権が直接割り当てられたプログラムを役割またはユーザーが実行する場合、割り当てられているその特権は役割またはユーザーの継承可能セットに追加されます。特権が割り当てられたプログラムの子プロセスは、親プロセスの特権を継承します。子プロセスが親プロセスよりも多くの特権を必要とする場合には、子プロセスに直接それらの特権を割り当てる必要があります。
特権を使用するように作成されているプログラムは、特権を認識すると呼ばれます。特権を認識するプログラムは、プログラム実行中の特権の使用を有効または無効にできます。本番環境で使用するためには、プログラムに対し、そのプログラムが有効または無効にする特権を割り当てる必要があります。特権を認識するプログラムを使用可能にする前に、そのプログラムに必要な特権だけを実行可能ファイルに割り当てます。続いて管理者はこのプログラムのテストを行い、タスクが正常に行われるか確認します。また、プログラムが特権を悪用しないかも確認します。
特権を認識するコードの例については、Oracle Solaris 11 セキュリティー開発者ガイド の第 2 章特権付きアプリケーションの開発を参照してください。特権を必要とするプログラムに特権を割り当てる場合は、Example 4–1 とExample 5–7 を参照してください。
スーパーユーザーモデルではファイルアクセス権によってのみ保護されるシステムインタフェースを、権利モデルでは特権によって保護します。特権を使用したシステムでは、インタフェースを保護するほどの強さはファイルアクセス権にありません。proc_owner などの特権は、ファイルアクセス権をオーバーライドした上でファイルシステムへのフルアクセス権を取得する可能性があります。
このため、Oracle Solaris では、デバイスを開くにはデバイスディレクトリの所有権では不十分です。たとえば、グループ sys のメンバーには、/dev/ip デバイスを開くことが自動的には許可されなくなります。/dev/ip のファイルアクセス権は 0666 ですが、デバイスを開くには net_rawaccess 特権も必要です。
デバイスポリシーは特権によって制御されるため、デバイスを開くためのアクセス権を付与する際の柔軟性が高くなります。特権要件は、デバイスポリシーに合わせて構成することも、ドライバ本体に合わせて構成することもできます。デバイスドライバのインストール、追加、または更新時に、特権要件を構成できます。
詳細は、add_drv(1M)、devfsadm(1M)、getdevpolicy(1M)、および update_drv(1M) のマニュアルページを参照してください。
Oracle Solaris では、project.max-locked-memory および zone.max-locked-memory リソース制御を使用して、PRIV_PROC_LOCK_MEMORY 特権が割り当てられているプロセスのメモリー消費を制限できます。プロセスはこの特権を使うことで、物理メモリー内のページをロックできます。
PRIV_PROC_LOCK_MEMORY 特権を権利プロファイルに割り当てると、この特権を持つプロセスに、すべてのメモリーをロックする権限を与えることになります。安全対策として、この特権ユーザーがすべてのメモリーをロックできないように、リソース制御を設定してください。特権付きプロセスが非大域ゾーン内で実行される場合には、zone.max-locked-memory リソース制御を設定します。特権付きプロセスがシステム上で実行される場合には、プロジェクトを作成し、project.max-locked-memory リソース制御を設定します。これらのリソース制御の詳細については、Oracle Solaris 11.2 でのリソースの管理 の第 6 章リソース制御についておよびOracle Solaris ゾーンの紹介 の第 2 章非大域ゾーンの構成の概要を参照してください。
レガシーアプリケーションに対応するために、特権の実装はスーパーユーザーモデルと権利モデルの両方で動作します。カーネルは、プログラムが特権で動作するように設計されていること示す PRIV_AWARE フラグを自動的に追跡します。特権を認識しない子プロセスについて検討してください。親プロセスから継承された特権はどれも、子の許可されたセットおよび有効なセットで使用可能です。子プロセスで UID が 0に設定されていると、その子プロセスが完全なスーパーユーザー権利を持たない場合があります。プロセスの有効なセットおよび許可されたセットは、子の制限セットの特権に限定されます。このように、特権を認識するプロセスの制限セットによって、特権を認識しない子プロセス root 特権が制限されます。
Oracle Solaris には、特権のエラーを修正するツールが用意されています。ppriv コマンドと truss コマンドを使用して、デバッグ結果を出力できます。例については、ppriv(1) のマニュアルページを参照してください。例については、権利に関するトラブルシューティングを参照してください。また、dtrace コマンドを使用することもできます。詳細は、dtrace(1M) のマニュアルページとOracle Solaris 11.2 Dynamic Tracing Guide を参照してください。