JavaScriptが検索に必要です。
ナビゲーション・リンクをスキップ
印刷ビューの終了
Oracle Directory Server Enterprise Edition管理ガイド 11gリリース1(11.1.1.5.0)
検索フィルタ・アイコン
検索アイコン

ドキュメント情報

はじめに

第1部 Directory Serverの管理

1.  Directory Serverのツール

2.  Directory Serverのインスタンスと接尾辞

3.  Directory Serverの構成

4.  Directory Serverのエントリ

5.  Directory Serverのセキュリティ

6.  Directory Serverのアクセス制御

ACIの作成、表示および変更

ACIを作成、変更および削除するには:

ACI属性値を表示するには:

ルート・レベルでACIを表示するには:

ACI構文

ACIターゲット

ターゲット構文

ターゲット・キーワード

ACI権限

権限構文

権限の割当て

一般的なLDAP操作の権限

ACIバインド・ルール

バインド・ルールの概要

バインド・ルール構文

バインド・ルールのキーワード

ブール値バインド・ルール

dsutilコマンドを使用して通常ユーザーにユーザー・アカウントを管理させるには:

アクセス制御の使用例

匿名アクセスの許可

ACI "Anonymous Example.com"

ACI "Anonymous World"

個人エントリへの書込みアクセスの許可

ACI "Write Example.com"

ACI "Write Subscribers"

特定のレベルへのアクセス権の付与

ACI "Read Example.com only"

キー・ロールへのアクセス権の制限

ACI "Roles"

ロールに対する接尾辞全体への完全アクセスの許可

ACI "Full Access"

グループに対する接尾辞への完全アクセスの許可

ACI "HR"

グループ・エントリを追加および削除する権限の付与

ACI "Create Group"

ACI "Delete Group"

ユーザーに対するグループへの自身の追加または削除の許可

ACI "Group Members"

グループまたはロールへの条件付きアクセスの許可

ACI "Company333"

アクセスの拒否

ACI "Billing Info Read"

ACI "Billing Info Deny"

プロキシ認可

プロキシ認可の例

フィルタリングを使用したターゲットの設定

カンマを含むDNの権限の定義

実効権限の表示

実効権限取得制御へのアクセス制限

実効権限取得制御の使用方法

高度なアクセス制御: マクロACIの使用方法

マクロACIの例

マクロACIの構文

ターゲット内での($dn)とのマッチング

サブジェクト内での($dn)の置換

サブジェクト内での[$dn]の置換

($attr.attrName)に対するマクロ・マッチング

アクセス制御情報のロギング

ACIのロギングを設定するには:

TCPラップによるクライアントホスト・アクセス制御

TCPラップを有効にするには:

TCPラップを無効にするには:

7.  Directory Serverのパスワード・ポリシー

8.  Directory Serverのバックアップとリストア

9.  Directory Serverのグループ、ロールおよびCoS

10.  Directory Serverのレプリケーション

11.  Directory Serverのスキーマ

12.  Directory Serverの索引作成

13.  Directory Serverの属性値の一意性

14.  Directory Serverのロギング

15.  Directory Serverの監視

第2部 Directory Proxy Serverの管理

16.  Directory Proxy Serverのツール

17.  Directory Proxy Serverのインスタンス

18.  LDAPデータ・ビュー

19.  Directory Proxy Serverの証明書

20.  Directory Proxy Serverのロード・バランシングとクライアント・アフィニティ

21.  Directory Proxy Serverの配布

22.  Directory Proxy Serverによる仮想化

23.  仮想データ変換

24.  Directory Proxy ServerとバックエンドLDAPサーバーの接続

25.  クライアントとDirectory Proxy Serverの接続

26.  Directory Proxy Serverのクライアント認証

27.  Directory Proxy Serverのロギング

28.  Directory Proxy Serverの監視とアラート

第3部 Directory Service Control Centerの管理

29.  Directory Service Control Centerの構成

索引

ACIの作成、表示および変更

ACIを作成するには、Directory Service Control Center(DSCC)を使用するか、コマンドラインを使用します。どちらの方法を選択するにしても、一般的には最初から新しいACIを作成するより、既存のACI値を表示してコピーしたほうが簡単です。

DSCCではaci属性値を表示および変更できます。DSCCを介したACIの変更方法は、DSCCのオンライン・ヘルプを参照してください。

ACIを作成、変更および削除するには:

コマンドラインを使用してACIを作成するには、まずファイルの中でLDIF文を使用してACIを作成します。その後、ldapmodifyコマンドを使用して、ACIをディレクトリ・ツリーに追加します。

このタスクの実行には、DSCCが使用できます。詳細は、「Directory Service Control Centerのインタフェース」およびDSCCのオンライン・ヘルプを参照してください。

  1. LDIFファイルにACIを作成します。
    dn: dc=example,dc=com
    changetype: modify
    add: aci
    aci: (target)(version 3.0; acl "name";permission bindrules;)

    次の例は、ACIの追加方法を示します。ACIを変更または削除するには、addreplaceまたはdeleteに置き換えます。

    一般的に使用されるACIの例は、「アクセス制御の使用例」を参照してください。

  2. LDIFファイルを使用して変更を行います。
    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w - -f ldif-file

ACI属性値を表示するには:

