JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 の管理: セキュリティーサービス     Oracle Solaris 11.1 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I セキュリティーの概要

1.  セキュリティーサービス (概要)

パート II システム、ファイル、およびデバイスのセキュリティー

2.  マシンセキュリティーの管理 (概要)

3.  システムアクセスの制御 (タスク)

4.  ウイルススキャンサービス (タスク)

5.  デバイスアクセスの制御 (タスク)

6.  BART を使用したファイル整合性の検証 (タスク)

7.  ファイルアクセスの制御 (タスク)

パート III 役割、権利プロファイル、特権

8.  役割と特権の使用 (概要)

9.  役割に基づくアクセス制御の使用 (タスク)

RBAC の使用 (タスク)

RBAC デフォルトの表示および使用 (タスク)

RBAC デフォルトの表示および使用 (タスクマップ)

定義済みのすべてのセキュリティー属性を表示する方法

割り当てられた権限を表示する方法

役割になる方法

ユーザーのセキュリティー属性を変更する方法

割り当てられている管理権限を使用する方法

サイトでの RBAC のカスタマイズ (タスク)

RBAC の初期構成 (タスクマップ)

RBAC の実装を計画する方法

役割を作成する方法

役割を割り当てる方法

役割を監査する方法

権利プロファイルを作成する方法

システム権利プロファイルをクローニングおよび変更する方法

承認を作成する方法

RBAC プロパティーをレガシーアプリケーションに追加する方法

RBAC と特権の割り当てをトラブルシューティングする方法

RBAC の管理 (タスク)

RBAC の管理(タスクマップ)

役割のパスワードを変更する方法

役割のセキュリティー属性を変更する方法

割り当てられているセキュリティー属性の順序を変更する方法

管理者を明示的に割り当てられた権限に制限する方法

ユーザーが自分のパスワードを使用して役割になれるようにする方法

root 役割をユーザーに変更する方法

特権の使用 (タスク)

システム上の特権を一覧表示する方法

直接割り当てられた特権を判断する方法

実行可能な特権付きコマンドを判断する方法

プロセスの特権を判断する方法

プログラムが必要とする特権を判断する方法

ポートに拡張特権ポリシーを適用する方法

特権付きのコマンドを含むシェルスクリプトの実行方法

10.  Oracle Solaris のセキュリティー属性 (参照)

パート IV 暗号化サービス

11.  暗号化フレームワーク (概要)

12.  暗号化フレームワーク (タスク)

13.  鍵管理フレームワーク

パート V 認証サービスと安全な通信

14.  プラグイン可能認証モジュールの使用

15.  Secure Shell の使用

16.  Secure Shell (参照)

17.  簡易認証セキュリティー層の使用

18.  ネットワークサービスの認証 (タスク)

パート VI Kerberos サービス

19.  Kerberos サービスについて

20.  Kerberos サービスの計画

21.  Kerberos サービスの構成 (タスク)

22.  Kerberos エラーメッセージとトラブルシューティング

23.  Kerberos 主体とポリシーの管理 (タスク)

24.  Kerberos アプリケーションの使用 (タスク)

25.  Kerberos サービス (参照)

パート VII Oracle Solaris での監査

26.  監査 (概要)

27.  監査の計画

28.  監査の管理 (タスク)

29.  監査 (参照)

用語集

索引

特権の使用 (タスク)

特権を使用すると、ユーザーは管理権限を使用して特定のタスクを実行できます。また、特権を使用すると、ユーザーを各ユーザーに実行が許可されているタスクのみに制限することもできます。

次のタスクマップは、システム上で特権を表示、管理、および使用するための手順を示しています。

