アクセス制御では、特定の情報へのアクセス権を一部のクライアントに与え、その他のクライアントには与えないように指定することができます。アクセス制御は、1 つまたは複数のアクセス制御リスト (ACL) を使用して実装します。ACL は、指定されたエントリとその属性へのアクセス権を許可または拒否する一連のアクセス制御命令 (ACI) から構成されます。アクセス権には、読み取り、書き込み、検索、プロキシ、追加、削除、比較、インポート、およびエクスポートを行う機能が含まれます。
ACL を使用すると、次の項目に対する権限を設定できます。
ディレクトリ全体
ディレクトリの特定のサブツリー
ディレクトリ内の特定のエントリ
特定のエントリの属性セット
特定の LDAP 検索フィルタにマッチするすべてのエントリ
また、特定のユーザー、グループに属するすべてのユーザー、およびディレクトリのすべてのユーザーに対する権限を設定できます。さらに、IP アドレスや DNS 名など、ネットワークの場所に対してアクセス権を定義することもできます。
この節では、Directory Server のアクセス制御メカニズムの概要を説明します。アクセス制御や ACI の設定方法の詳細については、『Sun Java System Directory Server Enterprise Edition 6.3 管理ガイド』の第 7 章「Directory Server のアクセス制御」を参照してください。アクセス制御メカニズムのアーキテクチャーについては、『Sun Java System Directory Server Enterprise Edition 6.3 Reference』の「How Directory Server Provides Access Control」を参照してください。
Directory Server のデフォルト動作は、アクセスを許可する特定の ACI が存在していないかぎりアクセスを拒否する、というものです。したがって、ACI が 1 つも定義されていなければ、サーバーへのすべてのアクセスが拒否されます。
Directory Server をインストールしたり新しいサフィックスを追加したりすると、ルート DSE 内にいくつかのデフォルト ACI が自動的に定義されます。この ACI は、セキュリティー要件に合うように変更できます。
デフォルト ACI やそれらの変更方法の詳細については、『Sun Java System Directory Server Enterprise Edition 6.3 Reference』の「How Directory Server Provides Access Control」を参照してください。
Directory Server 6.x には、ACI の適用範囲に対する主な変更が 2 つ含まれています。
ACI の適用範囲を指定する機能:Directory Server 5.x では、ACI の適用範囲を指定できませんでした。ACI は自動的に、その ACI の格納先となるエントリとそのすべてのサブツリーに対して適用されていました。このため、場合によっては「拒否」ACI を使用する必要がありました。拒否 ACI と許可 ACI が単一のエントリに適用される場合は特に、拒否 ACI の管理が困難になる可能性があります。
Directory Server 6.x では ACI の適用範囲を指定できます。つまり、「許可」ACI を使ってアクセス制御を行えます。拒否ベースのアクセス制御の使用が避けられなかったり、そうしたアクセス制御を使用したほうが設定が容易になったりする場合もありますが、拒否 ACI の使用は基本的にはお勧めできません。ACI の適用範囲の指定方法については、『Sun Java System Directory Server Enterprise Edition 6.3 管理ガイド』の第 7 章「Directory Server のアクセス制御」を参照してください。
ルート ACI がルートエントリとそのサブツリー全体に適用されるようになった:Directory Server 5.x では、ルート DSE に格納された ACI はルートエントリのみに適用され、その子には適用されませんでした。ほかの任意のエントリ内の ACI は、その ACI の格納先エントリとそのすべてのサブツリーに対して適用されていました。Directory Server Enterprise Edition では、ルートエントリ内に配置された ACI が、ほかの任意の場所に配置された ACI と同様に扱われます。
新しいルート ACI には、明確なセキュリティー上の利点が 1 つあります。管理者は、特定の操作を実行する際に Directory Manager としてバインドする必要がなくなりました。SSL などの強い認証によるバインドを管理者に強制できるようになりました。ルートエントリ「だけに」適用することを目的とした ACI を設定するには、その ACI の適用範囲を具体的に base に設定する必要があります。
ACI の適用範囲の変更は移行に影響を与えます。5.x バージョンの Directory Server から Directory Server 6.x に移行する場合には、『Sun Java System Directory Server Enterprise Edition 6.3 Migration Guide』の「Changes to ACIs」を参照してください。
Directory Server 6.x が提供するアクセス制御モデルでは、異なる多くのメカニズムを通じてユーザーにアクセスを許可できます。しかしながら、この柔軟性のために、セキュリティーポリシーがかなり複雑になる可能性があります。IP アドレス、マシン名、時刻、認証方法など、いくつかのパラメータを使用すれば、あるユーザーのセキュリティーコンテキストを定義できます。
セキュリティーポリシーを単純化するために、Directory Server では、指定されたディレクトリエントリおよび属性に対する、ある特定のユーザーの実行アクセス権限を要求および一覧表示できます。詳細については、『Sun Java System Directory Server Enterprise Edition 6.3 管理ガイド』の「実行権限の表示」を参照してください。
次の各ヒントを参考にすれば、ディレクトリのセキュリティーモデルの単純化とパフォーマンスの改善を図れる可能性があります。
ディレクトリ内の ACI の数を最小化し、可能であればマクロ ACI を使用する。
Directory Server は 50,000 件を超える ACI を評価可能ですが、多数の ACI 文を管理するのは容易ではありません。また、過剰な ACI はメモリー消費にも悪影響を及ぼす可能性があります。
許可権限と拒否権限のバランスを図る。
デフォルトの規則は、アクセスを具体的に許可されていないすべてのユーザーのアクセスを拒否することです。ただし、ツリーのルートの近くでアクセスを許可する 1 つの ACI を使用し、リーフエントリの近くで少数の拒否 ACI を使用すれば、ACI の数を減らすことができます。このようにすると、最下位のエントリの近くでアクセスを許可する ACI が必要以上に多くなることがなくなります。
ACI では最小の属性セットを指定する。
オブジェクトの属性の一部でアクセスを許可または拒否する場合、許可または拒否する属性の最小リストを決めます。次に、最小の属性リストを管理するように ACI を表します。
たとえば、ユーザーオブジェクトクラスに多くの属性が含まれている場合を考えます。いくつかの属性だけをユーザーが更新できるようにするには、その少数について書き込み権限を許可する ACI を作成します。1 つか 2 つの属性以外のすべてをユーザーが更新できるようにする場合は、それらの 1 つか 2 つの属性について書き込み権限を拒否する ACI を作成します。
LDAP 検索フィルタは慎重に使用する。
検索フィルタは、アクセス管理対象のオブジェクトを直接指定しません。したがって、特にディレクトリが複雑になるにつれて、検索フィルタによって予期しない結果が得られる可能性があります。ACI 内で検索フィルタを使用する場合、その同じフィルタを使って ldapsearch 操作を実行してください。このアクションにより、その変更の結果がユーザーのディレクトリにとって何を意味するのかを確認できます。
ディレクトリツリーの別の部分で ACI を重複させない。
オーバーラップしている ACI を探します。グループ書き込みアクセス権を commonName および givenName 属性に対して許可する ACI が、ディレクトリのルート位置に存在するとします。さらに、それと同じグループ書き込みアクセス権を commonName 属性に対してだけ許可する別の ACI も存在するとします。この場合、そのグループに対して 1 つの属性のみの書き込みアクセス権を与えるように、ACI を修正することを検討してください。
ディレクトリが複雑になるほど、ACI のオーバーラップが間違って発生する確率も高くなります。ACI のオーバーラップを回避すれば、セキュリティーの管理が容易になり、ディレクトリ内の ACI の合計数も減少します。
ACI に名前を付ける。
ACI に名前を付けることは省略可能ですが、各 ACI に意味のある短い名前を付ければ、セキュリティーモデルの管理が容易になります。
ユーザーエントリの標準属性を使用して、アクセス権限を決める。
可能なかぎり、すでに標準ユーザーエントリの一部となっている情報を使用して、アクセス権限を決めてください。特別な属性を作成する必要がある場合は、それらの属性をロールまたはサービスクラス (CoS) の定義の一部として作成することを検討します。ロールと CoS の詳細については、『Sun Java System Directory Server Enterprise Edition 6.3 Reference』の第 8 章「Directory Server Groups and Roles」および『Sun Java System Directory Server Enterprise Edition 6.3 Reference』の第 9 章「Directory Server Class of Service」を参照してください。
ACI を互いにできるだけ近い位置にまとめる。
ACI の配置をディレクトリのルートポイントとディレクトリの主な分岐点に限定します。ACI を編成してグループにまとめると、ACI リストの全体を管理しやすくなり、ACI の合計数を最小に保つことができます。
二重否定は使用しないようにする (バインド DN が cn=Joe と等しくない場合の書き込みの拒否など)。
サーバーはこの構文を理解できますが、管理者にとっては混乱の元となります。