ACIは、エントリのaci属性の1つ以上の値として保存されます。aci属性は、ディレクトリ・ユーザーが読取りおよび変更できる複数値操作属性です。そのため、ACI属性自身がACIで保護される必要があります。通常、管理ユーザーには、aci属性への完全アクセス権が付与されます。

このタスクの実行には、DSCCが使用できます。詳細は、「Directory Service Control Centerのインタフェース」およびDSCCのオンライン・ヘルプを参照してください。

ルート・レベルでACIを表示するには:

接尾辞を作成すると、最上位(ルート)レベルでいくつかのデフォルトACIが作成されます。これらのACIにより、デフォルト管理ユーザーcn=admin,cn=Administrators,cn=configは、ディレクトリ・マネージャと同じディレクトリ・データへのアクセス権を持つことができます。

このタスクの実行には、DSCCが使用できます。詳細は、「Directory Service Control Centerのインタフェース」およびDSCCのオンライン・ヘルプを参照してください。

ACI構文

aci属性には、次の構文があります。

aci: [list of (target)](version 3.0; acl "name";[list of "permission bindRules;"])

ACI構文では次の値が使用されます。

target

アクセス制御するエントリ、属性、またはエントリと属性のセットを指定します。targetには、識別名、1つ以上の属性、または単一のLDAPフィルタを指定できます。targetはオプションです。targetが指定されない場合、ACIは定義されているエントリとそのサブツリーに適用されます。ターゲットの詳細は、「ACIターゲット」を参照してください。

version 3.0

ACIバージョンを識別する必須の文字列。

name

ACIを識別する必須の文字列。名前に制約はありませんが、ACIには一意でわかりやすい名前を使用することをお薦めします。一意の名前を使用すると、実効権限取得によって適用するACIを決定できます。

permission

許可または拒否する権限を指定します。権限の詳細は、「ACI権限」を参照してください。

bindRules

ユーザーがアクセス権を付与されるために提供する必要がある資格証明およびバインド・パラメータを指定します。バインド・ルールは、ユーザー・メンバーシップ、グループ・メンバーシップ、またはクライアントの接続プロパティに基づいて指定することもできます。バインド・ルールの詳細は、「ACIバインド・ルール」を参照してください。

ACIの権限とバインド・ルールの部分は、ペアで設定されます。これは、アクセス制御ルール(ACR)とも呼ばれています。ターゲットにアクセスするために指定される権限は、付随するバインド・ルールがtrueかfalseかによって、付与されるか拒否されるかが決定されます。

複数のターゲットおよび、複数の権限とバインド・ルールのペアを使用できます。これにより、ターゲットとなるエントリおよび属性の両方を詳細に指定し、特定のターゲットに対して複数のアクセス制御を効率的に設定できます。次の例は、複数のターゲットおよび、複数の権限とバインド・ルールのペアを持つACIを示します。

aci: (targetdefinition)...(targetdefinition)(version 3.0;acl "name"; 
permission bindRule; ...; permission bindRule;)

次の例で、ACIは、bjensenが自身のディレクトリ・エントリ内のすべての属性を変更する権限を持つことを指定しています。

aci: (target="ldap:///uid=bjensen,dc=example,dc=com")
  (targetattr="*")(targetscope="subtree")(version 3.0; acl "example";
   allow (write) userdn="ldap:///self";)

次の各項では、ターゲット、権限およびバインド・ルールの構文について説明します。

ACIターゲット

ACIターゲット文では、アクセス制御するエントリ、属性、またはエントリと属性のセットを指定します。

ターゲット構文

ACIターゲット文には、次のような構文があります。

(keyword = "expression")

ターゲットでは、次の値が使用されます。

keyword

ターゲットのタイプを示します。

expression

ターゲットを識別します。構文上、expressionの前後には引用符("")が必要です。ただし、現在の実装では、targetattr=*のような表現も受け入れています。

=
!=

ターゲットが、expressionで指定されたオブジェクトであるか、そうでないかを示します。

!=演算子は、targettrfiltersキーワードまたはtargetscopeキーワードでは使用できません。

ターゲット・キーワード

ターゲット・キーワードの詳細は、次の項を参照してください。

次の表は、ターゲット・キーワードとそれに関連する式を示します。

表6-1 ターゲット・キーワードとその式

キーワード
ターゲットのタイプ
target
ディレクトリ・エントリまたはそのサブツリー
ldap:///distinguished_name
targetattr
エントリの属性
attribute
targetfilter
LDAPフィルタとマッチングするエントリまたは属性のセット
LDAP_filter
targattrfilters
LDAPフィルタとマッチングする属性値または値の組合せ
LDAP_operation:LDAP_filter
targetscope
ターゲットの範囲
baseonelevelsubtree
targetキーワード

targetキーワードは、ディレクトリ・エントリに対してACIが定義されることを指定します。targetキーワードでは、次の構文を使用します。

(target = "distinguished_name")

または

(target != "distinguished_name")

識別名は、ACIが定義されるエントリをルートとするサブツリー内に存在する必要があります。たとえば、ou=People,dc=example,dc=com上のACIでは、次のようなターゲットを使用できます。

(target = "ldap:///uid=bjensen,ou=People,dc=example,dc=com")

エントリのDNは、文字列表現の識別名とする必要があります(RFC 4514)。そのため、カンマなど、DNの文法的な意味を持つ文字は、単一の円記号(\)でエスケープする必要があります。

