第8章 エントリーの編成とグループ化

ディレクトリーに含まれるエントリーは、ユーザーアカウントの管理を簡素化するために、さまざまな方法でグループ化できます。Red Hat Directory Server は、エントリーのグループ化やエントリー間で属性を共有するさまざまな方法に対応します。ロールおよびサービスのクラスによって提供される機能を完全に活用するには、ディレクトリーのデプロイメントを計画するときにディレクトリートポロジーを決定します。

8.1. グループの使用

オペレーティングシステムと同様に、Directory Server のグループにユーザーを追加できます。グループはロールとして他の方法で機能します。ロールを使用している場合には、割り当てられたロールの DN はユーザーオブジェクトの nsRoleDN 属性に保存されます。グループを使用する場合は、このグループのメンバーであるユーザーの DN は、グループオブジェクトの member 属性に保存されます。memberOf プラグインを有効にした場合、次にユーザーがメンバーであるグループは、ユーザーオブジェクトの memberOf 属性に追加で保存されます。このプラグインを有効にすると、グループにもロールの利点があり、ロールの使用時と同様にユーザーのグループメンバーシップを一覧表示できます。また、グループはロールよりも高速です。
memberOf プラグインの使用方法は、「ユーザーエントリーにおけるグループメンバーシップの一覧表示」を参照してください。

8.1.1. 各種グループ

コマンドラインから静的グループと動的グループの両方を作成するプロセスは、同様のプロセスです。グループエントリーには、グループ名、グループの種類、およびメンバー属性が含まれます。
グループタイプにはいくつかのオプションがあります。詳細は、Red Hat Directory Server 10 Configuration, Command, and File Referenceを参照してください。この場合の グループのタイプ は、所有するメンバー属性を定義するタイプを指します。
  • groupOfNames (推奨) は、任意のエントリーの追加を可能にする単純なグループです。これのメンバーを判断するために使用される属性は member です。
  • groupOfNames などの groupOfUniqueNames は、ユーザー DN をメンバーとして一覧表示しますが、メンバーは一意でなければなりません。これにより、ユーザーをグループメンバーとして複数回追加しないようにできます。これは、セルフ参照グループメンバーシップを防ぐ 1 つの方法です。これのメンバーを判断するために使用される属性は uniqueMember です。
  • groupOfURLs は、LDAP URL の一覧を使用して、メンバーシップの一覧をフィルタリングして生成します。このオブジェクトクラスはすべての動的グループに必要で、groupOfNames および groupOfUniqueNames と共に使用できます。
  • groupOfCertificates は、グループメンバーを識別するための証明書 (実際には証明書名) を検索して識別するために LDAP フィルターを使用するという点で、groupOfURLs と似ています。これは、グループに特別なアクセスパーミッションを付与できるため、グループベースのアクセス制御に役立ちます。これのメンバーを判断するために使用される属性は memberCertificate です。
以下の表は、グループのデフォルト属性を示しています。

表8.1 動的および静的のグループスキーマ

グループのタイプ グループオブジェクトクラス member 属性
静的 groupOfNames[a] member
groupOfUniqueNames [a] uniqueMember
動的 groupOfURLs memberURL
groupOfCertificates memberCertificate
[a] このオブジェクトクラスが動的オブジェクトクラスの 1 つとともに使用されると、グループは動的になります。
以下の 2 つの例は、静的および動的のグループエントリーを示しています。

例8.1 静的グループエントリー

静的グループエントリーは、グループの特定のメンバーを一覧表示します。以下に例を示します。
objectClass: top
objectClass: groupOfUniqueNames
cn: static group
description: Example static group.
uniqueMember: uid=mwhite,ou=People,dc=example,dc=com
uniqueMember: uid=awhite,ou=People,dc=example,dc=com

例8.2 動的グループエントリー

動的グループは、少なくとも 1 つの LDAP URL を使用して、グループに属するエントリーを識別し、複数の LDAP URL を指定できます。または、groupOfUniqueNames のような別のグループオブジェクトクラスで使用する場合は、動的 LDAP URL とともにいくつかのグループメンバーを明示的に一覧表示できます。例:
objectClass: top
objectClass: groupOfUniqueNames
objectClass: groupOfURLs
cn: dynamic group
description: Example dynamic group.
memberURL: ldap:///dc=example,dc=com??sub?(&(objectclass=person)(cn=*sen*))
注記
memberOf プラグインは、動的に生成されるグループメンバーシップをサポートしません。属性にグループメンバーを一覧表示する代わりに memberURL 属性を設定すると、memberOf プラグインはフィルターに一致するユーザーオブジェクトに memberOf 属性を追加しません。

8.1.2. 静的グループの作成

Directory Server は、コマンドラインを使用した静的グループの作成のみに対応します。

8.1.2.1. コマンドラインで静的グループの作成

本セクションでは、コマンドラインを使用して異なるタイプの静的グループを作成する方法を説明します。
異なる静的グループの詳細は、「各種グループ」を参照してください。