タスク
説明
参照先
定義済みの特権を表示します。
Oracle Solaris での特権とその定義を一覧表示します。
任意のシェルでユーザーとしての特権を表示します。
直接割り当てられた特権を示します。プロセスのすべてはこれらの特権で実行されます。
プロファイルシェルで特権付きコマンドを表示します。
割り当てられた権利プロファイルを介してユーザーが実行できる特権付きコマンドを表示します。
アプリケーションに対する攻撃が成功した場合に、システムへの攻撃者のアクセスを制限します。
NTP ポートに拡張権限ポリシーを適用して、システムを攻撃から保護します。
プロセスに含まれる特権を判断します。
プロセスに対する、有効な特権、継承可能な特権、許可された特権、および制限付きの特権のセットを一覧表示します。
プロセスから漏れている特権を判断します。
失敗したプロセスが必要とする特権を一覧表示します。
アプリケーションに対する攻撃が成功した場合に、システムへの攻撃者のアクセスを制限します。
NTP サービスの拡張ポリシーを作成します。
特権をコマンドに追加します。
特権を権利プロファイルのコマンドに追加します。ユーザーまたは役割を権利プロファイルに割り当てることができます。ユーザーは、プロファイルシェルで割り当てられた特権でコマンドを実行できるようになります。
特権をユーザーまたは役割に割り当てます。
ユーザーまたは役割の継承可能な一連の特権を拡張します。この手順は、十分注意して実行してください。
ユーザーの特権を制限します。
ユーザーの特権の基本セットを制限します。この手順は、十分注意して実行してください。
特権付きのシェルスクリプトを実行します。
特権をシェルスクリプトおよびシェルスクリプトのコマンドに追加します。その後、プロファイルシェルのスクリプトを実行します。

システム上の特権を一覧表示する方法

次の手順は、特権の名前と定義を表示する方法を示しています。

直接割り当てられた特権を判断する方法

次の手順は、特権が直接割り当てられたかどうかを判断する方法です。


注意

注意 - 直接割り当てられた特権を不適切に使用すると、無意識のうちにセキュリティーを侵害する可能性があります。詳細については、「セキュリティー属性を直接割り当てる場合に考慮すべきセキュリティー事項」を参照してください。


  1. プロセスが使用可能な特権を一覧表示します。

    手順については、「プロセスの特権を判断する方法」を参照してください。

  2. 任意のシェルでアクションを起動し、コマンドを実行します。

    有効なセットに一覧表示されている特権は、セッション全体を通して有効です。基本セットに加えて特権を直接割り当てた場合、その特権は有効なセットに一覧表示されます。

例 9-33 直接割り当てられた特権の判断

この例では、ユーザーに proc_clock_highres 特権が直接割り当てられているため、その特権はユーザーが所有するすべてのプロセスで使用できます。

% ppriv -v $$
1800:   pfksh
flags = <none>
        E: file_link_any,…,proc_clock_highres,proc_session
        I: file_link_any,…,proc_clock_highres,proc_session
        P: file_link_any,…,proc_clock_highres,proc_session
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time
% ppriv -vl proc_clock_highres
        Allows a process to use high resolution timers.

例 9-34 役割に直接割り当てられた特権の判断

次の例では、役割 realtime に日時のプログラムを処理する特権が直接割り当てられます。

% su - realtime
Password: <Type realtime password>
$ ppriv -v $$
1600:   pfksh
flags = <none>
        E: file_link_any,…,proc_clock_highres,proc_session,sys_time
        I: file_link_any,…,proc_clock_highres,proc_session,sys_time
        P: file_link_any,…,proc_clock_highres,proc_session,sys_time
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time

実行可能な特権付きコマンドを判断する方法

通常、ユーザーおよび役割は、権利プロファイルを通して特権付きコマンドへのアクセスを取得します。権利プロファイルのコマンドは、プロファイルシェルで実行する必要があります。

  1. 割り当てられている権利プロファイルを判断します。

    次の例では、ユーザーにいくつかの権利プロファイルが割り当てられています。システムは、それらの権利プロファイルとその内容を順番に読み取ります。承認を除くすべての属性について、最初の明示的に設定されている属性値が使用されている属性値です。詳細は、「割り当てられたセキュリティー属性の検索順序」を参照してください。

    % profiles
    Audit Review
    Console User
    Suspend To RAM
    Suspend To Disk
    Brightness
    CPU Power Management
    Network Autoconf
    Desktop Print Management
    Network Wifi Info
    Desktop Removable Media User
    Basic Solaris User
    All
  2. Audit Review プロファイルの権限を判断します。
    profiles -l
    Audit Review
    
      solaris.audit.read
      
      /usr/sbin/auditreduce  euid=0
      /usr/sbin/auditstat    euid=0
      /usr/sbin/praudit      euid=0

    Audit Review 権利プロファイルを使用すると、実効 UID を 0 にして auditreduceauditstat、および praudit コマンドを実行し、solaris.audit.read 承認を割り当てることができます。

例 9-35 役割の特権付きコマンドの判断

この例では、ユーザーは割り当てられた役割を引き受け、権利プロファイルのいずれかに含まれているコマンドを一覧表示します。

