Solaris のシステム管理 (第 2 巻)

第 19 章 役割によるアクセス制御

この章では、Solaris 8 リリースの新しいセキュリティ機能である、役割によるアクセス制御について説明します。

役割によるアクセス制御の概要

役割によるアクセス制御 (RBAC) は、スーパーユーザーに依存する従来のシステムの「すべてを許可するか、すべてを許可しない」というセキュリティ方式に代わるものです。これまでの方式では、スーパーユーザーの権限が強すぎるだけでなく、他のユーザーの権限が弱すぎるためユーザーが自分の問題を解決できないという問題がありました。RBAC を使用すると、スーパーユーザー権限をパッケージ化してユーザーアカウントに割り当てることができます。

RBAC を使用すると、適切な権限をパッケージ化してユーザーに割り当てることによって、ユーザーが自分の問題を解決できるようになります。スーパーユーザーの権限をいくつかのパッケージに分割し、それぞれを管理責任を分担する人たちに割り当てることによって、スーパーユーザーの権限は縮小します。

このように RBAC を使用すると、権限を分離したり、他のユーザーへの特権操作の委譲を管理したり、アクセス制御度合いを変更したりできます。

RBAC には次の機能があります。

RBAC では、4 つのデータベースを使用して特権操作のアクセス権をユーザーに与えます。

次の図は RBAC の動作を示したものです。データベースは四角枠で示され、矢印はデータベース間の関係を意味します。この関係に割り当てられるエンティティは矢印の横に示されます。

Graphic

user_attr データベースでは、承認 (1) またはプロファイル (2) をユーザーに割り当てることができます。これは特権操作をユーザーに直接割り当てる方法です。この方法とは別にユーザーを役割 (3) に割り当てて、その役割に関連するすべての特権操作へのアクセス権をユーザーに与えることもできます。プロファイルは prof_attr データベースに定義され、auth_attr に定義されている承認 (4) と、そのプロファイル用に exec_attr に定義されている属性付きコマンド (5) を含むことができます。

プロファイルに割り当てられたコマンドは、「プロファイルシェル」と呼ぶ特別なシェルで実行されます。プロファイルシェルには pfsh、pfcsh、pfksh があり、それぞれ Bourne シェル (sh)、C シェル (csh)、Korn シェル (ksh) に対応しています。

拡張ユーザー属性データベース (user_attr)

/etc/user_attr データベースは passwd データベースと shadow データベースを補足します。このデータベースには、承認プロファイルや実行プロファイルなど、拡張ユーザー属性が含まれます。このデータベースではユーザーに役割を割り当てることもできます。

role は、一連の管理作業を行うための特殊なユーザーアカウントです。ほとんどの点で通常のユーザーアカウントと同じですが、このアカウントには su コマンドからしかアクセスできません。たとえば CDE のログインウィンドウから、通常のログインを行う場合にこのアカウントにアクセスすることはできません。role アカウントでは、通常のアカウントでは使用できない特殊な属性 (一般には root ユーザー ID) を使用してコマンドにアクセスできます。

user_attr データベースの各フィールドは次のようにコロンで区切ります。


user:qualifier:res1:res2:attr

フィールドの意味は次のとおりです。

ファイル名 

説明 

user

passwd(4) データベースに指定されているユーザー名

qualifier

将来、使用される 

res1

将来、使用される 

res2

将来、使用される 

attr

セミコロン (;) で区切られた、キーと値のペアからなるリスト (省略可能)。これは、ユーザーがコマンドを実行したときに使用されるセキュリティ属性を表す。有効なキーは auths、profiles、roles、type

  • auths には、auth_attr.4 データベースに定義されている名前から選択した承認名をコンマで区切って指定する。承認名には、ワイルドカードとしてアスタリスク (*) を使用できる。たとえば、solaris.device.* はすべての Solaris デバイスの承認を意味する

  • profiles には、prof_attr(4) から選択したプロファイル名をコンマで区切り特定の順序で指定する。ユーザーがどのコマンドをどのコマンド属性で実行できるかはプロファイルで決まる。user_attr の各ユーザーには少なくとも All プロファイルが指定されていなければならない。このプロファイルでは、ユーザーはすべてのコマンドを属性なしで実行できる。プロファイルの順序は重要である。この順序は UNIX の検索パスと同じように働く。実行するコマンドにどの属性 (属性を使用する場合) が適用されるかは、そのコマンドが含まれている、リストの最初のプロファイルによって決まる

  • roles には、ユーザーに割り当てる役割名をコンマで区切って指定する。役割も同じ user_attr データベースに定義されることに注意する。役割の場合は、type 値に role が設定される。役割を他の役割に割り当てることはできない

  • type には、アカウントが通常ユーザーの場合は normal、役割の場合は role を設定する。役割は、通常ユーザーがログインしたあとそのユーザーに与えられる

一般的な値を使用した user_attr データベースの例を次に示します。

Graphic

一般的な役割の割り当てを次の user_attr データベースを使用して説明します。この例では、sysadmin の役割がユーザー johndoe に割り当てられます。johndoe は、sysadmin の役割を与えられると、Device Management、Filesystem Management などのプロファイルや All プロファイルにアクセスできます。

Graphic

承認

承認とは、制限された機能へのアクセス権を付与する、ユーザーの権利です。承認は、何が承認されていて、誰が承認を作成したかを示す固有の文字列です。

制限された機能をユーザーが実行できるかどうかは、一定の特権プログラムが承認を検査して判定します。たとえば、あるユーザーが別のユーザーの crontab ファイルを編集するには、solaris.jobs.admin 承認が必要です。

承認はすべて auth_attr データベースに格納されます。承認は、ユーザー (または役割) に直接割り当てることもできます。その場合は、承認を user_attr データベースに指定します。実行プロファイルに承認を割り当て、実行プロファイルをユーザーに割り当てることもできます。

auth_attr データベースのフィールドは次のようにコロンで区切ります。


authname:res1:res2:short_desc:long_desc:attr

フィールドの意味は次のとおりです。

フィールド名 

説明 

authname

承認を識別する固有の文字列。形式は prefix.[suffix] 。Solaris オペレーティング環境では、承認の接頭辞として Solaris を使用する。他のすべての承認には、承認を作成する組織のインターネットドメインを逆にしたもので始まる接頭辞を使用する (たとえば、com.xyzcompany)。接尾辞は、一般には機能分野と機能操作など、承認されるものを示す

接尾辞がない (つまり、authname が接頭辞と機能分野からなり、ピリオドで終わっている) 場合には、authname は、承認としてよりも、アプリケーションによって GUI の中でヘッダーとして使用される。たとえば、authname solaris.printmgr はヘッダーの例である

authname が grant という単語で終わっている場合には、authname は grant 承認として使用され、ユーザーは関連する承認 (同じ接頭辞と機能分野をもつ承認) を他のユーザーに委譲できる。たとえば、authname solaris.printmgr.grant は grant 承認の例である。ユーザーは、solaris.printmgr.admin、solaris.printmgr.nobanner などの承認を他のユーザーに委譲できる

res1

将来、使用される 

res2

将来、使用される 

short_desc

GUI のスクロールリストの中など、ユーザーインタフェースに表示するのに適している承認の簡略名 

long_desc

詳しい記述。このフィールドには、承認の目的、承認が使用されるアプリケーション、この使用に関心があるユーザーのタイプなどを記述する。詳しい記述は、アプリケーションのヘルプテキストに表示できる 

attr

承認の属性を記述するキーと値のペアをセミコロン (;) で区切ったリスト (省略可能)。ゼロまたは 1 つ以上のキーを指定できる 

キーワードは、HTML 形式のヘルプファイルを識別するのに役立つ。ヘルプファイルは、/usr/lib/help/auths/locale/C ディレクトリの index.html ファイルからアクセスできる

一般的な値を使用した auth_attr データベースの例を次に示します。

Graphic

auth_attr データベースと user_attr データベースの関係を次の例で示します。auth_attr データベースに定義されている solaris.system.date 承認が user_attr データベースのユーザー johndoe に割り当てられます。

Graphic

実行プロファイル

実行プロファイルは、承認やコマンドを特別な属性を使用してグループ化し、それをユーザーや役割に割り当てるための統合機構です。特別な属性には、実 UID、実 GID、実効 UID、実効 GID が含まれます。最も一般的な属性では、実効 UID に root を設定します。実効プロファイルの定義は prof_attr データベースに格納されます。

prof_attr データベースのフィールドは次のようにコロンで区切ります。


profname:res1:res2:desc:attr

フィールドの意味は次のとおりです。

フィールド名 

説明 

profname

プロファイル名。プロファイル名では大文字と小文字が区別される 

res1

将来、使用される 

res2

将来、使用される 

desc

詳しい記述。このフィールドでは、どのようなユーザーがこの使用に関心があるかなど、プロファイルの目的を説明する。詳しい記述は、アプリケーションのヘルプテキストとして適しているものでなければならない 

attr

実行時にそのオブジェクトに適用するセキュリティ属性を記述するキーと値のペアをセミコロン (;) で区切ったリスト (省略可能)。ゼロまたは 1つ以上のキーを指定できる。有効なキーは help と auths

キーワード help には HTML 形式のヘルプファイルを指定する。ヘルプファイルは、/usr/lib/help/auths/locale/C ディレクトリの index.html ファイルからアクセスできる

auths には、auth_attr.4 データベースに定義されている名前から選択した承認名をコンマで区切って指定する。承認名には、ワイルドカードとしてアスタリスク (*) を使用できる

一般的な値を使用した prof_attr データベースの例を次に示します。

Graphic

prof_attr データベースと user_attr データベースの関係を次の例で示します。prof_attr データベースに定義されている Device Management プロファイルが user_attr データベースの役割 sysadmin に割り当てられます。

Graphic

prof_attr データベースと auth_attr データベースの関係を次の例で示します。prof_attr データベースには、solaris.device 文字列で始まるすべての承認が Device Management プロファイルに割り当てられています。これらの承認は auth_attr データベースに定義されています。

Graphic

実行属性

プロファイルに関連付けられた実行属性は、そのプロファイルが割り当てられているユーザーや役割によって実行できる (特別なセキュリティ属性をもつ) コマンドです。特別なセキュリティ属性とは、コマンドを実行するときにプロセスに追加できる UID、EUID、GID、EGID などの属性のことです。

実行属性の定義は exec_attr データベースに格納されます。

exec_attr データベースのフィールドは次のようにコロンで区切って指定します。


name:policy:type:res1:res2:id:attr

フィールドの意味は次のとおりです。

フィールド名 

意味 

name

プロファイル名。プロファイル名では大文字と小文字が区別される 

policy

このエントリに関連付けるセキュリティポリシー。現在は、suser (スーパーユーザーポリシーモデル) が唯一の有効なポリシーである

type

属性が指定されるエンティティのタイプ。現在は、cmd (コマンド) が唯一の有効なタイプである

res1

将来、使用される 

res2

将来、使用される 

id

このエンティティを表す文字列。ワイルドカードとしてアスタリスクを使用できる。コマンドには、完全パスかワイルドカードをもつパスを指定する。引数を指定する場合は、引数をもつスクリプトを作成し、そのスクリプトを id に指定する

attr

実行時にそのエンティティに適用するセキュリティ属性を記述するキーと値のペアをセミコロン (;) で区切ったリスト (省略可能)。ゼロまたは 1 つ以上のキーを指定できる。キーワードのリストは、適用するポリシーによって異なる。有効なキーは euid、uid、egid、および gid である

euid と uid には、単一のユーザー名か数値ユーザー ID を指定する。euid を使用すると、コマンドは指定された実効 UID で動作する。これは、実行可能ファイルの setuid ビットを有効にするのと同じことである。uid を使用すると、コマンドは指定された実 UID と実効 UID で動作する

egid と gid には、単一のグループ名か数値グループ ID を指定する。egid を使用すると、コマンドは指定された実効 GID で動作する。これは、実行可能ファイルの setgid ビットを有効にするのと同じことである。gid を使用すると、コマンドは指定された実 GID と実効 GID で動作する

一般的な値を使用した exec_attr データベースの例を次に示します。

Graphic

exec_attr と prof_attr データベースの関係を次の例で示します。Printer Management プロファイルは prof_attr データベースに定義されています。このプロファイルには 13 の実行属性があり、適切なセキュリティ属性が exec_attr データベースで割り当てられています。

Graphic

役割によるアクセス制御を設定する方法

役割を設定するには su コマンドを使用します。役割にログインすることはできません。


% su <自分の役割>
Password: <自分の役割のパスワード>
#

プロファイル内のコマンドを使用するには、コマンドをシェルに入力します。


# lpadmin -p myprinter options

lpadmin コマンドは、その役割のプロファイルで lpadmin コマンドに割り当てられているプロセス属性 (特別な UID や GID) を使用して実行されます。

役割によるアクセス制御を管理するツール

データベースを直接編集する他に、役割によるアクセス制御を使用して管理するためのツールには次のものがあります。

コマンド 

説明 

auths(1)

ユーザーに対する承認を表示する 

makedbm(1M)

dbm ファイルを作成する

nscd(1M)

ネームサービスキャッシュデーモン。user_attr、prof_attr、および exec_attr データベースをキャッシュするときに使用する

pam_role_auth(5)

PAM 用の役割アカウント管理モジュール。役割を行う承認があるかを調べる 

pfexec(1)

プロファイルシェル。exec_attr データベースに指定されている属性を使用してコマンドを実行するときにプロファイルシェルで使用される

policy.conf(4)

セキュリティポリシーの構成ファイル。付与されている承認をリストする 

profiles(1)

指定されたユーザーのプロファイルを表示する 

roles(1)

ユーザーに付与されている役割を表示する 

roleadd(1M)

役割のアカウントをシステムに追加する 

roledel(1M)

役割のアカウントをシステムから削除する 

rolemod(1M)

システムにある役割のアカウント情報を変更する 

useradd(1M)

ユーザーアカウントをシステムに追加する。ユーザーのアカウントに役割を割り当てるには、-P オプションを使用する

userdel(1M)

ユーザーのログインをシステムから削除する 

usermod(1M)

システムにあるユーザーのアカウント情報を変更する