targetキーワードの式では、アスタリスク文字で表されるワイルドカードを使用できます。アスタリスクは、属性値、値のサブストリングまたはDNコンポーネントと一致します。たとえば、次の式はすべてuid=bjensen,ou=people,dc=example,dc=comと一致します。

また、次の例のようにワイルドカードを使用することもできます。

また、target="ldap:///uid=bjensen,o*,dc=com"のようにワイルドカードを使用しても受け入れられますが、非推奨です。

targetattrキーワード

targetattrキーワードは、ターゲット・エントリの1つ以上の属性に対してACIが定義されることを示します。targetattrキーワードでは、次の構文を使用します。

(targetattr = "attribute")

または

(targetattr != "attribute")

targetattrキーワードがない場合、属性はターゲットになりません。すべての属性をターゲットにするには、targetattrキーワードをtargetattr="*"と指定する必要があります。

ターゲット属性は、ターゲット・エントリまたはそのサブツリー内に存在する必要はありませんが、存在すればACIが適用されます。

ターゲット属性は、スキーマで定義されている必要はありません。スキーマ・チェックを行わないことにより、データとそのスキーマをインポートする前にアクセス制御ポリシーを実装できます。

次の構文を使用して、複数の属性を対象にtargetattrキーワードを使用できます。

(targetattr = "attribute1 || attribute2|| ... attributeN")

注意: 属性別名を構成する場合、属性名targetattrキーワードの別名の両方を指定して、ACIでそれらを認識させる必要があります。


ターゲット属性には、指定された属性のすべてのサブタイプが含まれます。たとえば、(targetattr = "locality")locality;lang-frもターゲットになります。

targetattrキーワードの式でワイルドカードを使用できますが、意味はなく、パフォーマンスが低下するのみです。

targetfilterキーワード

targetfilterキーワードは、LDAPフィルタと一致するエントリをターゲットとするACIで使用されます。このACIは、LDAPフィルタと一致し、かつACIの範囲内にあるすべてのエントリに適用されます。targetfilterキーワードでは、次の構文を使用します。

(targetfilter = "(standard LDAP search filter)")

例6-1 特定のエントリをターゲットとするtargetfilterキーワードの使用方法

次の例は、有給者または契約者のステータスを持つ従業員と勤務時間(正社員に対する割合)の属性を示します。このフィルタは、契約者あるいはパートタイム従業員のエントリをターゲットにしています。

(targetfilter = "(|(status=contractor)(fulltime<=79))")

ACIでは、Netscapeが拡張したフィルタ構文はサポートされません。たとえば、次のターゲット・フィルタは有効ではありません。

(targetfilter = "(locality:fr:=<= Québec)")

国際化された値に関するマッチング・ルールを記述するフィルタ構文はサポートされます。たとえば、次のターゲット・フィルタは有効です。

(targetfilter = "(locality:2.16.840.1.113730.3.3.2.18.1.4:=Québec)")

targetfilterキーワードは、ACIのターゲットとしてすべてのエントリを選択します。targetfilterキーワードとtargetattrキーワードを一緒に使用して、ターゲット・エントリの属性のサブセットに適用するACIを作成できます。

targattrfiltersキーワード

targattrfiltersキーワードは、LDAPフィルタを使用することで特定の属性値をターゲットとするACIで使用されます。targattrfiltersキーワードを使用することで、属性値がACIで定義された条件を満たすときに属性に対する権限を許可または拒否できます。属性の値に基づいてアセス権を付与または拒否するACIは、値ベースACIと呼ばれています。targattrfiltersキーワードでは、次の構文を使用します。

(targattrfilters="add=attr1:F1 && attr2:F2... && attrn:Fn, \
 del=attr1:F1 && attr2:F2 ... && attrn:Fn")

それぞれの意味は次のとおりです。

add

属性を作成する操作を示します。

del

属性を削除する操作を示します。

attrn

ターゲット属性を示します。

Fn

関連付けられた属性のみに適用するフィルタを示します。

フィルタをエントリに適用して、それらのエントリを作成、削除または変更する場合に、次の条件を満たす必要があります。

例6-2 targattrfiltersキーワードを使用して、ユーザーに対し自身のエントリへのロールの追加を許可する

次のACIを使用すると、ユーザーはsuperAdminロール以外の任意のロールを自身のエントリに追加できます。またこれにより、ユーザーは123という接頭辞を持つ電話番号を追加できます。

(targattrfilters="add=nsroleDN:(!(nsRoleDN=cn=superAdmin)) \
 && telephoneNumber:(telephoneNumber=123*)")
targetscopeキーワード

targetscopeキーワードは、ACIの範囲を指定するACIで使用されます。targetscopeキーワードでは、次の構文を使用します。

(targetscope="base")

targetscopeキーワードは、次のいずれかの値を持ちます。

base

ACIは、ターゲット・リソースのみに適用されます。

onelevel

ACIは、ターゲット・リソースとその第1世代の子に適用されます。

subtree

ACIは、ターゲット・リソースとそのサブツリーに適用されます。

targetscopeキーワードが指定されない場合、デフォルト値はsubtreeになります。

ACI権限

権限は、ACIで許可または拒否されるアクセスのタイプを指定します。バインド・ルールの詳細は、次の項を参照してください。

権限構文

ACI権限文には、次のような構文があります。

allow|deny (right1, right2 ...)

rightは、ディレクトリ・データに実行できる操作を定義します。ACI文のrightは、カッコで括られたカンマ区切りのキーワードのリストです。