% roles
devadmin
% su - devadmin
Password: Type devadmin password
$ profiles -l
Device Security
          /usr/bin/kbd        uid=0;gid=sys
          /usr/sbin/add_allocatable    euid=0
          /usr/sbin/add_drv        uid=0
          /usr/sbin/devfsadm        uid=0
          /usr/sbin/eeprom        uid=0
          /usr/sbin/list_devices        euid=0
          /usr/sbin/rem_drv        uid=0
          /usr/sbin/remove_allocatable    euid=0
          /usr/sbin/strace        euid=0
          /usr/sbin/update_drv        uid=0

例 9-36 役割での特権付きコマンドの実行

次の例で、admin 役割は、 useful.script ファイルに関する権利を変更することができます。

% whoami
jdoe
% ls -l useful.script
-rwxr-xr-- 1 elsee eng 262 Apr 2 10:52 useful.script
% chgrp admin useful.script
chgrp: useful.script: Not owner
% su - admin
Password: <Type admin password>
$ chgrp admin useful.script
$ chown admin useful.script
$ ls -l useful.script
-rwxr-xr-- 1 admin admin 262 Apr 2 10:53 useful.script

プロセスの特権を判断する方法

この手順は、プロセスで使用可能な特権を判断する方法です。一覧には、特定のコマンドに割り当てられている特権は含まれません。

例 9-37 現在のシェルでの特権の判断

次の例では、ユーザーのシェルプロセスの親プロセスでの特権を一覧表示します。2 つ目の例では、特権の正式名を一覧表示します。出力の最初の文字は、次の特権セットを指しています。

E

有効な特権セットです。

I

継承可能な特権セットです。

P

許可された特権セットです。

L

制限付きの特権セットです。

% ppriv $$
1200:   -csh
flags = <none>
        E: basic
        I: basic
        P: basic
        L: all
% ppriv -v $$
1200:   -csh
flags = <none>
        E: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        I: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        P: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time

例 9-38 引き受けることができる役割の特権の判断

次の例では、役割 sysadmin に直接割り当てられている特権はありません。

% su - sysadmin
Password: <Type sysadmin password>
$ /usr/bin/whoami
sysadmin
$ ppriv -v $$
1400:   pfksh
flags = <none>
        E: file_link_any,file_read,file_write,net_access,proc_exec,proc_fork,
           proc_info,proc_session
        I: file_link_any,file_read,file_write,net_access,proc_exec,proc_fork,
           proc_info,proc_session
        P: file_link_any,file_read,file_write,net_access,proc_exec,proc_fork,
           proc_info,proc_session
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,win_upgrade_sl

プログラムが必要とする特権を判断する方法

始める前に

このデバッグ手順は、コマンドまたはプロセスが失敗する場合に有効です。

  1. ppriv デバッグコマンドに対する引数として失敗しているコマンドを入力します。
    % ppriv -eD touch /etc/acct/yearly
    touch[5245]: missing privilege "file_dac_write"
         (euid = 130, syscall = 224) needed at zfs_zaccess+0x258
    touch: cannot create /etc/acct/yearly: Permission denied 
  2. /etc/name_to_sysnum ファイルの syscall 番号を見つけ、失敗しているシステムコールを突き止めます。
    % grep 224 /etc/name_to_sysnum
    creat64                 224

例 9-39 特権の使用を検査するための truss コマンドの使用

truss コマンドは、通常のシェルで特権の使用をデバッグすることができます。たとえば、次のコマンドは、失敗した touch プロセスをデバッグします。

% truss -t creat touch /etc/acct/yearly
creat64("/etc/acct/yearly", 0666)            
                       Err#13 EACCES [file_dac_write]
touch: /etc/acct/yearly cannot create

拡張された /proc インタフェースで、truss 出力のエラーコードのあとに欠如している特権がレポートされます。

例 9-40 プロファイルシェルで特権の使用を検査するための ppriv コマンドの使用

次の例で、jdoe ユーザーは、役割 objadminを引き受けることができます。objadmin 役割には、Object Access Management 権利プロファイルが含まれます。この権利プロファイルによって、objadmin 役割は objadmin が所有しないファイルに関するアクセス権を変更することができます。

次の例で、jdoe は、useful.script ファイルに関するアクセス権を変更することができません。

