ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 の管理: セキュリティーサービス Oracle Solaris 11.1 Information Library (日本語) |
パート II システム、ファイル、およびデバイスのセキュリティー
RBAC プロパティーをレガシーアプリケーションに追加する方法
ユーザーが自分のパスワードを使用して役割になれるようにする方法
10. Oracle Solaris のセキュリティー属性 (参照)
22. Kerberos エラーメッセージとトラブルシューティング
特権を使用すると、ユーザーは管理権限を使用して特定のタスクを実行できます。また、特権を使用すると、ユーザーを各ユーザーに実行が許可されているタスクのみに制限することもできます。
次のタスクマップは、システム上で特権を表示、管理、および使用するための手順を示しています。
|
次の手順は、特権の名前と定義を表示する方法を示しています。
% man privileges Standards, Environments, and Macros privileges(5) NAME privileges - process privilege model ... The defined privileges are: PRIV_CONTRACT_EVENT Allow a process to request reliable delivery of events to an event endpoint. Allow a process to include events in the critical event set term of a template which could be generated in volume by the user. ...
この特権の形式は開発者によって使用されます。
% ppriv -lv | more contract_event Allows a process to request critical events without limitation. Allows a process to request reliable delivery of all events on any event queue. ... win_upgrade_sl Allows a process to set the sensitivity label of a window resource to a sensitivity label that dominates the existing sensitivity label. This privilege is interpreted only if the system is configured with Trusted Extensions.
この特権の形式は、useradd、roleadd、usermod、および rolemod コマンドでユーザーや役割に特権を割り当てたり、profiles コマンドで権利プロファイルに特権を割り当てたりするために使用されます。
次の手順は、特権が直接割り当てられたかどうかを判断する方法です。
注意 - 直接割り当てられた特権を不適切に使用すると、無意識のうちにセキュリティーを侵害する可能性があります。詳細については、「セキュリティー属性を直接割り当てる場合に考慮すべきセキュリティー事項」を参照してください。 |
手順については、「プロセスの特権を判断する方法」を参照してください。
有効なセットに一覧表示されている特権は、セッション全体を通して有効です。基本セットに加えて特権を直接割り当てた場合、その特権は有効なセットに一覧表示されます。
例 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
通常、ユーザーおよび役割は、権利プロファイルを通して特権付きコマンドへのアクセスを取得します。権利プロファイルのコマンドは、プロファイルシェルで実行する必要があります。
次の例では、ユーザーにいくつかの権利プロファイルが割り当てられています。システムは、それらの権利プロファイルとその内容を順番に読み取ります。承認を除くすべての属性について、最初の明示的に設定されている属性値が使用されている属性値です。詳細は、「割り当てられたセキュリティー属性の検索順序」を参照してください。
% 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
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 にして auditreduce、auditstat、および 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
この手順は、プロセスで使用可能な特権を判断する方法です。一覧には、特定のコマンドに割り当てられている特権は含まれません。
% ppriv [-v] pid
プロセス番号です。二重ドル記号 ($$) を使用して親シェルのプロセス番号をコマンドに渡します。
特権名の詳細な一覧表示を行います。
例 9-37 現在のシェルでの特権の判断
次の例では、ユーザーのシェルプロセスの親プロセスでの特権を一覧表示します。2 つ目の例では、特権の正式名を一覧表示します。出力の最初の文字は、次の特権セットを指しています。
有効な特権セットです。
継承可能な特権セットです。
許可された特権セットです。
制限付きの特権セットです。
% 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
始める前に
このデバッグ手順は、コマンドまたはプロセスが失敗する場合に有効です。
% 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
% 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
jdoe が objadmin 役割を引き受けると、ファイルに関するアクセス権が変更されます。
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 を使用します。この手順は、このポートに割り当てられている特権を取得する可能性のある悪意のあるユーザーからアクセスされないようにほかのポートを保護します。
次の /lib/svc/manifest/network/ntp.xml エントリから、net_privaddr、proc_lock_memory、および sys_time 特権をほかのプロセスに対して使用できます。
privileges='basic,!file_link_any,!proc_info,!proc_session, net_privaddr,proc_lock_memory,sys_time'
削除された特権は、このサービスがほかのプロセスへのシグナリングやその監視を行なったり、ファイル名変更の方法としてのハードリンクを作成したりしないようにします。
つまり、このサービスによって起動されたプロセスは特定のポート 123 にしかバインドできず、ほかのどの特権ポートにもバインドできません。ハッカーがこのサービスを悪用して別のプロセスを起動できたとしても、その子プロセスもまた、ほかのどの特権ポートにもバインドできなくなります。
次の抜粋で強調表示されている拡張特権ポリシーによって、このサービスからほかの特権ポートへのアクセスが回避されます。
privileges='basic,!file_link_any,!proc_info,!proc_session, {net_privaddr}:123/udp,proc_lock_memory,sys_time'
特権を必要とするコマンドを実行するシェルスクリプトを作成する場合は、特権が割り当てられているコマンドを該当する権利プロファイルに含める必要があります。
始める前に
root 役割になる必要があります。詳細は、「割り当てられている管理権限を使用する方法」を参照してください。
#!/bin/pfsh # Copyright (c) 2012 by Oracle
% ppriv -eD script-full-path
詳細は、「割り当てられている管理権限を使用する方法」を参照してください。
シェルスクリプトとそのシェルスクリプトに含まれるコマンドを、それらの必要なセキュリティー属性とともに権利プロファイルに追加します。手順については、「権利プロファイルを作成する方法」を参照してください。
スクリプトを実行するために、ユーザーはその役割を引き受け、役割のプロファイルシェルでスクリプトを実行します。
権利プロファイルを役割に追加するには、「役割のセキュリティー属性を変更する方法」を参照してください。
ユーザーに役割を割り当てるには、「ユーザーのセキュリティー属性を変更する方法」を参照してください。