ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris の管理: セキュリティーサービス Oracle Solaris 11 Information Library (日本語) |
パート II システム、ファイル、およびデバイスのセキュリティー
ユーザーが自分のパスワードを使用して役割になれるようにする方法
10. Oracle Solaris のセキュリティー属性 (参照)
22. Kerberos エラーメッセージとトラブルシューティング
RBAC の初期構成では、特定の役割になることができるユーザーを作成し、役割を作成して、それらを適切なユーザーに割り当てます。
次のタスクマップを使用して、サイトでの RBAC の計画と初期実装を行います。一部のタスクは順番に並んでいます。
|
RBAC は、組織の情報リソースを管理するときに、重要な役割を果たします。RBAC を計画する際には、RBAC の機能と組織のセキュリティー要件を十分に理解しておく必要があります。
注 - デフォルトの権限は、/etc/security/policy.conf ファイルで割り当てられます。
「役割に基づくアクセス制御 (概要)」を参照してください。RBAC を使用したシステム管理は、従来の UNIX の管理方法を使用した場合と大きく異なります。実装を開始する前に RBAC の概念をよく理解しておくために、第 10 章Oracle Solaris のセキュリティー属性 (参照)を参照してください。
組織のセキュリティーポリシーでは、システムに対する潜在的な脅威を詳細に記述し、各脅威のリスクを評価して、それらの脅威に対抗するための方策を提供します。RBAC を使用したセキュリティー関連のタスクとは切り離して行うことをお勧めします。インストールした RBAC 構成はそのままで使用できますが、セキュリティーポリシーに従ってカスタマイズが必要になる場合もあります。
組織のセキュリティー要件に応じて、さまざまなレベルの RBAC を使用できます。
root を役割にする – デフォルトではこの方法が提供されます。これにより、どのユーザーも root としてログインできなくなります。代わりに、ユーザーは割り当てられたログインを使用してログインしてから root 役割を引き受ける必要があります。
個別の役割 – この方法では、提供された権利プロファイルに基づいた役割を作成します。それらの役割は、責任の度合い、タスクの適用範囲、およびタスクのタイプに従って割り当てることができます。たとえば、System Administrator 役割ではスーパーユーザーが実行できる多数のタスクを行うことができ、Network IPsec Management 役割では IPsec を管理できます。
また、セキュリティーの責務をほかの責務と切り離すこともできます。User Management 役割ではユーザーを作成でき、User Security 役割では役割や権利プロファイルなどのセキュリティー属性を割り当てることができます。ただし、User Security 役割ではユーザーを作成できず、User Management 役割では権利プロファイルをユーザーに割り当てることはできません。
root 役割を使用しない – この方法では、システムのデフォルトの構成を変更する必要があります。この構成では、root のパスワードを知っているユーザーはだれでもシステムにログインしてシステムを変更できます。どのユーザーがスーパーユーザーとなっていたかは判別できません。
推奨される役割とそのデフォルトの権利プロファイルの機能を確認します。デフォルトの権利プロファイルにより、管理者は単一のプロファイルを使用して推奨される役割を構成することができます。
権利プロファイルについてさらに詳しく調べるには、次のいずれかを行なってください。
システムで利用できる権利プロファイルについては、getent prof_attr コマンドを使用します。
このドキュメントで、一般的な権利プロファイルを要約した 「権利プロファイル」を参照してください。
使用するサイトで、アクセスを制限する必要があるアプリケーションを調べます。セキュリティーに影響するアプリケーション、サービス拒否が発生する可能性のあるアプリケーション、特別な管理者教育を必要とするアプリケーションには、RBAC を適用することをお勧めします。役割や権利プロファイルをカスタマイズして、組織のセキュリティー要件に対応することができます。
既存の権利プロファイルがこのタスクに割り当てられていないか、または別の権利プロファイルを作成する必要がないかどうかを確認します。
このタスクの権利プロファイルを既存の役割に割り当てるかどうか、または新しい役割を作成するかどうかを決定します。既存の役割を使用する場合は、この役割を割り当てるユーザーにその役割の元の権利プロファイルが適していることを確認します。コマンドがその必要な特権で実行されるように新しい権利プロファイルを順序付けます。順序付けについては、「割り当てられたセキュリティー属性の検索順序」を参照してください。
最少特権の原則に従って、ユーザーの信頼レベルに適した役割にユーザーを割り当てます。実行する必要のないタスクをユーザーが実行できないようにすると、問題が発生する可能性が減少します。
役割は、ローカルに作成することも LDAP リポジトリに作成することもできます。
始める前に
役割を作成し、その最初のパスワードを割り当てるには、User Management 権利プロファイルが割り当てられている必要があります。その役割にセキュリティー属性を割り当てるには、User Security 権利プロファイルが割り当てられている必要があります。
詳細は、「管理権限を取得する方法」を参照してください。
そのコマンドの RBAC 引数は次のとおりです。
# roleadd [-e expire] [-f inactive] [-s shell] [-m] [-S repository] \ [-A authorization-list] -K key=value] rolename
役割が期限切れになる日付です。このオプションは、一時的な役割を作成するために使用します。
役割を次回使用するまでの最大許容日数です。inactive 値を超えると、その役割は使用できなくなります。デフォルト値は 0 で、有効期限はありません。
デフォルトの場所に rolename のホームディレクトリを作成します。
rolename のログインシェルです。このシェルはプロファイルシェルである必要があります。プロファイルシェルの一覧については、pfexec(1) のマニュアルページを参照してください。
ヒント - プロファイルシェルは、ls /usr/bin/pf*sh のように、システム上の /usr/bin ディレクトリから一覧表示することもできます。
files または ldap のいずれかです。デフォルトはローカルファイルです。
コンマで区切られた 1 つ以上の承認です。承認の一覧については、/etc/security/auth_attr ファイルを参照してください。
key=value ペアです。このオプションは繰り返すことができます。次の鍵を使用できます。audit_flags、 auths、 profiles、 project、 defaultpriv、 limitpriv、 lock_after_retries、 および roleauth。それらの鍵、その値、および値の設定に必要な承認については、user_attr(4) のマニュアルページを参照してください。
新しい役割の名前です。許容される文字列の制限については、roleadd(1M) のマニュアルページを参照してください。
ヒント - 役割の名前が権利プロファイルの名前を反映している場合は、その役割の目的を簡単に理解できます。たとえば、Audit Review 権利プロファイルを auditreview 役割に割り当てて、その役割で監査記録の読み取り、フィルタ処理、およびアーカイブを行えるようにします。
たとえば、次のコマンドではローカルの User Administrator 役割とホームディレクトリを作成します。
# roleadd -c "User Administrator role, local" -s /usr/bin/pfbash \ -m -K profiles="User Security,User Management" useradm 80 blocks # ls /export/home/useradm local.cshrc local.login local.profile
# passwd -r files useradmPassword: <Type useradm password> Confirm Password: <Retype useradm password> #
注 - 一般に、役割アカウントは複数のユーザーに割り当てられます。そのため、管理者は役割パスワードを作成し、その役割パスワードを通常の通信手段以外の手段でユーザーに伝えます。
手順については、「役割を割り当てる方法」および例 9-10 を参照してください。
例 9-7 LDAP リポジトリでの User Administrator 役割の作成
この例では、管理者のサイトで LDAP リポジトリを使用します。次のコマンドを実行することで、管理者は User Administrator 役割を LDAP に作成します。
# roleadd -c "User Administrator role, LDAP" -s /usr/bin/pfbash \ -m -S ldap -K profiles="User Security,User Management" useradm
例 9-8 責務を分離するための役割の作成
この例では、管理者のサイトで LDAP リポジトリを使用します。次のコマンドを実行することで、管理者は 2 つの役割を作成します。usermgt 役割では、ユーザーを作成し、彼らにホームディレクトリを提供し、最初のパスワードを割り当て、セキュリティー以外のタスクを実行できます。usersec 役割では、ユーザーを作成できませんが、ユーザーのパスワードを変更したり、ほかの RBAC プロパティーを変更したりできます。
# roleadd -c "User Management role, LDAP" -s /usr/bin/pfbash \ -m -S ldap -K profiles="User Management" usermgt # roleadd -c "User Security role, LDAP" -s /usr/bin/pfbash \ -m -S ldap -K profiles="User Security" usersec
例 9-9 Device and File Security 役割の作成
この例では、管理者はこのシステム用に Device and File Security 役割を作成します。
# roleadd -c "Device and File System Security admin, local" -s /usr/bin/pfbash \ -m -K profiles="Device Security,File System Security" devflsec
この手順では、役割をユーザーに割り当て、ネームキャッシュデーモンを再起動したあと、ユーザーが役割を引き受ける方法を示します。
始める前に
「役割を作成する方法」の説明に従って、役割を追加し、その役割にパスワードを割り当ててあります。
ユーザーのほとんどのセキュリティー属性を変更するには、User Security 権利プロファイルが割り当てられている必要があります。ユーザーの監査フラグを変更するには、スーパーユーザーである必要があります。ほかの属性を変更するには、User Management 権利プロファイルが割り当てられている必要があります。
詳細は、「管理権限を取得する方法」を参照してください。
usermod [-S repository] [RBAC-arguments] login
たとえば、役割をローカルユーザーに割り当てます。
# usermod -R +useradm jdoe-local
usermod コマンドのオプションについては、usermod(1M) のマニュアルページまたは 「役割を作成する方法」の手順 2 の説明を参照してください。
# svcadm restart system/name-service-cache
例 9-10 暗号化を管理するための役割の作成と割り当て
この例では、LDAP ネットワーク上の管理者が暗号化フレームワークを管理するための役割を作成して、その役割を UID 1111 に割り当てます。管理者は、その割り当てを有効にするために nscd デーモンを再起動します。
# roleadd -c "Cryptographic Services manager" \ -g 14 -m -u 104 -s /usr/bin/pfksh \ -S ldap -K profiles="Crypto Management" cryptmgt # passwd cryptmgt New Password: <Type cryptmgt password> Confirm password: <Retype cryptmgt password> # usermod -u 1111 -R +cryptmgt # svcadm restart system/name-service-cache
UID 1111 を持つユーザーは、ログインしたあと、その役割を引き受けて、割り当てられたセキュリティー属性を表示します。
% su - cryptmgt Password: <Type cryptmgt password> Confirm Password: <Retype cryptmgt password> $ profiles -l Crypto Management /usr/bin/kmfcfg euid=0 /usr/sbin/cryptoadm euid=0 /usr/sfw/bin/CA.pl euid=0 /usr/sfw/bin/openssl euid=0 $
暗号化フレームワークについては、第 11 章暗号化フレームワーク (概要)を参照してください。フレームワークの管理方法については、「暗号化フレームワークの管理 (タスクマップ)」を参照してください。
役割が行う動作を監査することができます。監査記録に含まれるのは、役割を引き受けたユーザーのログイン名、役割名、および役割が行った動作です。116:AUE_PFEXEC:execve(2) with pfexec enabled:ps,ex,ua,as 監査イベントによって役割の動作が取り込まれます。as、ex、ps、または ua クラスを事前選択することで、役割の動作が監査されます。
始める前に
監査を構成するには、Audit Configuration 権利プロファイルが割り当てられている必要があります。監査サービスを有効にするか、更新するには、Audit Control 権利プロファイルが割り当てられている必要があります。
計画については、第 27 章監査の計画を参照してください。
詳細は、「管理権限を取得する方法」を参照してください。
# auditconfig -getflags
as、ex、ps、または ua のいずれかのクラスが事前選択されている場合は、役割の動作が監査中です。そうでない場合は、これらのクラスのいずれかを既存のクラスに追加します。
# auditconfig -setflags existing preselections,as
# auditconfig -setflags as
この例では、管理者は as クラスを選択しています。このクラスには、ほかの監査イベントも含まれます。クラスに含まれている監査イベントを表示するには、例 28-25 に示すように、auditrecord コマンドを使用します。
# audit -s
提供された権利プロファイルに、必要な一連のセキュリティー属性が含まれていない場合は、権利プロファイルを作成または変更できます。権利プロファイルの詳細については、「RBAC の権利プロファイル」を参照してください。
新しい権利プロファイルを作成するもっとも簡単な方法は、既存の権利プロファイルをコピーして変更することです。
始める前に
権利プロファイルを作成または変更するには、File Security 権利プロファイルが割り当てられている必要があります。
詳細は、「管理権限を取得する方法」を参照してください。
# profiles [-S repository] existing-profile-name
新しい名前の入力を求められます。既存の権利プロファイルの内容が新しいプロファイルに複製されます。
次の例に示すように、補助権利プロファイル、承認、およびその他のセキュリティー属性を追加または削除します。
例 9-11 既存のプロファイルからの新しい権利プロファイルの作成
この例では、管理者は LDAP リポジトリに含まれる Console User 権利プロファイルをカスタマイズします。
# profiles -S ldap Console User New name: ExampleCo Console User ExampleCo Console User > Description > Manage MyCompany Systems as the Console User Help > ExCoConsUser.html
管理者は、この権利プロファイルに対して roleauth 属性を設定します。
roleauth=yes
例 9-12 権利プロファイルからの基本特権の削除
次の例では、徹底的なテストのあとで、セキュリティー管理者は、SunRayUser 権利プロファイルが割り当てられているすべてのユーザーから基本特権を削除します。彼らは proc_session 特権を使用できなくなります。つまり、これらのユーザーはユーザーの現在のセッション以外でプロセスを調査できません。
$ profiles -K defaultpriv=basic,!proc_session SunRayUser
例 9-13 権利プロファイルの制限セットからの特権の削除
次の例では、徹底的なテストのあとで、セキュリティー管理者は、SunRayUser 権利プロファイルが割り当てられているすべてのユーザーから制限特権を削除します。この削除により、これらのユーザーはほかのユーザーのプロセスを表示できなくなります。
$ profiles -K limitpriv=all,!proc_session SunRayUser
例 9-14 コマンドへの特権の追加
この例では、セキュリティー管理者が権利プロファイル内の特権をアプリケーションに追加します。このアプリケーションは特権を認識できます。
# profiles -p SiteApp profiles:SiteApp> set desc="Site application" profiles:SiteApp> add cmd=/opt/site-app/bin/site-cmd profiles:SiteApp:site-cmd> add privs=proc_fork,proc_taskid profiles:SiteApp:site-cmd> end profiles:SiteApp> exit
確認するには、管理者は site-cmd を選択します。
# profiles -p SiteApp "select cmd=/opt/site-app/bin/site-cmd; info;end" Found profile in files repository. id=/opt/site-app/bin/site-cmd privs=proc_fork,proc_taskid
参照
セキュリティー属性の割り当てをトラブルシューティングするには、「RBAC と特権の割り当てをトラブルシューティングする方法」を参照してください。背景情報については、「割り当てられたセキュリティー属性の検索順序」を参照してください。
レガシーアプリケーションは、コマンドまたはコマンドのセットです。セキュリティー属性は、権利プロファイルのコマンドごとに設定します。その後、権利プロファイルを役割に含めます。役割を引き受けるユーザーは、セキュリティー属性を指定したレガシーアプリケーションを実行することができます。
始める前に
権利プロファイルを作成するには、Information Security または Rights Management 権利プロファイルが割り当てられている必要があります。権利プロファイルを割り当てるには、User Security 権利プロファイルが割り当てられている必要があります。
レガシーアプリケーションにセキュリティー属性を追加するときは、コマンドに追加する場合と同じ方法で追加します。セキュリティー属性を指定したコマンドを権利プロファイルに追加する必要があります。レガシーコマンドに対して、euid=0 または uid=0 のセキュリティー属性を指定します。手順の詳細については、「権利プロファイルを作成または変更する方法」を参照してください。
手順については、「権利プロファイルを作成または変更する方法」を参照してください。
例については、例 9-14 を参照してください。
権利プロファイルを役割に割り当てるには、例 9-10 を参照してください。
例 9-15 スクリプトのコマンドへのセキュリティー属性の追加
スクリプトのコマンドが setuid ビットまたは setgid ビットセットを持つ必要がある場合、実行可能なスクリプトおよびコマンドに対して、権利プロファイルでセキュリティー属性を追加する必要があります。その後、権利プロファイルを役割に含め、含めた役割をユーザーに割り当てます。ユーザーが、役割を引き受け、スクリプトを実行すると、コマンドはそのセキュリティー属性で実行されます。
例 9-16 スクリプトまたはプログラム内の承認の確認
承認用のスクリプトを用意するには、auths コマンドに基づいたテストを追加する必要があります。このコマンドの詳細については、auths(1) のマニュアルページを参照してください。
たとえば、次の行では、$1 引数に指定した承認がユーザーに与えられているかどうかをテストします。
if [ `/usr/bin/auths|/usr/xpg4/bin/grep $1` ]; then echo Auth granted else echo Auth denied fi
より万全を期すために、テストにはワイルドカードを使用するほかの承認を確認するロジックを含める必要があります。たとえば、solaris.system.date 承認がユーザーにあるかどうかをテストするには、次の文字列を確認する必要があります。
solaris.system.date
solaris.system.*
solaris.*
プログラムを作成している場合は、getauthattr() 関数を使用して、承認をテストします。
割り当てられたセキュリティー属性でユーザーまたは役割のプロセスが実行されないのは、いくつかの要因が影響している可能性があります。
セキュリティー属性のスペルが間違っている。スペルが間違った承認は通知なしに失敗します。
ユーザーまたは役割がその割り当てが含まれているネームサービスを使用していない。
予想していた割り当てがその属性の最初の割り当てではない。
ユーザーまたは役割のセキュリティー属性が検索され、認証時に割り当てられる順番によって、どの割り当てが成功するかが決まります。承認は例外です。検索中に、ユーザーまたは役割に割り当てられる承認は蓄積されます。それに対して、特権の割り当てや、権利プロファイル内のセキュリティー属性の割り当ては、検索に依存しています。最初の割り当てに成功すると、それ以降の割り当ては無視されます。
コマンドがプロファイルシェルで実行されていない。
始める前に
root 役割になっている必要があります。
nscd デーモンには長い有効期間を設定することができます。デーモンを再起動して、現在のデータでネームサービスを更新します。
セキュリティー属性を userattr -v コマンドの値として使用します。たとえば、次のコマンドは割り当てられているセキュリティー属性と、その割り当てがユーザー jdoe に対して行われた場所を示しています。
# userattr -v audit_flags jdoe Modifications to the system defaults user_attr: fw:no # userattr -v auths jdoe Assigned authorizations solaris.admin.wusb.read,solaris.device.cdrw,solaris.device.mount.removable, solaris.mail.mailq,solaris.profmgr.read,solaris.smf.manage.audit, solaris.smf.value.audit # userattr -v audit_flags jdoe Modifications to audit preselection mask # userattr -v auths jdoe Assigned authorizations # userattr -v defaultpriv jdoe Modifications to basic user privileges # userattr -v limitpriv jdoe Modifications to limit privileges # userattr -v lock_after_retries jdoe Automatic lockout attribute # userattr -v profiles jdoe Assigned rights profiles user_attr: Audit Review,Stop # userattr roles jdoe Assigned roles user_attr : cryptomgt,infosec
たとえば、成功するためには euid=0 ではなく uid=0 が必要なコマンドもあります。状況によっては承認が必要となるコマンドもあります。
userattr コマンドを使用します。
リスト内のもっとも古い権利プロファイルに含まれる属性の値がユーザーの使用できる値です。この値が正しくない場合は、その権利プロファイルで値を変更するか、またはプロファイルリストの順番を変えます。
特権付きのコマンドについては、特権が defaultpriv キーワードで割り当てられているかどうかを確認します。この割り当ては、特定のコマンドの特権に追加されます。
属性が 1 つの役割に割り当てられている場合、ユーザーはその役割を引き受けてセキュリティー属性を取得する必要があります。属性が複数の役割に割り当てられている場合、リスト内のもっとも古い役割での割り当てが有効です。この値が正しくない場合は、正しい値をリスト内の最初の役割に割り当てるか、または役割の割り当ての順番を変えます。
注 - 状況によっては承認が必要となるコマンドもあります。ベストプラクティスは、特権を直接割り当てるのではなく、管理コマンドが含まれている権利プロファイルを割り当てることです。
管理コマンドが含まれている権利プロファイルを確認します。承認が含まれている権利プロファイルが存在する場合は、単に特権だけではなく、その権利プロファイルをユーザーに割り当てます。その権利プロファイルを、そのコマンドが含まれるほかの権利プロファイルの前に順序付けます。
管理コマンドは、プロファイルシェルで実行する必要があります。ユーザーエラーを軽減するために、プロファイルシェルをユーザーのログインシェルとして割り当てることができます。あるいは、管理コマンドをプロファイルシェルで実行するようユーザーに注意を促すこともできます。
特に、ユーザーの defaultpriv および limitpriv 属性の値を確認します。
権利プロファイルリスト内のもっとも古い値がユーザーの使用できる値です。この値が正しくない場合は、その権利プロファイルで値を変更するか、またはプロファイルリストの順番を変えます。
特に、プロファイルの defaultpriv および limitpriv 属性の値を確認します。
コマンドが 1 つの役割に割り当てられている場合、ユーザーはその役割を引き受けてセキュリティー属性を取得する必要があります。属性が複数の役割に割り当てられている場合、リスト内のもっとも古い役割での割り当てが有効です。この値が正しくない場合は、正しい値をリスト内の最初の役割に割り当てるか、または役割の割り当ての順番を変えます。
管理コマンドを成功させるためには特権が必要です。状況によっては承認が必要となるコマンドもあります。ベストプラクティスは、管理コマンドが含まれている権利プロファイルを割り当てることです。
特に、役割の defaultpriv および limitpriv 属性の値を確認します。
権利プロファイルリスト内のもっとも古い値がユーザーの使用できる値です。この値が正しくない場合は、その権利プロファイルで値を変更するか、またはプロファイルリストの順番を変えます。