jdoe% ls -l useful.script
-rw-r--r--  1 aloe  staff  2303 Apr 10 10:10 useful.script
jdoe% chown objadmin useful.script
chown: useful.script: Not owner
jdoe% ppriv -eD chown objadmin useful.script
chown[11444]: missing privilege "file_chown" 
            (euid = 130, syscall = 16) needed at zfs_zaccess+0x258
chown: useful.script: Not owner

jdoeobjadmin 役割を引き受けると、ファイルに関するアクセス権が変更されます。

jdoe% su - objadmin
Password: <Type objadmin password>
$ ls -l useful.script
-rw-r--r--  1 aloe  staff  2303 Apr 10 10:10 useful.script
$ chown objadmin useful.script
$ ls -l useful.script
-rw-r--r--  1 objadmin  staff  2303 Apr 10 10:10 useful.script
$ chgrp admin useful.script
$ ls -l objadmin.script
-rw-r--r--  1 objadmin  admin  2303 Apr 10 10:11 useful.script

例 9-41 root ユーザーが所有するファイルの変更

この例では、特権エスカレーションに対する保護について説明します。詳細については、「特権エスカレーションの防止」を参照してください。ファイルは、root ユーザーが所有します。権限の弱い objadmin 役割ではファイルの所有を変更するためにはすべての特権が必要なので、処理は失敗します。

jdoe% su - objadmin
Password: <Type objadmin password>
$ cd /etc; ls -l system
-rw-r--r--  1 root  sys   1883 Oct 10 10:20 system
$ chown objadmin system
chown: system: Not owner
$ ppriv -eD chown objadmin system
chown[11481]: missing privilege "ALL" 
     (euid = 101, syscall = 16) needed at zfs_zaccess+0x258
chown: system: Not owner

ポートに拡張特権ポリシーを適用する方法

Network Time Protocol (NTP) のサービスは、udp トラフィックに対して特権ポート 123 を使用します。この手順は、このポートに割り当てられている特権を取得する可能性のある悪意のあるユーザーからアクセスされないようにほかのポートを保護します。

  1. ポートのデフォルトのサービスマニフェストエントリを参照します。

    次の /lib/svc/manifest/network/ntp.xml エントリから、net_privaddrproc_lock_memory、および sys_time 特権をほかのプロセスに対して使用できます。

    privileges='basic,!file_link_any,!proc_info,!proc_session,
    net_privaddr,proc_lock_memory,sys_time'

    削除された特権は、このサービスがほかのプロセスへのシグナリングやその監視を行なったり、ファイル名変更の方法としてのハードリンクを作成したりしないようにします。

    つまり、このサービスによって起動されたプロセスは特定のポート 123 にしかバインドできず、ほかのどの特権ポートにもバインドできません。ハッカーがこのサービスを悪用して別のプロセスを起動できたとしても、その子プロセスもまた、ほかのどの特権ポートにもバインドできなくなります。

  2. net_privaddr 特権をこのポートのみに制限します。

    次の抜粋で強調表示されている拡張特権ポリシーによって、このサービスからほかの特権ポートへのアクセスが回避されます。

    privileges='basic,!file_link_any,!proc_info,!proc_session,
    {net_privaddr}:123/udp,proc_lock_memory,sys_time'

特権付きのコマンドを含むシェルスクリプトの実行方法

特権を必要とするコマンドを実行するシェルスクリプトを作成する場合は、特権が割り当てられているコマンドを該当する権利プロファイルに含める必要があります。

始める前に

root 役割になる必要があります。詳細は、「割り当てられている管理権限を使用する方法」を参照してください。

  1. 1 行目は、スクリプトを /bin/pfsh またはほかのプロファイルシェルで開始します。
    #!/bin/pfsh
    # Copyright (c) 2012 by Oracle
  2. スクリプトのコマンドが必要とする特権を判断します。
    % ppriv -eD script-full-path
  3. 必要なセキュリティー属性を持つ管理者になります。

    詳細は、「割り当てられている管理権限を使用する方法」を参照してください。

  4. スクリプトの権利プロファイルを作成または変更します。

    シェルスクリプトとそのシェルスクリプトに含まれるコマンドを、それらの必要なセキュリティー属性とともに権利プロファイルに追加します。手順については、「権利プロファイルを作成する方法」を参照してください。

  5. 権利プロファイルを役割に追加し、その役割をユーザーに割り当てます。

    スクリプトを実行するために、ユーザーはその役割を引き受け、役割のプロファイルシェルでスクリプトを実行します。