groupOfNames オブジェクトクラスを使用した静的グループの作成

dsidm ユーティリティーは、指定したベース DN の cn=Groups エントリーに静的グループを作成します。
たとえば、cn=Groups,dc=example,dc=com エントリーで groupOfNames オブジェクトクラスを使用して静的 example_group グループを作成するには、次のコマンドを実行します。
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn "example_group"

groupOfUniqueNames オブジェクトクラスを使用した静的グループの作成

groupOfUniqueNames オブジェクトクラスで静的グループを作成するには、ldapmodify ユーティリティーを使用してエントリーを追加します。
たとえば、cn=Groups,dc=example,dc=com エントリーで groupOfUniqueNames オブジェクトクラスを使用して静的 example_group グループを作成するには、次のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=example_group,cn=Groups,dc=example,dc=com
changetype: add
objectClass: top
objectClass: groupOfUniqueNames
cn: example_group
description: Example static group with unique members

8.1.3. 動的グループの作成

Directory Server は、コマンドラインを使用した動的グループの作成のみをサポートします。

8.1.3.1. コマンドラインで動的グループの作成

本セクションでは、コマンドラインを使用してさまざまなタイプの動的グループを作成する方法を説明します。
さまざまな動的グループの詳細は、「各種グループ」を参照してください。

groupOfURLs オブジェクトクラスを使用した動的グループの作成

たとえば、cn=Groups,dc=example,dc=com エントリーで groupOfURLs オブジェクトクラスを使用して動的 example_group グループを作成するには、次のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=example_group,cn=Groups,dc=example,dc=com
changetype: add
objectClass: top
objectClass: groupOfURLs
cn: example_group
description: Example dynamic group for user entries
memberURL: ldap:///dc=example,dc=com??sub?(&(objectclass=person)(cn=*sen*))

groupOfCertificates オブジェクトクラスを使用した動的グループの作成

たとえば、cn=Groups,dc=example,dc=com エントリーで groupOfCertificates オブジェクトクラスを使用して動的 example_group グループを作成するには、次のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=example_group,cn=Groups,dc=example,dc=com
changetype: add
objectClass: top
objectClass: groupOfURLs
cn: example_group
description: Example dynamic group for certificate entries
memberCertificate: ...

8.1.4. ユーザーエントリーにおけるグループメンバーシップの一覧表示

グループに属するエントリーは、グループエントリー自体で定義されます。これにより、グループを確認し、そのメンバーを確認し、グループメンバーシップを一元管理できるようになります。ただし、1 つのユーザーが属するグループを確認することは適切な方法ではありません。ロールがあるので、メンバーシップを示すユーザーエントリーには何もありません。
MemberOf プラグインは、グループメンバーシップの一覧を対応するユーザーエントリーに関連付けます。
MemberOf プラグインはグループエントリーのメンバー属性を分析し、メンバーのエントリーに対応する memberOf 属性を自動的に書き込みます。(デフォルトでは、これにより member 属性を確認しますが、複数の属性インスタンスを使用して複数の異なるグループタイプをサポートすることができます。)
メンバーシップが変更になると、プラグインはユーザーエントリーの memberOf 属性を更新します。MemberOf プラグインは、ネスト化されたグループメンバーシップを含むエントリーを確認して、ユーザーが属するグループを表示する方法を提供します。ネスト化されたグループを介してメンバーシップを追跡することは非常に困難ですが、MemberOf プラグインには、すべてのグループの (直接および間接的な) メンバーシップが表示されます。
MemberOf プラグインは、動的グループや循環グループではなく、静的グループのメンバー属性を管理します。

8.1.4.1. memberOf プラグインを使用する場合の考慮事項

本セクションでは、memberOf プラグインを使用する際に重要な考慮事項を説明します。
レプリケーショントポロジーでの memberOf プラグインの使用
レプリケーショントポロジーで memberOf 属性を管理する方法は 2 つあります。
  • トポロジー内のすべてのサプライヤーサーバーおよび読み取り専用レプリカサーバーで、memberOf プラグインを有効にします。この場合、すべてのレプリカ合意で、レプリケーションから memberOf 属性を除外する必要があります。属性の除外に関する詳細は、「一部レプリケーションを使用した属性のサブセットの複製」を参照してください。
  • memberOf プラグインは、トポロジー内のすべてのサプライヤーサーバーでのみ有効にします。そのためには、以下を実行します。
    • レプリカ合意ですべての書き込みが有効なサプライヤーに対する memberOf 属性のレプリケーションを無効にする必要があります。属性の除外に関する詳細は、「一部レプリケーションを使用した属性のサブセットの複製」を参照してください。
    • memberOf 属性のレプリケーションを、すべての読み取り専用レプリカに対して、レプリカ合意で有効にする必要があります。
    • 読み取り専用レプリカでは、memberOf プラグインを有効にしないでください。
分散データベースでの memberOf プラグインの使用
「データベースの作成」で説明されているように、ディレクトリーのサブツリーを個別のデータベースに保存できます。デフォルトでは、memberOf プラグインはグループと同じデータベース内に保存されるユーザーエントリーのみを更新します。プラグインがグループとして異なるデータベースのユーザーも更新できるようにするには、memberOfAllBackends パラメーターを on に設定する必要があります。「Web コンソールを使用した各サーバーでの MemberOf プラグインの設定」を参照してください。

8.1.4.2. memberOf プラグインで必要なオブジェクトクラス

memberOf プラグイン。デフォルトで、memberOf プラグインは、MemberOf オブジェクトクラスをオブジェクトに追加し、memberOf 属性を提供します。このオブジェクトクラスは、この目的のために任意のオブジェクトに安全に追加でき、このプラグインを正しく動作させるためにこれ以上のアクションは必要ありません。代わりに、inetUser オブジェクトクラスまたは inetAdmin オブジェクトクラスが含まれるユーザーオブジェクトを作成できます。どちらのオブジェクトクラスも memberOf 属性をサポートします。
ネスト化されたグループを設定するには、グループは extensibleObject オブジェクトクラスを使用する必要があります。
注記
ディレクトリーエントリーに必要な属性をサポートするオブジェクトクラスが含まれていない場合、操作は以下のエラーで失敗します。
LDAP: error code 65 - Object Class Violation

8.1.4.3. MemberOf プラグイン構文

MemberOf プラグインインスタンスは、ポーリングするグループメンバー属性 (memberOfGroupAttr) と、メンバーのユーザーエントリー (memberOfAttr) で作成および管理する属性の 2 つの属性を定義します。
memberOfGroupAttr 属性は多値です。異なるタイプのグループは異なるメンバー属性を使用するため、複数の memberOfGroupAttr 属性を使用すると、プラグインで複数のグループタイプを管理できます。
プラグインインスタンスは、MemberOf プラグインを識別するためのプラグインパスと関数も提供し、プラグインを有効にするための状態設定が含まれます。これらの両方は、すべてのプラグインに必要です。デフォルトの MemberOf プラグインが、例8.3「デフォルトの MemberOf プラグインエンティティー」に表示されます。

例8.3 デフォルトの MemberOf プラグインエンティティー

 dn: cn=MemberOf Plugin,cn=plugins,cn=config
 objectClass: top
 objectClass: nsSlapdPlugin
 objectClass: extensibleObject
 cn: MemberOf Plugin  
 nsslapd-pluginPath: libmemberof-plugin  
 nsslapd-pluginInitfunc: memberof_postop_init  
 nsslapd-pluginType: postoperation
 nsslapd-pluginEnabled: on  
 nsslapd-plugin-depends-on-type: database
 memberOfGroupAttr: member  
 memberOfGroupAttr: uniqueMember  
 memberOfAttr: memberOf  
 memberOfAllBackends: on  
 nsslapd-pluginId: memberOf
 nsslapd-pluginVersion: X.Y.Z
 nsslapd-pluginVendor: Red Hat, Inc.
 nsslapd-pluginDescription: memberOf plugin
例で使用するパラメーターの詳細と、設定可能なパラメーターの詳細は、『Red Hat Directory Server Command, Configuration, and File Reference』のMemberOf Plug-in Attributesセクションを参照してください。
注記
1 つのメンバー属性 (デフォルトでは member) のみを許可した古いバージョンの Directory Server との後方互換性を維持するために、プラグイン設定で使用される新しいメンバー属性に加えて、member グループ属性または以前のメンバー属性を含める必要がある場合があります。
 memberOfGroupAttr: member  
 memberOfGroupAttr: uniqueMember  

8.1.4.4. MemberOf の有効化

本セクションでは、MemberOf プラグインを有効にする方法を説明します。
8.1.4.4.1. コマンドラインを使用した MemberOf プラグインの有効化
コマンドラインで MemberOf プラグインを有効にします。
  1. dsconf ユーティリティーを使用してプラグインを有効にします。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof enable
  2. インスタンスを再起動します。
    # dsctl instance_name restart
    「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。
8.1.4.4.2. Web コンソールを使用した MemberOf プラグインの有効化
Web コンソールを使用して MemberOf プラグインを有効にします。
  1. Web コンソールで Directory Server ユーザーインターフェースを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Plugins メニューを選択します。
  4. MemberOf プラグインを選択します。
  5. ステータスを ON に変更し、プラグインを有効にします。
  6. インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
    「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。

8.1.4.5. 各サーバーでの MemberOf プラグインの設定

MemberOf プラグインの設定を複製しない場合は、各サーバーでプラグインを手動で設定します。
8.1.4.5.1. コマンドラインを使用した各サーバーでの MemberOf プラグインの設定
コマンドラインを使用して MemberOf プラグインを設定するには、以下を実行します。
  1. プラグインを有効にします。「コマンドラインを使用した MemberOf プラグインの有効化」を参照してください。
  2. デフォルトである member 以外の属性からグループのメンバーを取得するには、memberOfGroupAttr パラメーターをそれぞれの属性名に設定します。
    たとえば、uniqueMember 属性からグループメンバーを読み取るには、memberOfGroupAttr の現在の値を置き換えます。
    1. 必要に応じて、現在設定されている属性を表示します。
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show
      ...
      memberofgroupattr: member
      ...
      このコマンドは、現在 member 属性のみがグループのメンバーを取得するように設定されていることを示しています。
    2. 現在設定されている設定からすべての属性を削除します。
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr delete
      Successfully changed the cn=MemberOf Plugin,cn=plugins,cn=config
      注記
      特定のグループ属性を削除できません。
    3. 設定に uniqueMember 属性を追加します。
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr uniqueMember
      successfully added memberOfGroupAttr value "uniqueMember"
      複数の属性を設定するには、すべて --groupattr パラメーターに渡します。例:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr member uniqueMember ...
  3. デフォルトでは、MemberOf プラグインは memberOf 属性をユーザーエントリーに追加します。別の属性を使用するには、memberOfAttr パラメーターで属性の名前を設定します。
    たとえば、customMemberOf 属性をユーザーレコードに追加するには、memberOfAttr の現在の値を置き換えます。
    1. 必要に応じて、現在設定されている属性を表示します。
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show
      ...
      memberofattr: memberOf
      ...
    2. MemberOf プラグインを設定し、customMemberOf 属性をユーザーエントリーに追加します。
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --attr customMemberOf
      memberOfAttr set to "customMemberOf"
      注記
      このパラメーターは、DN 構文をサポートする属性にのみ設定できます。
  4. 分散データベースを使用する環境では、ローカルデータベースのみではなく、すべてのデータベースでユーザーエントリーを検索するようにプラグインを設定できます。
    dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --allbackends on
    memberOfAllBackends enabled successfully
  5. インスタンスを再起動します。
    # dsctl instance_name restart
    「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。
8.1.4.5.2. Web コンソールを使用した各サーバーでの MemberOf プラグインの設定
コマンドラインを使用して MemberOf プラグインを設定するには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェースを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Plugins メニューを開きます。
  4. memberOf プラグインを選択します。
  5. ステータスを ON に変更し、プラグインを有効にします。
  6. フィールドに入力してプラグインを設定します。たとえば、uniqueMember 属性がグループに追加されると、プラグインがユーザーエントリーに customMemberOf 属性を追加するように設定するには、以下を実行します。
  7. Save をクリックします。
  8. インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
    「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。

8.1.4.6. MemberOf プラグイン共有設定の使用

デフォルトでは、MemberOf プラグインの設定は各サーバーに保存されます。プラグインの共有設定機能を使用すると、設定は cn=config サフィックスの外に格納され、複製されます。管理者は、各サーバーでプラグインを手動で設定せずに、同じ設定を使用できます。
  1. プラグインを有効にします。MemberOf の有効化」を参照してください。
  2. MemberOf プラグインの共有設定エントリーを追加します。例:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof config-entry add "cn=shared_MemberOf_config,dc=example,dc=com" --groupattr "member" --attr "memberOf"
    これにより、コマンドを実行するサーバーで共有設定エントリーが自動的に有効になります。
  3. インスタンスを再起動します。
    # dsctl instance_name restart
    「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。
  4. 共有構成を使用する必要があるレプリケーショントポロジー内の他のすべてのサーバーで、共有構成を有効にします。
    1. プラグインを有効にします。MemberOf の有効化」を参照してください。
    2. 共有設定を保存する DN を設定します。以下に例を示します。
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --config-entry cn=shared_MemberOf_config,dc=example,dc=com
    3. インスタンスを再起動します。
      # dsctl instance_name restart
      「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。
重要
共有設定を有効にすると、プラグインは cn=MemberOf Plugin,cn=plugins,cn=config プラグインエントリーに設定されたすべてのパラメーターを無視し、共有設定エントリーの設定のみを使用します。

8.1.4.7. MemberOf プラグインのスコープの設定

複数のバックエンドまたは複数のネストされたサフィックスを設定した場合は、memberOfEntryScope パラメーターおよび memberOfEntryScopeExcludeSubtree パラメーターを使用して、MemberOf プラグインが動作するサフィックスを設定できます。
ユーザーをグループに追加する場合、MemberOf プラグインは、ユーザーおよびグループの両方がプラグインのスコープにある場合に限り memberOf 属性をグループに追加します。たとえば、dc=example,dc=com 内のすべてのエントリーで機能するように MemberOf プラグインを設定し、ou=private,dc=example,dc=com のエントリーを除外するには、以下のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --scope "dc=example,com"
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --exclude "dc=group,dc=example,com"
--scope DN パラメーターを使用してユーザーエントリーを範囲外に移動した場合:
  • member などのメンバーシップ属性は、グループエントリーで更新され、ユーザー DN 値が削除されます。
  • memberOf 属性は、グループ DN 値を削除するためにユーザーエントリーで更新されます。
注記
--exclude パラメーターに設定した値は、--scope に設定した値よりも高くなります。両方のパラメーターで設定したスコープが重複する場合、MemberOf プラグインは、非オーバーラッピングディレクトリーエントリーでのみ機能します。

8.1.4.8. memberOf 値の再生成

MemberOf プラグインは、グループエントリー自体の設定に基づいて、グループメンバーエントリーで memberOf 属性を自動的に管理します。ただし、memberOf 属性はユーザーエントリーで手動で編集でき、新しいエントリーは memberOf 属性がすでに設定されているサーバーにインポートまたは複製できます。このような状況では、サーバープラグインによって管理される memberOf 設定と、エントリーで定義された実際のメンバーシップとの間に不整合が生じます。
たとえば、dc=example,dc=com エントリーおよびサブエントリーで memberOf の値を再生成するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof fixup -f "(|(objectclass=inetuser)(objectclass=inetadmin)(objectclass=nsmemberof))" "dc=example,dc=com"
Attempting to add task entry...
Successfully added task entry
-f filter オプションは任意です。フィルターを使用して、フィルターに一致するユーザーエントリーの memberOf 属性を再生成します。フィルターを指定しない場合、タスクは inetUser オブジェクトクラス、inetAdmin オブジェクトクラス、または nsMemberOf オブジェクトクラスを含むすべてのエントリーで属性を再生成します。
注記
エントリー自体が複製された場合でも、再生成タスクをローカルに実行します。つまり、更新されたエントリーが複製されるまで、他のサーバーのエントリーの memberOf 属性は更新されません。

8.1.5. 指定したグループへのエントリーの自動追加

グループ管理は、特に Directory Server データおよび組織を使用するクライアントや、グループを使用してエントリーに機能を適用するクライアントなど、ディレクトリーデータを管理する上で重要な要素となります。グループにより、ディレクトリー全体で一貫して、信頼できるポリシーの適用が容易になります。パスワードポリシー、アクセス制御リスト、その他のルールはすべてグループメンバーシップに基づいて設定できます。
アカウントの作成時に、新しいエントリーをグループに自動的に割り当てることができるため、管理者の介入なしに、適切なポリシーと機能がそれらのエントリーに即座に適用されるようにします。
動的グループは、一致するエントリーがグループに自動的に含まれるため、グループを作成してメンバーを自動的に割り当てる 1 つの方法です。Directory Server のポリシーおよび設定を適用するには、これで十分です。ただし、LDAP アプリケーションとクライアントには、通常、必要な操作を行うためにグループメンバーの静的リストおよび明示的なリストが必要です。静的グループのすべてのメンバーは、このグループに手動で追加する必要があります。
静的グループ自体は動的グループのようなメンバーを検索できませんが、静的グループに自動的にメンバーを追加できるようになります (Auto Membership プラグイン)。
自動メンバーシップにより、基本的に、静的グループが動的グループのように動作できるようにします。異なる自動メンバー定義により、すべての新規ディレクトリーエントリーで自動的に実行される検索が作成されます。自動メンバールールは、動的検索フィルターと同様に、一致するエントリーを検索し、特定します。次に、これらのエントリーをメンバーとして静的グループに追加します。
注記
デフォルトでは、cn=Auto Membership Plugin,cn=plugins,cn=config エントリーの autoMemberProcessModifyOps パラメーターは on に設定されます。この設定では、Automembership プラグインは、ユーザーエントリーを編集して管理者が別のグループにユーザーを移動する際にグループメンバーシップも更新します。
autoMemberProcessModifyOpsoff に設定すると、Directory Server は、ユーザーにグループエントリーを追加する場合にのみプラグインを起動し、グループメンバーシップを更新するために手動で修正タスクを実行する必要があります。
Automembership は、ディレクトリーに保存されているオブジェクトタイプ (ユーザー、マシン、ネットワークデバイス、顧客データ、またはその他のアセット) をターゲットにすることができます。
注記
Automembership は、定義した基準に基づいて既存のグループに新しいメンバーを追加します。新しいエントリー用のグループは作成されません。
特定タイプの新規エントリーの作成時に対応するグループエントリーを作成するには、Managed Entries プラグインを使用します。詳細は、「デュアルエントリーの自動作成」を参照してください。

8.1.5.1. Automembership ルールの構造の確認

Auto Membership プラグイン自体は、cn=plugins,cn=config のコンテナーエントリーです。グループ割り当ては、子エントリーで定義されます。
8.1.5.1.1. Automembership 設定エントリー
自動メンバー割り当ては、Automembership プラグインエントリーの子であるメインの定義エントリーを使用して作成されます。各定義エントリーは 3 つの要素を定義します。
  • 検索スコープと検索フィルターの両方を含むエントリーを識別する LDAP 検索 (autoMemberScope および autoMemberFilter)
  • メンバーエントリーを追加するデフォルトグループ (autoMemberDefaultGroup)
  • メンバーエントリーの形式: member などのグループエントリーの属性、および dn などの属性値 (autoMemberGroupingAttr)
定義は、automember ルールの基本設定です。必要な情報をすべて識別し、一致するメンバーエントリーとそのメンバーの所属先のグループを特定します。
たとえば、以下の定義は、オブジェクトクラスが ntUser に設定されているすべてのユーザーを cn=windows-users グループに割り当てます。
dn: cn=Windows Users,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
autoMemberScope: ou=People,dc=example,dc=com
autoMemberFilter: objectclass=ntUser
autoMemberDefaultGroup: cn=windows-group,cn=groups,dc=example,dc=com
autoMemberGroupingAttr: member:dn
この例に使用される属性と、このエントリーに設定できるその他の属性の詳細は、Red Hat Directory Server Configuration, Command, and File Referencecn=Auto Membership Plugin,cn=plugins,cn=config エントリーの説明を参照してください。
8.1.5.1.2. 追加の正規表現エントリー
ユーザーグループのように、一致するすべてのエントリーをメンバーとして追加する必要がある場合は、単純な定義で十分です。ただし、他の属性の値によっては、LDAP 検索フィルターに一致するエントリーを異なるグループに追加する必要がある場合があります。たとえば、IP アドレスや物理的な場所に応じて、異なるグループにマシンを追加しないといけない場合があります。ユーザーは、従業員 ID 番号に応じて異なるグループに置かなければならない場合があります。
automember 定義では、正規表現を使用して、グループから含めたり、除外したりするエントリーに追加の条件を提供したり、選択したエントリーを追加する新しい特定のグループを作成したりできます。
たとえば、automember 定義は、汎用ホストグループに追加されるすべてのマシンを設定します。

例8.4 ホストグループの automember 定義

dn: cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
cn: Hostgroups
autoMemberScope: dc=example,dc=com
autoMemberFilter: objectclass=ipHost
autoMemberDefaultGroup: cn=systems,cn=hostgroups,dc=example,dc=com
autoMemberGroupingAttr: member:dn
指定の範囲内に完全修飾ドメイン名を持つマシンが Web サーバーグループに追加されるように、正規表現ルールが追加されます。

例8.5 Web サーバーグループの正規表現条件

dn: cn=webservers,cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group for webservers
cn: webservers
autoMemberTargetGroup: cn=webservers,cn=hostgroups,dc=example,dc=com
autoMemberInclusiveRegex: fqdn=^www\.web[0-9]+\.example\.com
そのため、www.web1.example.com などの式 ^www\.web[0-9]+\.example\.com に一致する完全修飾ドメイン名で追加されたホストマシンは、正確な正規表現に定義される cn=webservers グループに追加されます。LDAP フィルター objectclass=ipHost に一致するが別のタイプの完全修飾ドメイン名を持つその他のマシンエントリーは、メインの定義エントリーで定義される一般的なホストグループ cn=systems に追加されます。
したがって、定義内のグループは、一般的な定義に一致するが、正規表現ルールの条件を満たさないエントリーのフォールバックです。
正規表現ルールは、自動メンバー定義の子エントリーです。

図8.1 正規表現の条件

正規表現の条件
各ルールには、複数の包含および除外の式を含めることができます。(除外は最初に評価されます。) エントリーが包含ルールと一致する場合は、グループに追加されます。
正規表現ルールに指定できるターゲットグループは 1 つだけです。

表8.2 正規表現の条件属性

属性 説明
autoMemberRegexRule (必須オブジェクトクラス) 正規表現ルールとしてエントリーを識別します。このエントリーは、automember 定義 (objectclass: autoMemberDefinition) の子である必要があります。
autoMemberInclusiveRegex 含めるエントリーを識別するために使用する正規表現を設定します。一致するエントリーのみがグループに追加されます。複数の正規表現を使用できます。エントリーがこれらの式のいずれかと一致する場合は、グループに含まれます。
式の形式は、Perl と互換性のある正規表現 (PCRE) です。PCRE パターンの詳細は、pcresyntax(3) の man ページを参照してください。
これは多値属性です。
autoMemberExclusiveRegex 除外するエントリーを識別するために使用する正規表現を設定します。エントリーが除外条件と一致する場合は、グループに 含まれません。複数の正規表現を使用できます。エントリーがこれらの式のいずれかと一致する場合は、グループで除外されます。
式の形式は、Perl と互換性のある正規表現 (PCRE) です。PCRE パターンの詳細は、pcresyntax(3) の man ページを参照してください。
これは多値属性です。
注記
除外条件は最初に評価され、包含条件よりも優先されます。
autoMemberTargetGroup 正規表現の条件を満たす場合に、エントリーをメンバーとして追加するグループを設定します。

8.1.5.2. Auto Membership 定義の設定

Auto Membership プラグインを使用するには、プラグインの定義を作成します。
8.1.5.2.1. コマンドラインを使用した Auto Membership 定義の設定
コマンドラインを使用して Auto Membership 定義を作成するには、以下を実行します。
  1. Auto Membership プラグインを有効にします。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember enable
    Enabled Auto Membership Plugin
  2. Auto Membership 定義を作成します。例:
    #  dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember definition definition_name add --default-group "cn=windows-group,cn=groups,dc=example,dc=com" --scope "ou=People,dc=example,dc=com" --filter "objectclass=ntUser" --grouping-attr "member:dn"
    Automember definition created successfully!
  3. 必要に応じて、Auto Membership 定義に追加のパラメーターを設定して、たとえば正規表現を使用して追加するエントリーを特定します。ldapmodify ユーティリティーを使用して、cn=definition_name,cn=Auto Membership Plugin,cn=plugins,cn=config エントリーにこれらのパラメーターを追加または更新します。設定可能なパラメーターは、Red Hat Directory Server Configuration, Command, and File Referencecn=Auto Membership Plugin,cn=plugins,cn=config エントリーの説明を参照してください。
  4. インスタンスを再起動します。
    # dsctl instance_name restart
    「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。
8.1.5.2.2. Web コンソールを使用した Auto Membership 定義の設定
Web コンソールを使用して Auto Membership 定義を作成するには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェースを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Plugins メニューを開きます。
  4. Auto Membership プラグインを選択します。
  5. ステータスを ON に変更し、プラグインを有効にします。
  6. Add Definition をクリックします。
  7. フィールドに入力します。以下に例を示します。
  8. オプションで、正規表現フィルターを追加します。
  9. Save をクリックします。
  10. インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
    「プラグインを動的に有効化」の説明に従って動的プラグインを有効にした場合には、インスタンスを再起動する必要はありません。

8.1.5.3. 既存エントリーの更新による Auto Membership 定義の適用

デフォルトでは、cn=Auto Membership Plugin,cn=plugins,cn=config エントリーの autoMemberProcessModifyOps パラメーターは有効です。この設定では、Automembership プラグインは、ユーザーエントリーを編集して管理者が別のグループにユーザーを移動する際にグループメンバーシップも更新します。ただし、autoMemberProcessModifyOpsoff に設定した場合は、ディレクトリーに新しいエントリーを追加したか、既存のエントリーを変更した場合に、手動で修正タスクを実行する必要があります。
タスクエントリーを作成するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember fixup -f "filter" -s scope
タスクが完了すると、エントリーはディレクトリー設定から削除されます。

8.1.5.4. Automembership ルールの例

Automembership ルールは通常、ユーザーとマシンに適用されます (ただし、どのタイプのエントリーにも適用することができます)。自動メンバーシップルールの計画に役立つ便利な例がいくつかあります。
  • IP アドレスに基づく異なるホストグループ
  • Windows ユーザーグループ
  • 従業員の ID に基づく異なるユーザーグループ

例8.6 IP アドレス別のホストグループ

automember ルールは、まずルールのスコープとターゲットを定義します。「追加の正規表現エントリー」の例では、設定グループを使用してフォールバックグループと正規表現エントリーを定義し、一致するエントリーをソートします。
スコープは、 ホストエントリーの検索に使用されます。その後、プラグインは正規表現エントリーで繰り返し処理します。エントリーが包含する正規表現と一致する場合は、そのホストグループに追加されます。グループに一致しない場合は、デフォルトグループに追加されます。
実際のプラグイン設定エントリーは、定義エントリーに、ホストを Web サーバーグループまたはメールサーバーグループにフィルターを設定する 2 つの正規表現エントリーに対して設定されます。
configuration entry
dn: cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
cn: Hostgroups
autoMemberScope: dc=example,dc=com
autoMemberFilter: objectclass=bootableDevice
autoMemberDefaultGroup: cn=orphans,cn=hostgroups,dc=example,dc=com
autoMemberGroupingAttr: member:dn

regex entry #1
dn: cn=webservers,cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group placement for webservers
cn: webservers
autoMemberTargetGroup: cn=webservers,cn=hostgroups,dc=example,dc=com
autoMemberInclusiveRegex: fqdn=^www[0-9]+\.example\.com
autoMemberInclusiveRegex: fqdn=^web[0-9]+\.example\.com
autoMemberExclusiveRegex: fqdn=^www13\.example\.com
autoMemberExclusiveRegex: fqdn=^web13\.example\.com

regex entry #2
dn: cn=mailservers,cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group placement for mailservers
cn: mailservers
autoMemberTargetGroup: cn=mailservers,cn=hostgroups,dc=example,dc=com
autoMemberInclusiveRegex: fqdn=^mail[0-9]+\.example\.com
autoMemberInclusiveRegex: fqdn=^smtp[0-9]+\.example\.com
autoMemberExclusiveRegex: fqdn=^mail13\.example\.com
autoMemberExclusiveRegex: fqdn=^smtp13\.example\.com

例8.7 Windows ユーザーグループ

「Automembership 設定エントリー」に表示されている基本的なユーザーグループは、posixAccount 属性を使用して新規ユーザーをすべて識別します。Directory Server 内に作成された新規ユーザーはすべて、posixAccount 属性を使用して作成されます。したがって、新しい Directory Server ユーザーにとって安全なキャッチオールです。ただし、ユーザーアカウントを Windows ドメインから Directory Server に同期すると、Windows ユーザーアカウントは posixAccount 属性 なし で作成されます。
Windows ユーザーは ntUser 属性で識別されます。基本的な all-users グループルールは、特に目的の Windows ユーザーに変更できます。これは、デフォルトの all-users グループまたは Windows 固有のグループに追加できます。
dn: cn=Windows Users,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
autoMemberScope: dc=example,dc=com
autoMemberFilter: objectclass=ntUser
autoMemberDefaultGroup: cn=Windows Users,cn=groups,dc=example,dc=com
autoMemberGroupingAttr: member:dn

例8.8 従業員タイプによるユーザーグループ

Auto Membership プラグインはカスタム属性で機能します。これは、他のアプリケーションが管理するエントリーに役立ちます。たとえば、人的リソースアプリケーションは、カスタムの employeeType 属性で従業員タイプをもとにユーザーを作成してから参照できます。
例8.6「IP アドレス別のホストグループ」と同様、ユーザータイプのルールは 2 つの正規表現フィルターを使用して、すべての時間および一時従業員をソートます。この例では、実際の正規表現ではなく明示的な値を使用します。その他の属性については、従業員の ID 番号範囲に基づいてフィルターを作成するなど、正規表現を使用することが推奨されます。
configuration entry
dn: cn=Employee groups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
cn: Hostgroups
autoMemberScope: ou=employees,ou=people,dc=example,dc=com
autoMemberFilter: objectclass=inetorgperson
autoMemberDefaultGroup: cn=general,cn=employee groups,ou=groups,dc=example,dc=com
autoMemberGroupingAttr: member:dn

regex entry #1
dn: cn=full time,cn=Employee groups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group for full time employees
cn: full time
autoMemberTargetGroup: cn=full time,cn=employee groups,ou=groups,dc=example,dc=com
autoMemberInclusiveRegex: employeeType=full

regex entry #2
dn: cn=temporary,cn=Employee groups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group placement for interns, contractors, and seasonal employees
cn: temporary
autoMemberTargetGroup: cn=temporary,cn=employee groups,ou=groups,dc=example,dc=com
autoMemberInclusiveRegex: employeeType=intern
autoMemberInclusiveRegex: employeeType=contractor
autoMemberInclusiveRegex: employeeType=seasonal

8.1.5.5. 自動メンバー定義のテスト

Auto Member プラグインの各インスタンスは、定義と正規表現に関連してはいますが別々のエントリーのセットであるため、ユーザーがグループにどのようにマップされるかを正確に確認するのは難しい場合があります。これは、ユーザーの異なるサブセットをターゲットとする複数のルールがあると、より困難になります。
ドライランタスクが 2 つあり、すべての Auto Member プラグイン定義が設計通りにグループを適切に割り当てているかどうかを判断するのに役立ちます。

既存のエントリーを使用したテスト

cn=automember export updates が、ディレクトリー内の 既存のエントリー に対して実行し、ルールに基づいてユーザーの追加結果をエクスポートします。これは、既存のルールをテストして、実際のデプロイメントの実行方法を確認するのに役立ちます。

このタスクには、cn=automember rebuild membership タスク (検索、検索フィルター、および検索スコープのベース DN) と同じ情報が必要です。また、推奨されるエントリーの更新を記録するエクスポート LDIF ファイルを指定する追加パラメーターがあります。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=test_export,cn=automember export updates,cn=tasks,cn=config
objectClass: top
objectClass: extensibleObject
cn: test_export
basedn: dc=example,dc=com
filter: (uid=*)
scope: sub
ldif: /tmp/automember-updates.ldif

Import LDIF でのテスト

cn=automember map updates タスクは、新規ユーザーの インポート LDIF を取得してから、現在の自動メンバールールに対して新規ユーザーを実行します。これは、(実際の) 新規または既存のユーザーエントリーに適用する前に、新しいルールをテストする場合に非常に役立ちます。

これは、提案された新しいエントリーの変更を、既存のルールにマッピングまたは関連付けるため、マップタスクと呼ばれます。
このタスクには、入力 LDIF (少なくとも一部のユーザーエントリーを含む) の場所と、提案されたエントリー更新を書き込む出力 LDIF ファイルの 2 つの属性のみが必要です。入力および出力の LDIF ファイルの両方がローカルマシンの絶対パスです。
たとえば、ldapmodify を使用するには、以下を実行します。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=test_mapping, cn=automember map updates,cn=tasks,cn=config
objectClass: top
objectClass: extensibleObject
cn: test_mapping
ldif_in: /tmp/entries.ldif
ldif_out: /tmp/automember-updates.ldif