rightは、互いに独立して付与されます。たとえば、add権限を持つがdelete権限を持たないユーザーは、エントリの作成はできますが削除はできません。ディレクトリに対するアクセス制御ポリシーを計画している場合、ユーザーに対して合理的に権利を付与するようにします。たとえば、readおよびsearch権限を付与せずにwrite権限を付与しても、合理的ではありません。

権限の割当て

ACI権限文では、次の権限を許可または拒否できます。

Read

ディレクトリ・データを読み取る権限。この権限は、検索操作のみに適用されます。

Write

属性を追加、変更または削除することでエントリを変更する権限。この権限は変更およびDN変更操作に適用されます。

Add

エントリを作成する権限。この権限は、追加操作のみに適用されます。

Delete

エントリを削除する権限。この権限は、削除操作のみに適用されます。

Search

ディレクトリ・データを検索する権限。ユーザーが検索結果の一部として返されたデータを参照するためには、SearchおよびRead権限が必要です。この権限は、検索操作のみに適用されます。

Compare

ディレクトリに格納されているデータとユーザーが入力したデータを比較する権限。比較権限を使用すると、ディレクトリが問合せの応答として成功または失敗のメッセージを返しますが、ユーザーはエントリまたは属性の値を参照できません。この権限は、比較操作のみに適用されます。

Selfwrite

ユーザーがターゲット・エントリの属性内で自身のDNを追加または削除する権限。この属性の構文は、distinguished nameである必要があります。この権限は、グループ管理でのみ使用されます。Selfwrite権限は、プロキシ認可で機能します。これは、(バインドされたユーザーのDNではなく)グループ・エントリからプロキシDNを追加または削除する権限を付与します。

Proxy

指定されたDNが別のエントリの権限でターゲットにアクセスする権限。ディレクトリ・マネージャDNを除くディレクトリ内の任意のユーザーのDNを使用して、プロキシ・アクセス権を付与できます。ディレクトリ・マネージャにはプロキシ権限を付与できません。

Import

エントリを指定されたDNにインポートする権限。この権限は、DN変更操作に適用されます。

Export

エントリを指定されたDNからエクスポートする権限。この権限は、DN変更操作に適用されます。

All

指定されたDNがターゲット・エントリに対して、readwritesearchdeletecompareおよびselfwriteの権限を持つ権限。Allアクセス権は、ターゲット・エントリに対するproxyimportおよびexportの権限については制御しません。

一般的なLDAP操作の権限

この項では、一連のLDAP操作の実行に必要な権限について説明します。

エントリの追加:
  • 追加されるエントリに対する追加権限を付与します。

  • エントリの各属性値に対する書込み権限を付与します。この権限はデフォルトで付与されますが、targettrfiltersキーワードを使用して制限することもできます。

エントリの削除:
  • 削除されるエントリに対する削除権限を付与します。

  • エントリの各属性値に対する書込み権限を付与します。この権限はデフォルトで付与されますが、targettrfiltersキーワードを使用して制限することもできます。

エントリ内の属性の変更:
  • 属性タイプに対する書込み権限を付与します。

  • 各属性タイプの値に対する書込み権限を付与します。この権限はデフォルトで付与されますが、targettrfiltersキーワードを使用して制限することもできます。

エントリのRDNの変更:
  • エントリに対する書込み権限を付与します。

  • 新しいRDNで使用される属性タイプに対する書込み権限を付与します。

  • 古いRDNを削除する権限を付与する場合、古いRDNで使用される属性タイプに対する書込み権限を付与します。

  • 新しいRDNで使用される属性タイプの値に対する書込み権限を付与します。この権限はデフォルトで付与されますが、targettrfiltersキーワードを使用して制限することもできます。

別のサブツリーへのエントリの移動:
  • 移動するエントリに対するエクスポート権限を付与します。

  • 移動するエントリの新しい上位エントリに対するインポート権限を付与します。

属性の値の比較:

属性タイプに対する比較権限を付与します。

エントリの検索:
  • 検索フィルタで使用される各属性タイプに対する検索権限を付与します。

  • エントリが確実に返されるようにエントリで使用される最低1つの属性タイプに対する読取り権限を付与します。

  • エントリで返される各属性タイプに対する読取り権限を付与します。

例6-3 検索を実行するためのACI権限の付与

次のACIは、自身のエントリを検索するためのアクセス権をbjensenに付与できるかどうかを決定します。

