承認とアクセス権が NIS+ 資格および認証とどのように関連して NIS+ 名前空間のセキュリティを維持しているかについては、「NIS+ の承認とアクセス - 紹介」および第 6 章「セキュリティの概要」を参照してください。
「承認クラス」に説明の あるように、NIS+ のアクセス権は各クラスに与えられるものです。4 つの NIS+ クラスが用意されています。
「所有者」
所有者クラスは 1 つの NIS+ 主体です。デフォルトではオブジェクトの所有者は、オブジェクトを作成した主体になります。しかし、オブジェクトの所有者は所有権を別の主体に譲ることで所有者を変更できます。
「グループ」
グループクラスは 1 つ以上の NIS+ 主体の集まりです。 1 つの NIS+ オブジェクトは 1 つだけの NIS+ グループを持つことができます。
「その他」
その他クラスには、NIS+ に認証された NIS+ 主体のすべて (すべての所有者クラスとグループクラス、および有効な DES 資格を提示したものすべて) が含まれます。
「未認証」
未認証クラスは、すべての適切な認証を受けられなかったもので構成されます。すなわち、有効な DES 資格を提示できなかったすべてのものです。
「NIS+ のアクセス権について」で詳述したように、NIS+ には 4 種類のアクセス権があります。
「読み取り」
オブジェクトに対する読み取り権を持った主体がオブジェクトの内容を読み取れます。
「変更」
「削除」
「作成」
上位レベルのオブジェクトに対する作成権を持った主体が、そのレベルの下位に新規のオブジェクトを作成できます。つまり、NIS+ ディレクトリオブジェクトに対して作成権を持っていれば、そのディレクトリ内に新規のテーブルを作成できます。NIS+ テーブルに対する作成権があれば、そのテーブル内に新規の列とエントリを作成できます。
これらの権限は論理的には、ディレクトリ、テーブル、列とエントリのように下位に展開するものであることを銘記してください。たとえば、新規にテーブルを作成するには、そのテーブルを格納する NIS+ ディレクトリオブジェクトに対する作成権を持っていなくてはなりません。そのテーブルを作成した場合、そのデフォルト所有者になります。所有者として、自分自身にそのテーブルに対する作成権を与え、テーブルに新規のエントリを作成できます。テーブル内に新規のエントリを作成した場合、それらのエントリの所有者になります。テーブルの所有者として、テーブルレベルの作成権を他の人に与えることもできます。たとえば、自身のテーブルのグループクラスのテーブルレベルの作成権を与えることができます。その場合、テーブルのグループのすべてのメンバーがテーブル内に新規のエントリを作成できます。新規のテーブルエントリを作成した、グループの個々のメンバーはそのエントリのデフォルト所有者になります。
承認クラスは連鎖の関係にあります。つまり、上位クラスは通常下位クラスにも属しており、自動的に下位クラスの権限を得ることになります。次のように機能します。
「所有者クラス」
オブジェクトの所有者はそのオブジェクトのグループに所属していても、いなくてもかまいません。所有者があるグループに属していると、そのグループに与えられている権限をすべて得ることになります。オブジェクトの所有者が自動的に、その他と未認証のクラスにも属することになり、自動的にこれら 2 つ のクラスに与えられている権限を獲得することになります。
「グループクラス」
オブジェクトのグループメンバーは自動的にその他と未認証クラスに所属します。したがって、グループメンバーは自動的にその他クラスと未認証クラスのメンバーがそのオブジェクトに持っている権限を獲得します。
「その他クラス」
「未認証クラス」
この基本原則は、下位クラスのアクセス権は自動的に上位クラスに与えられるということです。つまり、上位クラスは下位クラスよりも多くの 権限を持つことができ、権限が少なくなることはないということです (この原則の例外は、もし所有者がグループのメンバーでなければ、所有者の持っていない 権限をグループクラスに与えることが可能になる場合)。
NIS+ オブジェクトを作成した時、NIS+ はそのオブジェクトに所有者クラスとグループクラスのアクセス権のデフォルトセットを与えます。デフォルトでは、所有者はそのオブジェクトを作成した NIS+ 主体です。デフォルトのグループは NIS_GROUP
の環境変数で指定されたグループになります (詳細は、「デフォルトのアクセス権」を参照)。
NIS+ は NIS+ オブジェクトが作成された時に自動的に付与されたデフォルト権限を変更する 2 つの異なった方法を提供しています。
NIS_DEFAULTS
環境変数。NIS_DEFAULTS
はセキュリティに関するデフォルト値を保管し、その 1 つはアクセス権です。このデフォルトアクセス権は、オブジェクトが作成された時にオブジェクトに自動的に付与されるものです。(詳細は、「NIS+ デフォルトの表示 - nisdefaults コマンド」を参照してください。)
NIS_DEFAULTS
環境変数の値を変更すると、変更後に作成されたオブジェクトに新規の値が与えられます。 しかし、以前に作成されたオブジェクトは影響を受けません。
-D オプションはいくつかの NIS+ コマンドに用いられます。 NIS+ オブジェクトを作成するコマンドに -D オプションを使用すると、NIS_DEFAULTS
環境変数が指定したデフォルト権限を上書きします。 (詳細は、「デフォルトを無効にする」を参照してください。
NIS+ オブジェクトを作成する場合、既存のデフォルトアクセス権 (NIS_DEFAULTS
環境変数か -D オプションの指定かのいずれかによる) に対処する必要があります。デフォルト権限を変更するコマンドは次のとおりです。
NIS+ テーブルに対するアクセス権を指定する方法には、次の 3 通りあります。
「テーブル」全体を対象にアクセス権を指定する
「エントリ」(行) 単位でアクセス権を指定する
「列」単位でアクセス権を指定する
列とエントリ (行) が交差する部分をフィールドといいます。データ値はすべてこの交差領域、つまりフィールドに入力します。
列とエントリレベルのアクセス権を持っていると、テーブルレベルのアクセス権の制限があっても個々の行と列にアクセスできますが、テーブル全体へのアクセス権以上に列とエントリレベルの権限を制限することはできません。
「テーブル」
テーブルレベルは基本的なレベルです。テーブルレベルに付与されたアクセス権は、列ごとまたはエントリごとに特に変更された場合を除き、テーブル内のすべての部分に適用されます。テーブルレベルの権限は最も厳格であるべきです。
承認クラスは連結しているということに注意してください。上位クラスは、下位クラスに割り当てられた権利を取得していることになります。「アクセス権の連鎖」を参照してください。
「列」
列レベルの権限を持っていると、列ごとに追加アクセス権を持つことになります。たとえば、その他クラスと未認証クラスにテーブルレベルの権限が何も付与されていなかったとします。この場合、この 2 つのクラスはテーブル内のデータに対して、読み取り権、変更権、作成権、削除権を持ちません。列レベルの権限を持てば、テーブルレベルの権限の制限を超えて、その他クラスのメンバーであっても特定の列のデータを読み取ることができます。
一方、所有者クラスとグループクラスにテーブル全体の読み取り権が付与されている場合、列レベルの権限を使ってグループクラスの列の読み取り権を妨げることはできません。
列のグループはテーブルのグループやエントリのグループと同じにはなりません。これらはまったく異なるグループです。
「エントリ (行)」
エントリレベルの権限があれば、行ごとに追加アクセス権を持つことになります。たとえば、個々のユーザーに指定したエントリに限って変更する権限を与えることができるのです。
エントリのグループはテーブルのグループとは同じである必要はなく、別のグループにできます。そうすることによって、特定のグループのメンバーに、他のグループに属するエントリに影響を与えないで、あるエントリのセットにアクセスする権限を付与できます。
列またはエントリレベルのアクセス権は、追加アクセスを次の 2 つの方法で提供できます。 1 つは権限を持つ主体を増やす方法で、もう 1 つは同じ主体に権限を追加する方法です。もちろん、これらを組み合わせることも可能です。以下にその例を示します。
テーブルオブジェクトが、そのテーブルの所有者に対して読み取り権を与えたとします。
表 9-1 テーブル、列、エントリの例 1
|
未認証 |
所有者 |
グループ |
その他 |
---|---|---|---|---|
テーブルのアクセス権 |
---- |
r--- |
---- |
---- |
このことは、テーブルの所有者だけがテーブル全体の内容を読み取れることを意味します。所有者でない主体は、アクセスできません。テーブルのエントリ 2 にグループクラスに対して読み取り権を与えることができます。
表 9-2 テーブル、列、エントリの例 2
|
未認証 |
所有者 |
グループ |
その他 |
---|---|---|---|---|
テーブルのアクセス権 |
---- |
r--- |
---- |
---- |
エントリ 2 のアクセス権 |
---- |
---- |
r--- |
---- |
テーブルの内容をすべて読み取れるのは所有者だけですが、このテーブルのグループのメンバーであれば、この特定エントリの内容を読み取ることができます。次に、特定の列がその他クラスに読み取り権を与えたとします。
表 9-3 テーブル、列、エントリの例 3
|
未認証 |
所有者 |
グループ |
その他 |
---|---|---|---|---|
テーブルのアクセス権 |
---- |
r--- |
---- |
---- |
エントリ 2 のアクセス権 |
---- |
---- |
r--- |
---- |
列 1 のアクセス権 |
---- |
---- |
---- |
r--- |
その他のクラスのメンバーは列 1 のすべてのエントリを読み取ることができます (表 9-4 の薄い影の部分)。グループクラスのメンバーは (その他クラスにも属しているので) 列 1 のすべてとエントリ 2 の全列を読み取ることができます (表 9-4 の濃い影の部分)。*NP* になっている列は、「グループ」、「その他」いずれのクラスも読み取りができません (どちらにもアクセス権がない)。
表 9-4 テーブル、列、エントリの例 4
|
列 1 |
列 2 |
列 2 |
---|---|---|---|
エントリ 1 |
読み取り |
*NP* |
*NP* |
エントリ 2 |
読み取り |
読み取り |
読み取り |
エントリ 3 |
読み取り |
*NP* |
*NP* |
エントリ 4 |
読み取り |
*NP* |
*NP* |
エントリ 5 |
読み取り |
*NP* |
*NP* |
この節では 4 つの権限 (読み取り、作成、変更、削除) が 4 つのアクセスレベル (ディレクトリ、テーブル、列、エントリ) とどのようにかかわるのかを説明します。
種々の権限とレベルに関係した機能を次の表 9-5 にまとめます。
表 9-5 アクセス権、アクセスレベル、およびその機能
|
ディレクトリ |
テーブル |
列 |
エントリ |
---|---|---|---|---|
読み取り |
ディレクトリ内容のリスト |
テーブル内容の読み取り |
列内容の読み取り |
エントリ (行) 内容の読み取り |
作成 |
新規ディレクトリまたはテーブルオブジェクトの作成 |
新規エントリ (行) の追加 |
列に新規のデータを入力 |
エントリ (行) に新規のデータを入力 |
変更 |
オブジェクトの移動とオブジェクト名の変更 |
テーブル内の任意のデータを変更 |
列内のデータを変更 |
エントリ (行)内のデータを変更 |
削除 |
テーブル等のディレクトリオブジェクトの削除 |
エントリ (行) の削除 |
列内のデータの削除 |
エントリ (行) 内のデータの削除 |
「ディレクトリ」
ディレクトリの読み取り権があれば、ディレクトリの内容を表示できます。
「テーブル」
テーブルの読み取り権があれば、テーブル内のすべてのデータを読み取れます。
「列」
列の読み取り権があれば、その列のすべてのデータを読み取れます。
「エントリ」
エントリの読み取り権があれば、そのエントリのすべてのデータを読み取れます。
「ディレクトリ」
ディレクトリレベルの作成権があれば、テーブル等の新規オブジェクトをディレクトリ内に作成できます。
「テーブル」
テーブルレベルの作成権があれば、テーブル内に新規のエントリを作成できますが、列は作成できません。テーブルレベルの作成権だけでは、テーブルに新規のエントリを追加できますが、新規の列を追加することはできません。
「列」
列の作成権があれば、列内のフィールドに新規のデータを入力できます。新規の列を作成できません。
「エントリ」
エントリの作成権があれば、その行のフィールドに新規のデータを入力できます。 (エントリレベルの作成権では新規の行を作成することはでき ません。)
「ディレクトリ」
ディレクトリレベルの変更権があれば、ディレクトリオブジェクトの移動と名前の変更ができます。
「テーブル」
テーブルレベルの変更権があれば、テーブル内のデータをすべて変更できます。新規の行を作成 (追加) できますが、新規の列は作成できません。空白フィールドにデータを入力することも可能です。
「列」
列の変更権があれば、その列の任意のフィールドのデータを変更できます。
「エントリ」
エントリの変更権があれば、その行の任意のフィールドのデータを変更できます。
「ディレクトリ」
ディレクトリレベルの削除権があれば、テーブル等の ディレクトリ内の既存オブジェクトを削除できます。
「テーブル」
テーブルレベルの削除権があれば、テーブル内の既存のエントリ(行)を削除できますが、列は削除できません。削除できるのは既存のエントリだけで、既存の列は削除できません。
「列」
列の削除権があれば、その列の任意のフィールドのデータを削除できます。
「エントリ」
エントリの削除権があれば、その行の任意のフィールドのデータを削除できます。
オブジェクトのアクセス権は、そのオブジェクトの定義の一部として指定され、格納されます。この情報は NIS+ テーブルには格納されません。
アクセス権を読み取るには niscat コマンドを使用します。
niscat -o objectname
アクセス権を読み取るオブジェクト名を指定します。
このコマンドは、NIS+ オブジェクトに関する次の情報を返します。
「所有者」
所有権を持っている NIS+ 主体。通常はオブジェクトを作成した人ですが、元の所有者が所有権を渡した場合もある
「グループ」
オブジェクトの NIS+ 主体
「未認証クラスのアクセス権」
認証された (有効な DES 資格を提示した) か否かにかかわらず、全員が持つ権限
「所有者クラスのアクセス権」
オブジェクトの所有者に付与されたアクセス権
「グループクラスのアクセス権」
「その他クラスのアクセス権」
認証された NIS+ 主体全てに付与されたアクセス権
4 つの承認クラスのアクセス権は、次のように 16 文字の文字列で表示されます。
r---rmcdr---r---
各文字がアクセス権の種類を表します。
r は読み取り権
m は変更権
d は削除権
c は作成権
- はアクセス権のないことを表す
先頭の 4 文字は未認証に、次の 4 文字は所有者に、その次の 4 文字はグループに、そして最後の 4 文字はその他に、それぞれ与えられたアクセス権を表します。
UNIX ファイルシステムとは異なり、先頭のアクセス権は未認証用であり、所有者用ではありません。
オブジェクトを作成すると、NIS+ はそのオブジェクトにデフォルトの所有者、グループ、および アクセス権を割り当てます。デフォルトの所有者は、そのオブジェクトを作成する NIS+ 主体です。 デフォルトのグループは、環境変数 NIS_GROUP
の中で名前をつけられたグループです。デフォルトのアクセス権は次のようになります。
未認証 |
所有者 |
グループ |
その他 |
---|---|---|---|
- |
読み取り |
読み取り |
読み取り |
- |
変更 |
- |
- |
- |
作成 |
- |
- |
- |
削除 |
- |
- |
環境変数 NIS_DEFAULTS
のセットがある場合、NIS_DEFAULTS
内の値が新規のオブジェクトに適用されるデフォルト値を決定します。コマンド行でオブジェクトを作成した場合は、-D フラグを使ってデフォルト値以外を設定できます。
この節では、読み取り、変更、削除、作成の操作が行われる際、テーブルオブジェクト、 エントリ、列に対するアクセス権をサーバーが各クラスにどのように割り当てるかということについて説明します。
セキュリティレベル 0 では、サーバーはアクセス権を実行しないため、すべてのクライアントがテーブルオブジェクトに対する完全なアクセス権を付与されます。セキュリティレベル 0 は管理者だけがテストの目的で使用します。通常の業務にはレベル 0 を使用しないでください。
サーバーがアクセスを許可するか否かを決定する 4 つの要素があります。
主体が要求する処理の種類
主体がアクセスしようとしているテーブル、エントリ、または列
その特定のオブジェクトに対して、主体が所属する承認クラス
テーブル、エントリ、または列がその主体の承認クラスに割り当てたアクセス権
認証後に主体は、主体が有効な DES 資格を所持しているかを確認することで要求を行い、NIS+ サーバーは処理の種類と要求のオブジェクトを決定します。
「ディレクトリ」
オブジェクトがディレクトリかグループの場合、サーバーは 4 つのクラスに付与されている権限を知るためにオブジェクトの定義をチェックし、どのクラスに主体が所属しているか判定し、主体のクラスとそのクラスに付与された権限に基づいて、その要求を受け入れるかまたは拒否します。
「テーブル」
オブジェクトがテーブルの場合、サーバーは 4 つのクラスに付与されているテーブルレベルの権限を知るためにテーブルの定義をチェックし、どのクラスに主体が所属しているか判定します。所属しているクラスが要求処理を行うテーブルレベルの権限を持っていない 場合は、サーバーは次にどの行または列にかかわる処理かを判定し、要求処理に必要な該当する行または列レベルのアクセス権があるかを決定します。