この章では、Solaris 8 リリースの新しいセキュリティ機能である、役割によるアクセス制御について説明します。
役割によるアクセス制御 (RBAC) は、スーパーユーザーに依存する従来のシステムの「すべてを許可するか、すべてを許可しない」というセキュリティ方式に代わるものです。これまでの方式では、スーパーユーザーの権限が強すぎるだけでなく、他のユーザーの権限が弱すぎるためユーザーが自分の問題を解決できないという問題がありました。RBAC を使用すると、スーパーユーザー権限をパッケージ化してユーザーアカウントに割り当てることができます。
RBAC を使用すると、適切な権限をパッケージ化してユーザーに割り当てることによって、ユーザーが自分の問題を解決できるようになります。スーパーユーザーの権限をいくつかのパッケージに分割し、それぞれを管理責任を分担する人たちに割り当てることによって、スーパーユーザーの権限は縮小します。
このように RBAC を使用すると、権限を分離したり、他のユーザーへの特権操作の委譲を管理したり、アクセス制御度合いを変更したりできます。
RBAC には次の機能があります。
承認 - 制限された機能へのアクセス権を付与する権利
実行プロファイル (または単にプロファイル) - 承認やコマンドを特別な属性を使ってグループ化するための統合機構。たとえば、ユーザー ID やグループ ID
役割 (Role) - 一連の管理作業を行うことを目的にした特殊なユーザーアカウント
RBAC では、4 つのデータベースを使用して特権操作のアクセス権をユーザーに与えます。
user_attr (拡張ユーザー属性データベース) - ユーザーおよび役割を承認や実行プロファイルと関連付けます。
auth_attr (承認属性データベース) - 承認とその属性を定義し、関連するヘルプファイルを識別します。
prof_attr (実行プロファイル属性データベース) - プロファイルを定義し、プロファイルに割り当てられている承認を列挙し、関連するヘルプファイルを識別します。
exec_attr (プロファイル実行属性データベース) - プロファイルに割り当てられている特権操作を定義します。
次の図は RBAC の動作を示したものです。データベースは四角枠で示され、矢印はデータベース間の関係を意味します。この関係に割り当てられるエンティティは矢印の横に示されます。
user_attr データベースでは、承認 (1) またはプロファイル (2) をユーザーに割り当てることができます。これは特権操作をユーザーに直接割り当てる方法です。この方法とは別にユーザーを役割 (3) に割り当てて、その役割に関連するすべての特権操作へのアクセス権をユーザーに与えることもできます。プロファイルは prof_attr データベースに定義され、auth_attr に定義されている承認 (4) と、そのプロファイル用に exec_attr に定義されている属性付きコマンド (5) を含むことができます。
プロファイルに割り当てられたコマンドは、「プロファイルシェル」と呼ぶ特別なシェルで実行されます。プロファイルシェルには pfsh、pfcsh、pfksh があり、それぞれ Bourne シェル (sh)、C シェル (csh)、Korn シェル (ksh) に対応しています。
/etc/user_attr データベースは passwd データベースと shadow データベースを補足します。このデータベースには、承認プロファイルや実行プロファイルなど、拡張ユーザー属性が含まれます。このデータベースではユーザーに役割を割り当てることもできます。
role は、一連の管理作業を行うための特殊なユーザーアカウントです。ほとんどの点で通常のユーザーアカウントと同じですが、このアカウントには su コマンドからしかアクセスできません。たとえば CDE のログインウィンドウから、通常のログインを行う場合にこのアカウントにアクセスすることはできません。role アカウントでは、通常のアカウントでは使用できない特殊な属性 (一般には root ユーザー ID) を使用してコマンドにアクセスできます。
user_attr データベースの各フィールドは次のようにコロンで区切ります。
user:qualifier:res1:res2:attr |
フィールドの意味は次のとおりです。
一般的な値を使用した user_attr データベースの例を次に示します。
一般的な役割の割り当てを次の user_attr データベースを使用して説明します。この例では、sysadmin の役割がユーザー johndoe に割り当てられます。johndoe は、sysadmin の役割を与えられると、Device Management、Filesystem Management などのプロファイルや All プロファイルにアクセスできます。
承認とは、制限された機能へのアクセス権を付与する、ユーザーの権利です。承認は、何が承認されていて、誰が承認を作成したかを示す固有の文字列です。
制限された機能をユーザーが実行できるかどうかは、一定の特権プログラムが承認を検査して判定します。たとえば、あるユーザーが別のユーザーの 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 データベースの例を次に示します。
auth_attr データベースと user_attr データベースの関係を次の例で示します。auth_attr データベースに定義されている solaris.system.date 承認が user_attr データベースのユーザー johndoe に割り当てられます。
実行プロファイルは、承認やコマンドを特別な属性を使用してグループ化し、それをユーザーや役割に割り当てるための統合機構です。特別な属性には、実 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 データベースの例を次に示します。
prof_attr データベースと user_attr データベースの関係を次の例で示します。prof_attr データベースに定義されている Device Management プロファイルが user_attr データベースの役割 sysadmin に割り当てられます。
prof_attr データベースと auth_attr データベースの関係を次の例で示します。prof_attr データベースには、solaris.device 文字列で始まるすべての承認が Device Management プロファイルに割り当てられています。これらの承認は auth_attr データベースに定義されています。
プロファイルに関連付けられた実行属性は、そのプロファイルが割り当てられているユーザーや役割によって実行できる (特別なセキュリティ属性をもつ) コマンドです。特別なセキュリティ属性とは、コマンドを実行するときにプロセスに追加できる 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 データベースの例を次に示します。
exec_attr と prof_attr データベースの関係を次の例で示します。Printer Management プロファイルは prof_attr データベースに定義されています。このプロファイルには 13 の実行属性があり、適切なセキュリティ属性が exec_attr データベースで割り当てられています。
役割を設定するには 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) |
システムにあるユーザーのアカウント情報を変更する |