aci: (targetattr = "mail")(version 3.0; acl "self access to 
 mail"; allow (read, search) userdn = "ldap:///self";)

このACIではbjensenobjectclass属性で検索する権限を許可していないため、検索結果リストは空になります。記述された検索操作を実行するには、ACIを次のように変更する必要があります。

aci: (targetattr = "mail || objectclass")(version 3.0; acl 
 "self access to mail"; allow (read, search) userdn = 
 "ldap:///self";)

ACIバインド・ルール

バインド・ルールにより、ACIが適用されるユーザーのセットを特定します。ACIの権限とバインド・ルールの部分は、ペアで設定されます。ターゲットにアクセスするために指定される権限は、付随するバインド・ルールがtrueかfalseかによって、付与されるか拒否されるかが決定されます。

バインド・ルールの詳細は、次の項を参照してください。

バインド・ルールの概要

バインド・ルールでは、次の方法を使用してユーザーのセットを特定します。

単純なバインド・ルールでは、ディレクトリにアクセスするユーザーが特定のグループに属している昼用があります。複雑なバインド・ルールでは、ユーザーが特定のグループに属し、特定のIPアドレスのマシンから午前8時~午後5時にログインする必要があります。またバインド・ルールは、ブール演算子を使用して、これらの条件を組み合せた複雑な構造にできます。

サーバーは、3値ロジックに従って、ACIで使用される論理式を評価します。これは、RFC 4511 『Lightweight Directory Access Protocol (v3)』の第4.5.1.7項で説明されているLDAPフィルタの評価に使用されるものと類似しています。そのため、式の中の任意のコンポーネントが未定義と評価されると(たとえば、リソースの制限により、式の評価が中断された場合など)、サーバーはこの状況を正しく処理します。複雑なブール式で未定義の値が発生することでサーバーが誤ってアクセス権を付与することはありません。

バインド・ルール構文

ACIバインド・ルールには、次のような構文があります。

keyword = "expression";

または

keyword != "expression";

バインド・ルールでは次の値が使用されます。

keyword

バインド・ルールのタイプを示します。

expression

バインド・ルールを特定します。

バインド・ルールのキーワード

バインド・ルールのキーワードの詳細は、次の項を参照してください。

次の表に、バインド・ルールのキーワードの概要を示します。

表6-2 バインド・ルールのキーワードとその式

キーワード
アクセス権を定義するベース
userdn
指定されたユーザー
ldap:///distinguished_name
ldap:///all
ldap:///anyone
ldap:///self
ldap:///parent
ldap:///suffix??sub?(filter)
groupdn
指定されたグループ
[ldap:///DN]
roledn
指定されたロール
[ldap:///DN]
userattr
一致した属性値
attribute#bindType
または
attribute#value
ip
指定されたIPアドレス
IP_address
dns
指定されたドメイン
DNS_host_name
timeofday
指定された時刻
0 - 2359
dayofweek
指定された曜日
sunmontuewedthufrisat
authmethod
指定された認証方式
nonesimplesslsasl authentication_method
userdnキーワード

userdnキーワードを使用して、指定されたユーザーに対してアクセスを許可または拒否します。次の各項では、userdnキーワードに関する詳細な情報について説明します。

userdnキーワードの構文

userdnキーワードでは、次の構文を使用します。

userdn = "ldap:///dn [|| ldap:///dn]..."
userdn != "ldap:///dn [|| ldap:///dn]..."

また、userdnキーワードはLDAP URLフィルタとして表すこともできます。userdnキーワードをLDAP URLとして表す方法については、userdnキーワード内のLDAP URL」を参照してください。

dnは、次の値を指定できます。

distinguished-name

完全修飾されたDN。カンマなどのDNの文法的な意味を持つ文字は、単一の円記号(\)でエスケープする必要があります。ワイルドカード*は、ユーザーのセットの指定に使用できます。たとえば、次のユーザーDNが指定されている場合、文字bから始まるバインドDNを持つユーザーに対してアクセスが許可または拒否されます。

uid=b*,dc=example,dc=com
anyone

バインドの環境にかかわらず、匿名ユーザーおよび認証されたユーザーに対してアクセスを許可または拒否します。

このアクセスは、特定のアクセスのタイプ(たとえば、読取り用のアクセスや検索用のアクセスなど)に制限することも、ディレクトリ内の特定のサブツリーや個々のエントリに制限することもできます。dc=example,dc=comノード上の次のACIでは、匿名ユーザーにdc=example,dc=comツリー全体の読取りおよび検索を行うアクセスを許可しています。

aci: (version 3.0; acl "anonymous-read-search"; 
 allow (read, search) userdn = "ldap:///anyone";)
all

認証されたユーザーに対してアクセスを許可または拒否します。このallの値は、匿名のアクセスは除かれます。dc=example,dc=comノード上の次のACIでは、認証されたユーザーにdc=example,dc=comツリー全体の読取りを許可しています。

aci: (version 3.0; acl "all-read"; 
 allow (read) userdn="ldap:///all";)
self

バインドDNがターゲット・エントリのDNと一致した場合に、ユーザーに対して、そのユーザー自身のエントリへのアクセスを許可または拒否します。dc=example,dc=comノード上の次のACIでは、dc=example,dc=comツリー内の認証されたユーザーに対して、自身のuserPassword属性への書込みを許可しています。

aci: (targetattr = "userPassword") 
 (version 3.0; acl "modify own password"; allow (write) 
 userdn = "ldap:///self";)
parent

バインドDNがターゲット・エントリの親である場合に、そのエントリへのユーザー・アクセスを許可または拒否します。

dc=example,dc=comノード上の次のACIでは、dc=example,dc=comツリー内の認証されたユーザーに対して、そのバインドDNの任意の子エントリの変更を許可します。

aci: (version 3.0; acl "parent access"; 
 allow (write) userdn="ldap:///parent";)
userdnキーワード内のLDAP URL

また、userdnキーワードは、次の構文を使用して、フィルタ付きのLDAP URLとして表すこともできます。

userdn = ldap:///suffix??sub?(filter)

LDAP URLは、常にローカル・サーバーに適用されます。LDAP URL内でホスト名またはポート番号を指定しないでください。

dc=example,dc=comノード上の次のACIでは、example.comツリーのaccountingおよびengineeringブランチ内のすべてのユーザーに対して、次のURLに基づいて動的にターゲット・リソースへのアクセスを許可しています。

userdn = "ldap:///dc=example,dc=com??sub?(|(ou=eng)(ou=acct))"

LDAP URLは、次の例に示すように、論理OR演算子および不等演算子を使用できます。

例6-4 userdnキーワードでLDAP URLに論理OR演算子を使用する

このバインド・ルールは、指定されたDNパターンのいずれかでバインドされたユーザーに対して、trueと評価されます。

userdn = "ldap:///uid=b*,c=example.com || ldap:///cn=b*,dc=example,dc=com";

例6-5 userdnキーワードでLDAP URLに不等演算子を使用する

クライアントがaccountingサブツリー内UIDベースのDNとしてバインドしていない場合、このバインド・ルールはtrueと評価されます。このバインド・ルールは、ターゲット・エントリがディレクトリ・ツリーのaccountingブランチの下にない場合にのみ、意味を持ちます。

userdn != "ldap:///uid=*,ou=Accounting,dc=example,dc=com";
groupdnキーワード

groupdnキーワードは、ユーザーが特定のグループに属するDNを使用してバインドをする場合、ターゲット・エントリへのアクセスを許可するか拒否するかを指定します。groupdnキーワードでは、次の構文を使用します。

groupdn="ldap:///groupDN [|| ldap:///groupDN]..."

バインドDNがgroupDNのいずれかの値で指定されたグループに属する場合、バインド・ルールはtrueと評価されます。

次の例では、バインドDNがAdministratorsグループに属する場合、バインド・ルールはtrueと評価されます。

aci: (version 3.0; acl "Administrators-write"; allow (write)
 groupdn="ldap:///cn=Administrators,dc=example,dc=com";)

カンマなどのDNの文法的な意味を持つ文字は、単一の円記号(\)でエスケープする必要があります。

rolednキーワード

rolednキーワードは、ユーザーが特定のロールに属するDNを使用してバインドする場合、ターゲット・エントリへのアクセスを許可するか拒否するかを指定します。rolednキーワードでは、1つ以上の有効な識別名を次の形式で指定する必要があります。

roledn = "ldap:///dn [|| ldap:///dn]... [|| ldap:///dn]"

バインドDNが指定されたロールに属する場合、バインド・ルールはtrueと評価されます。

カンマなどのDNの文法的な意味を持つ文字は、単一の円記号(\)でエスケープする必要があります。

rolednキーワードはgroupdnキーワードと同じ構文を持ち、使用方法も同様です。

userattrキーワード

userattrキーワードは、バインドに使用されていたエントリ内の属性値がターゲット・エントリのものと一致する必要があることを指定します。userattrキーワードは、次の属性に使用できます。

サービス・クラス(CoS)定義で生成された属性は、userattrキーワードでは使用できません。CoSで生成された属性値に依存するバインド・ルールを含むACIは、機能しません。

userattrキーワードでは、次の構文を使用します。

userattr = "attrName#bindType"

また、ユーザーDN、グループDN、ロールDNまたはLDAPフィルタ以外の値が必要な属性タイプを使用する場合、userattrキーワードでは次の構文を使用します。

userattr = "attrName#attrValue"

userattrキーワードは、次のいずれかの値を持つことができます。

attrName

値のマッチングに使用される属性の名前

bindType

USERDN、GROUPDN、ROLEDN、LDAPURLのいずれかのバインドのタイプ

attrValue

属性値を表す任意の文字列

userattrキーワードと各種バインド・タイプの例

例6-6 userattrキーワードとUSERDNバインド・タイプの使用方法

次に、ユーザーDNに基づいてバインドと関連付けられるuserattrキーワードの例を示します。

userattr = "manager#USERDN"

バインドDNがターゲット・エントリのmanager属性の値と一致する場合、バインド・ルールはtrueと評価されます。これを使用して、ユーザーのマネージャに対して従業員の属性の変更を許可できます。このメカニズムは、ターゲット・エントリのmanager属性が完全DNで表されている場合にのみ機能します。

次の例では、マネージャに対して部下のエントリへの完全なアクセス権を与えます。

aci: (target="ldap:///dc=example,dc=com")(targetattr="*")
 (version 3.0;acl "manager-write";
 allow (all) userattr = "manager#USERDN";)

例6-7 userattrキーワードとGROUPDNバインド・タイプの使用方法

次に、グループDNに基づいてバインドと関連付けられるuserattrキーワードの例を示します。

userattr = "owner#GROUPDN"

バインドDNがターゲット・エントリのowner属性で指定されたグループのメンバーである場合、バインド・ルールはtrueと評価されます。たとえば、このメカニズムを使用して、あるグループに対して従業員のステータス情報の管理を許可できます。使用する属性にグループ・エントリのDNが含まれていれば、owner以外の属性を使用できます。

指定するグループは動的なグループにでき、グループのDNはディレクトリ内の任意の接尾辞の下にできます。ただし、サーバーによるこのタイプのACIの評価では、大量のリソースが消費されます。

ターゲット・エントリと同じ接尾辞の下の静的グループを使用する場合、次の式を使用できます。

userattr = "ldap:///dc=example,dc=com?owner#GROUPDN"

この例では、グループ・エントリはdc=example,dc=com接尾辞の下になります。サーバーは、この構文のタイプの方が前の例のものより高速に処理できます。

例6-8 userattrキーワードとROLEDNバインド・タイプの使用方法

次に、ロールDNに基づいてバインドと関連付けられるuserattrキーワードの例を示します。

userattr = "exampleEmployeeReportsTo#ROLEDN"

バインドDNがターゲット・エントリのexampleEmployeeReportsTo属性で指定されたロールに属する場合、バインド・ルールはtrueと評価されます。たとえば、会社のすべてのメンバーに対してネストされたロールを作成する場合、このメカニズムを使用して、すべてのレベルのマネージャに対して部下に関する情報へのアクセスを許可できます。

ロールのDNは、ディレクトリ内の任意の接尾辞の下にできます。また、フィルタ処理されたロールを使用する場合、このタイプのACIの評価には、サーバー上のリソースを大量に使用します。

例6-9 userattrキーワードとLDAPURLバインド・タイプの使用方法

次に、LDAPフィルタに基づいてバインドと関連付けられるuserattrキーワードの例を示します。

userattr = "myfilter#LDAPURL"

バインドDNがターゲット・エントリのmyfilter属性で指定されたフィルタと一致する場合、バインド・ルールはtrueと評価されます。myfilter属性は、LDAPフィルタを含む任意の属性で置き換えられます。

例6-10 userattrキーワードと任意の属性値の使用方法

次に、任意の属性値に基づいてバインドと関連付けられるuserattrキーワードの例を示します。

userattr = "favoriteDrink#Milk"

バインドDNとターゲットDNにMilkの値のfavoriteDrink属性が含まれる場合、バインド・ルールはtrueと評価されます。

継承時のuserattrキーワードとparentキーワードの使用

userattrキーワードとparentキーワードを一緒に使用して、ACIを継承するターゲットの下のレベル数を指定できます。userattrキーワードとparentキーワードは、次の構文を使用します。

userattr = "parent[inheritance_level].attribute#bindType"

userattrキーワードとparentキーワードは、次の値を持つことができます。

inheritance_level

ターゲットの下のレベル数を示すカンマ区切りリストは、ACIを継承する必要があります。このターゲット・エントリの下のレベルは、[0,1,2,3,4]のように指定できます。0は、ターゲット・エントリを示します。

attribute

userattrまたはgroupattrキーワードのターゲットとなる属性

bindType

バインドのタイプは、USERDNまたはGROUPDNを指定できます。LDAPURLおよびROLEDNバインドでは、継承を使用できません。

次の例は、継承にuserattrキーワードでparentキーワードを使用する方法を示します。

userattr = "parent[0,1].manager#USERDN"

bindDNがターゲット・エントリのmanager属性と一致する場合、このバインド・ルールはtrueと評価されます。バインド・ルールがtrueと評価されたときに付与される権限は、ターゲット・エントリその直下のすべてのエントリに適用されます。

userattrキーワードを使用した追加権限の付与

userattrキーワードをallまたはadd権限と組み合せて使用すると、サーバーの動作が想定どおりにならない場合があります。通常、新しいエントリがディレクトリに作成されると、Directory Serverは作成されるエントリのアクセス権を評価し、親エントリのアクセス権は評価しません。ただし、userattrキーワードを使用するACIの場合は、この動作によってセキュリティ・ホールが生じる可能性があるので、これを避けるためにサーバーの通常動作は変更されます。

次に例を示します。

aci: (target="ldap:///dc=example,dc=com")(targetattr="*")
 (version 3.0; acl "manager-write"; allow (all)
 userattr = "manager#USERDN";)

このACIは、部下のエントリに対するすべての権限をマネージャに与えます。ただし、新しく作成されるエントリについてアクセス権が評価されるので、このタイプのACIでは、すべての社員に対して、manager属性が自身のDNに設定されるエントリの作成を許可します。たとえば、会社に不満を抱くJoeという社員(cn=Joe,ou=eng,dc=example,dc=com)は、ツリーのHuman Resourcesブランチにエントリを作成して、Human Resourcesの社員に付与された権限を使用(悪用)できます。

これは、次のエントリを作成することで可能です。

dn: cn= Trojan Horse,ou=Human Resources,dc=example,dc=com
objectclass: top
...
cn: Trojan Horse
manager: cn=Joe,ou=eng,dc=example,dc=com

このようなセキュリティ上の危険を回避するために、ACIの評価プロセスでは、レベル0の追加権限、つまりエントリ自身に対する追加権限を付与しません。ただし、既存エントリの下位にあるエントリには、parentキーワードを使用して追加アクセス権を付与できます。親のいくつ下のレベルまで追加アクセス権を許可するかを指定する必要があります。たとえば次のACIでは、バインドDNと一致するmanager属性を持つ、dc=example,dc=com内の任意のエントリに子エントリを追加できます。

aci: (target="ldap:///dc=example,dc=com")(targetattr="*")
 (version 3.0; acl "parent-access"; allow (add)
 userattr = "parent[0,1].manager#USERDN";)

このACIでは、バインドDNが親エントリのmanager属性と一致しているユーザーのみに追加権限が付与されます。

ipキーワード

ipキーワードを使用して、特定のIPアドレスからバインド操作するように指定します。ipキーワードでは、次の構文を使用します。

ip = "IPaddressList" or ip != "IPaddressList"

IPaddressList値は、次のうち1つ以上のカンマ区切り要素のリストです。

ディレクトリにアクセスするクライアントが指定されたIPアドレスに位置している場合、バインド・ルールはtrueと評価されます。

ipキーワードを使用して、特定のマシンまたはネットワーク・ドメインから強制的にすべてのディレクトリの更新を実行できます。ただし、ユーザーが認証するIPアドレスはスプーフィングされる可能性があるため、信頼できません。ACIでは、これらの情報のみに依存にしないでください。

ワイルドカード*を使用して、IPアドレスのセットを指定できます。

ワイルドカード*は、IPv6アドレスには使用できません。

dnsキーワード

注意: dnsキーワードを使用する場合、マシンで使用されるネーミング・サービスはDNSである必要があります。ネーミング・サービスがDNSでない場合、かわりにipキーワードを使用する必要があります。


dnsキーワードを使用して、特定のドメインまたはホスト・マシンからバインド操作するように指定します。dnsキーワードでは、次の構文を使用します。

dns = "DNS_Hostname" or dns != "DNS_Hostname"

dnsキーワードには、完全修飾DNSドメイン名が必要です。ドメインを指定せずにホストへのアクセスを許可すると、セキュリティの脅威がもたらされる可能性があります。たとえば、次の式は使用できますが、お薦めできません。

dns = "legend.eng";

次のような完全修飾名を使用する必要があります。

dns = "legend.eng.example.com";

dnsキーワードでは、ワイルドカードを使用できます。

dns = "*.example.com";

ディレクトリにアクセスするクライアントが指定されたドメインに位置している場合、バインド・ルールはtrueと評価されます。これは、特定のドメインからのアクセスのみを許可する場合に役立ちます。システムでDNS以外のネーミング・サービスを使用している場合、ワイルドカードは機能しません。

timeofdayキーワード

timeofdayキーワードを使用して、特定の時間にアクセスできることを指定します。timeofdayおよびdayofweekバインド・ルールの評価には、サーバー上の日付と時刻が使用されます(クライアント上の日時ではありません)。timeofdayキーワードでは、次の構文を使用します。

timeofday operator "time"

timeofdayキーワードは、次のいずれかの値を持つことができます。

operator
  • 等しい(=)

  • 等しくない(!=)

  • 以上(>=)

  • より小さい(<)

  • 以下(<=)

time

24時間法で時と分を表す4桁の数字(02359)

  • timeofday = "1200";は、システム時刻が正午を示す1分間にクライアントがディレクトリにアクセスする場合、trueになります。

  • timeofday != "0100";は、午前1時以外の任意の時刻のアクセスに対して、trueになります。

  • timeofday > "0800";は、午前8:01~午後11:59のアクセスに対して、trueになります。

  • timeofday >= "0800";は、午前8:00~午後11:59のアクセスに対して、trueになります。

  • timeofday < "1800";は、夜12:00~午後5:59のアクセスに対して、trueになります。

dayofweekキーワード

dayofweekキーワードを使用して、特定の曜日にアクセスできることを示します。timeofdayおよびdayofweekバインド・ルールの評価には、サーバー上の日付と時刻が使用されます(クライアント上の日時ではありません)。dayofweekキーワードでは、次の構文を使用します。

dayofweek = "day1, day2 ..."

リストされているいずれかの曜日にディレクトリにアクセスする場合、バインド・ルールはtrueになります。

dayofweekキーワードは、sunmontuewedthufrisatのうち1つ以上の値を持つことができます。

authmethodキーワード

authmethodキーワードを使用して、クライアントが特定の認証方式を使用してディレクトリにバインドする必要があることを指定します。authmethodキーワードでは、次の構文を使用します。

authmethod = "authentication_method"

authmethodキーワードは、次の値を持つことができます。

None

バインド・ルールの評価時に、認証はチェックされません。これはデフォルト設定です。

Simple

クライアントがユーザー名とパスワードを使用してディレクトリにアクセスする場合、このバインド・ルールはtrueと評価されます。

SSL

クライアントは、Secure Sockets Layer(SSL)またはTransport Layer Security(TLS)接続でディレクトリにバインドする必要があります。

クライアントがLDAPSで証明書を使用してディレクトリに対して認証する場合、バインド・ルールはtrueと評価されます。クライアントがLDAPSで簡易認証(バインドDNとパスワード)を使用して認証する場合、trueにはなりません。

SASL sasl_mechanism

クライアントがDIGEST-MD5GSSAPIまたはEXTERNALのいずれかのSASLメカニズムを使用してディレクトリに対して認証する場合、バインド・ルールはtrueと評価されます。

ブール・バインド・ルール

バインド・ルールは、ブール式ANDORおよびNOTを使用する複合式とし、細かいアクセス・ルールを設定できます。ブール・バインド・ルールでは、次の構文を使用します。

(bindRuleA and (bindRuleB or (bindRuleC and bindRuleD));)

カッコにより、ルールを評価する順序を定義します。最後のルールの後にセミコロンを付ける必要があります。

例6-11 ブール・バインド・ルール

次の2つの条件が満たされる場合、バインド・ルールはtrueになります。

(dns = "*.example.com"
  and (groupdn = "ldap:///cn=administrators, dc=example,dc=com"
  or (groupdn = "ldap:///cn=mail administrators, dc=example,dc=com"
  and groupdn = "ldap:///cn=calendar administrators, dc=example,dc=com"));)

dsutilコマンドを使用して通常ユーザーにユーザー・アカウントを管理させるには: