Red Hat Training

A Red Hat training course is available for Red Hat Directory Server

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

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

8.1. グループの使用

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

8.1.1. コンソールで静的グループの作成

静的グループは、任意の数のユーザーの DN 属性に同じグループ値を指定してエントリーを整理します。
注記
ユーザーがリモート Directory Server にエントリー(チェーンデータベースなど)がある場合は、静的グループを定義するエントリーを持つ Directory Server とは異なる場合は、Referential Integrity プラグインを使用して、削除されたユーザーエントリーが静的グループから自動的に削除されるようにします。
Referential Integrity プラグインには、パフォーマンスとアクセス制御に関する考慮事項がいくつかあります。チェーンで参照整合性を使用する方法は、「シャーシポリシーの設定」 を参照してください。
  1. Directory Server コンソールで、Directory タブを選択します
  2. 左側のペインで、新しいグループを追加するエントリーを右クリックし、New > Group を選択します。
    または、Object メニューに移動し、New > Group を選択します。
  3. 左側のペインで General をクリックします。Group Name フィールドに新規グループの名前を入力します(名前は必須です)、Description フィールドに新しいグループの説明を入力します。
  4. 左側のペインで Members をクリックします。右側のペインで、静的グループ タブを選択しますAdd をクリックして、新しいメンバーをグループに追加します。
  5. Search ドロップダウンリストで、検索するエントリーのソート(ユーザー、グループ、またはその両方)を選択してから Search をクリックします。
  6. 返されたエントリーからメンバーを選択し、OK をクリックします。
  7. 左側のペインで Languages をクリックし、そのグループに言語固有の情報を追加します。
  8. OK をクリックして新規グループを作成します。右側のペインに表示されます。
静的グループを編集するには、グループエントリーをダブルクリックして、エディターウィンドウで変更を行います。変更を表示するには、View メニューに移動し、Refresh を選択します。
注記
静的グループを管理するコンソールは、ユーザーの検索の VLV インデックスがない場合に、検索操作中に可能なすべての選択を表示できない場合があります。この問題は、ユーザーの数が 1000 以上で、検索用の VLV インデックスがない場合にだけ発生します。この問題を回避するには、フィルター (objectclass=person) および scope サブツリーを使用して、user 接尾辞の VLV インデックスを作成します 「コマンドラインから参照インデックスの作成」 を参照してください。

8.1.2. コンソールでの動的グループの作成

動的グループは、DN に基づいてユーザーをフィルタリングし、それらを 1 つのグループに含めます。
  1. Directory Server コンソールで、Directory タブを選択します
  2. 左側のペインで、新しいグループを追加するエントリーを右クリックし、New > Group を選択します。
    または、Object メニューに移動し、New > Group を選択します。
  3. 左側のペインで General をクリックします。Group Name フィールドに新規グループの名前を入力します(名前は必須です)、Description フィールドに新しいグループの説明を入力します。
  4. 左側のペインで Members をクリックします。右側のペインで、Dynamic Group タブを選択します。Add をクリックして、データベースのクエリーを行うための LDAP URL を作成します。
  5. テキストフィールドに LDAP URL を入力するか、LDAP URL の構成 で説明する Construct to を選択します。
    この結果には、フィルターに対応する現在のエントリー(グループメンバー)が表示されます。
  6. 左側のペインで Languages をクリックし、そのグループに言語固有の情報を追加します。
  7. OK をクリックします。右側のペインに新しいグループが表示されます。
動的グループを編集するには、グループエントリーをダブルクリックしてエディターウィンドウを開き、動的グループに変更を加えます。グループの変更を表示するには、View メニューに移動し、Refresh を選択します。
注記
動的グループを管理するコンソールは、ユーザーの検索の VLV インデックスがない場合に、検索操作中に可能なすべての選択を表示できない場合があります。この問題は、ユーザーの数が 1000 以上で、検索用の VLV インデックスがない場合に発生する可能性があります。この問題を回避するには、フィルター (objectclass=person) および scope サブツリーを使用して、user 接尾辞の VLV インデックスを作成します 「コマンドラインから参照インデックスの作成」 を参照してください。

8.1.3. コマンドラインでのグループの作成

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

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

グループのタイプ グループオブジェクトクラス member 属性
静的 groupOfUniqueNames uniqueMember
動的
groupOfUniqueNames
groupOfURLs
memberURL
静的グループエントリーは、グループの特定のメンバーを一覧表示します。たとえば、ldapmodify を使用するには、以下を実行します。
dn: cn=static group,ou=Groups,dc=example,dc=com
changetype: add
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
動的グループは、少なくとも 1 つの LDAP URL を使用して、グループに属するエントリーを識別し、複数の LDAP URL を指定できます。または、groupOfUniqueNames のような別のグループオブジェクトクラスで使用する場合は、動的 LDAP URL とともにいくつかのグループメンバーを明示的に一覧表示できます。たとえば、ldapmodify を使用するには、以下を実行します。
dn: cn=dynamic group,ou=Groups,dc=example,dc=com
changetype: add
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.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 に設定する必要があります。「コンソールからの MemberOf プラグインの編集」 を参照してください。

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

デフォルトでは、memberOf プラグインは nsMemberOf オブジェクトクラスをオブジェクトに追加し、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.1「デフォルトの MemberOf プラグインエンティティー」に表示されます。

例8.1 デフォルトの 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 コマンド、設定、およびファイルリファレンス』 の MemberOf プラグイン属性 セクションを参照してください。
注記
1 つのメンバー属性 (デフォルトでは member) のみを許可した古いバージョンの Directory Server との後方互換性を維持するために、プラグイン設定で使用される新しいメンバー属性に加えて、member グループ属性または以前のメンバー属性を含める必要がある場合があります。
 memberOfGroupAttr: member  
 memberOfGroupAttr: uniqueMember  

8.1.4.4. MemberOf プラグインのインスタンスの設定

ディレクトリーで使用されるグループのタイプに応じて、MemberOf プラグインで定義された属性を変更できます。
8.1.4.4.1. コンソールからの MemberOf プラグインの編集
  1. Configuration タブを選択し、Plugins フォルダーに展開します。
  2. Memberof Plugin エントリーまでスクロールします。
  3. プラグインが有効化されていることを確認します。これはデフォルトで無効にされます。
  4. Advanced ボタンをクリックして Advanced Properties Editor を開きます。
  5. memberOfGroupAttr 属性は、サーバーがメンバーエントリーを識別するために使用するグループエントリーの属性を設定します。この属性は、異なるグループ/メンバータイプに対して複数回使用できます。memberOfAttr 属性は、プラグインがユーザーエントリーで作成および管理する属性を設定します。
  6. 変更を保存します。
  7. Directory Server が動的プラグインを有効にするために設定されていない場合は、サーバーを再起動してプラグインを更新します。
8.1.4.4.2. コマンドラインでの MemberOf プラグインの編集
  1. MemberOf プラグインを有効にします。ldapmodify の使用:
    dn: cn=MemberOf Plugin,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: on
  2. グループメンバーエントリー属性に使用する属性を設定します。デフォルトの属性は member で、replace コマンドを使用して変更できます。memberOfGroupAttr 属性は多値であるため、追加のメンバータイプを定義に追加できます。たとえば、ldapmodify を使用するには、以下を実行します。
    dn: cn=MemberOf Plugin,cn=plugins,cn=config
    changetype: modify
    add: memberOfGroupAttr
    memberOfGroupAttr: uniqueMember
    
    add: memberOfGroupAttr
    memberOfGroupAttr: customMember-
  3. グループメンバーシップを表示するようにユーザーエントリーに設定する属性を設定します。たとえば、ldapmodify を使用するには、以下を実行します。
    dn: cn=MemberOf Plugin,cn=plugins,cn=config
    changetype: modify
    replace: memberOfAttr
    memberOfAttr: memberOf
  4. オプション。デプロイメントで分散データベースを使用する場合は、memberOfAllBackends 属性を有効にして、ユーザーエントリーについてローカルのデータベースだけではなく、すべてのデータベースを検索します。ldapmodify の使用:
    dn: cn=MemberOf Plugin,cn=plugins,cn=config
    changetype: modify
    replace: memberOfAllBackends
    memberOfAllBackends: on
  5. Directory Server が動的プラグインを有効にするために設定されていない場合は、サーバーを再起動して変更した新しいプラグインインスタンスを読み込みます。

8.1.4.5. memberOf プラグイン共有の設定

プラグイン設定を複製すると、ネットワーク上で一貫した設定を維持するのに役立ちます。これは特に大規模なデプロイメントで役に立ちます。マスターレプリケーションサーバーの設定のみを更新し、変更が他のすべてのサーバーに複製されます。
memberOf プラグイン設定は、cn=config 接尾辞以外の、バックエンドまたは接尾辞の共有設定エントリーに保存できます。
プラグインエントリーでは、nsslapd-pluginConfigArea 属性を使用して共有設定の場所を指定します。
nsslapd-pluginConfigArea: entry_DN
nsslapd-pluginConfigArea 属性をすべてのレプリカの同じプラグインエントリーに設定した後、レプリケーションは今後の設定変更をすべて処理します。
以下の表は、共有設定エントリーで使用できる属性を示しています。

表8.2 memberOf プラグイン共有設定の属性

設定属性
memberOfAttr (required) 属性名 memberOf
memberOfGroupAttr (required) 属性名 uniqueMember
memberOfAllBackends on|off off
memberOfEntryScope エントリー DN ou=people,dc=example,dc=com
memberOfSkipNested on|off on
memberOfEntryScopeExcludeSubtree エントリー DN ou=other,dc=example,dc=com
以下の例では、nsslapd-pluginConfigArea が設定されています。そのため、プラグインエントリーの設定は無視されます。
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
memberOfAttr: memberOf
nsslapd-pluginConfigArea: cn=memberOf plugin configuration,dc=example,dc=com
この例では、memberOf プラグインは member ではなく uniquemember グループ属性を使用します。
dn: cn=memberOf plugin configuration,dc=example,dc=com
objectClass: top
objectClass: extensibleObject
cn: MemberOf Plugin Configuration
memberOfGroupAttr: uniquemember
memberOfAttr: memberOf

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

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

8.1.4.7. memberOf 値の同期

MemberOf プラグインは、グループエントリー自体の設定に基づいて、グループメンバーエントリーで memberOf 属性を自動的に管理します。ただし、memberOf 属性がすでに設定されているサーバーに、ユーザーエントリーで memberOf 属性を直接編集することも、新しいエントリーをインポートまたは複製できます。このような状況では、サーバープラグインによって管理される memberOf 設定と、エントリーに定義された実際のメンバーシップとの間に不整合が生じます。
Directory Server には、プラグインを手動で実行する memberOf 修復タスクがあり、適切な memberOf 属性がエントリーに設定されていることを確認します。このタスクをトリガーする方法は 3 つあります。
  • Directory Server コンソール
  • fixup-memberof.pl スクリプトの使用
  • cn=memberof task,cn=tasks,cn=config タスクエントリーの実行
注記
memberOf 再生成タスクは、エントリー自体が複製されていてもローカルで実行されます。つまり、更新されたエントリーが複製されるまで、他のサーバーのエントリーの memberOf 属性は更新されません。
8.1.4.7.1. fixup-memberof.pl を使用した memberOf 属性の初期化および再生成
fixup-memberof.pl は、memberOf の説明に従って 「ldapmodify を使用した memberOf 属性の初期化および再生成」 属性を再生成するために使用される Perl スクリプトラッパーです。
詳細は、man fixup-memberof.pl も参照してください。
8.1.4.7.2. ldapmodify を使用した memberOf 属性の初期化および再生成
memberOf 属性を再生成することは、特別なタスク設定エントリーで管理できるタスクの 1 つです。タスクエントリーは、dse.ldif ファイルの cn=tasks 設定エントリーで発生するため、ldapmodify を使用してエントリーを追加してタスクを開始することもできます。タスクが完了するとすぐに、エントリーはディレクトリーから削除されます。
fixup-memberof.pl スクリプトは、memberOf 属性を再生成する Directory Server インスタンスに特別なタスクエントリーを作成します。
memberOf 修正タスクを開始するには、cn=memberof タスク、cn= tasks, cn=config エントリーの下にエントリーを追加します。必要な属性は、特定タスクの cn のみです。ldapmodify の使用:
dn: cn=example memberOf,cn=memberof task,cn=tasks,cn=config
changetype: add
cn:example memberOf
タスクが完了するとすぐに、エントリーは dse.ldif 設定から削除 されるため、同じタスクエントリーを継続的に再利用できます。

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 は、ディレクトリーに保存されているオブジェクトタイプ (ユーザー、マシン、ネットワークデバイス、顧客データ、またはその他のアセット) をターゲットにすることができます。
注記
Auto Membership プラグインは、定義された基準に基づいて既存のグループに新しいエントリーを追加します。新しいエントリー用のグループは作成されません。
特定タイプの新規エントリーの作成時に対応するグループエントリーを作成するには、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 ルールの基本設定です。必要な情報をすべて識別し、一致するメンバーエントリーとそのメンバーの所属先のグループを特定します。
たとえば、以下の定義は、すべての Windows ユーザーを 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 Reference 』の cn=Auto Membership Plugin,cn=plugins,cn=config エントリーの説明を参照してください。
8.1.5.1.2. 追加の正規表現エントリー
ユーザーグループのように、一致するすべてのエントリーをメンバーとして追加する必要がある場合は、単純な定義で十分です。ただし、他の属性の値によっては、LDAP 検索フィルターに一致するエントリーを異なるグループに追加する必要がある場合があります。たとえば、IP アドレスや物理的な場所に応じて、異なるグループにマシンを追加しないといけない場合があります。ユーザーは、従業員 ID 番号に応じて異なるグループに置かなければならない場合があります。
automember 定義では、正規表現を使用して、グループから含めたり、除外したりするエントリーに追加の条件を提供したり、選択したエントリーを追加する新しい特定のグループを作成したりできます。
たとえば、automember 定義は、汎用ホストグループに追加されるすべてのマシンを設定します。

例8.2 ホストグループの 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.3 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.3 正規表現の条件属性

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

8.1.5.2. Automembership ルールの例

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

例8.4 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.5 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.6 従業員タイプによるユーザーグループ

Auto Membership プラグインはカスタム属性で機能します。これは、他のアプリケーションが管理するエントリーに役立ちます。たとえば、人的リソースアプリケーションは、カスタムの employeeType 属性で従業員タイプをもとにユーザーを作成してから参照できます。
例8.4「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.3. Automembership 定義の作成

  1. 必要に応じて、Auto Membership プラグインを有効にします。ldapmodify の使用:
    dn: cn=Auto Membership Plugin,cn=plugins,cn=config
    changetype: replace
    replace: nsslapd-pluginEnabled
    nsslapd-pluginEnabled: on
  2. cn=Auto Membership Plugin,cn=plugins,cn=config コンテナーエントリーの下に、新しいプラグインインスタンスを作成します。このエントリーは、autoMember Definition オブジェクトクラスに属している必要があります。ldapmodify の使用:
    dn: cn=Example Automember Definition,cn=Auto Membership Plugin,cn=plugins,cn=config
    objectclass: autoMemberDefinition
    ...
  3. 定義のスコープおよびフィルターを設定します。これは、一致するエントリーの初期検索に使用されます。
    たとえば、ou=People サブツリーに追加され、ntUser 属性が含まれる新しいエントリーの場合:
    autoMemberScope: ou=People,dc=example,dc=com
    autoMemberFilter: objectclass=ntUser
  4. (デフォルトまたはフォールバックグループとして)一致するエントリーを追加するグループと、そのグループタイプのメンバーエントリーの形式を設定します。
    autoMemberDefaultGroup: cn=windows-group,cn=groups,dc=example,dc=com
    autoMemberGroupingAttr: member:dn
  5. オプション。包含または排他的な正規表現フィルターを作成し、これらのフィルターに一致するエントリーに使用するグループを設定します。
    正規表現条件の属性は、表8.3「正規表現の条件属性」 に記載されています。
    正規表現の条件は、automember 定義の子として追加されます。これらの条件は autoMemberRegexRule オブジェクトクラスに属している必要があります。
    ldapmodify の使用:
    dn: cn=Example Regex,cn=Example Automember Definition,cn=Auto Membership Plugin,cn=plugins,cn=config
    objectclass: autoMemberRegexRule
    ...
    次に、ターゲットグループ名と包含的または排他的な正規表現を追加します。include および exclude 条件の両方を使用でき、両方のタイプの式を複数使用できます。
    autoMemberTargetGroup: cn=windows-admin-group,cn=groups,dc=example,dc=com
    ​autoMemberInclusiveRegex: cn=\.* Administrator \*
    新規エントリーが正規表現条件と一致する場合は、automember 定義に設定されたデフォルトグループ の代わりに、そのグループに追加されます。
  6. Directory Server が動的プラグインを有効にするために設定されていない場合は、サーバーを再起動して変更した新しいプラグインインスタンスを読み込みます。

8.1.5.4. 自動メンバー定義の既存のエントリーの更新

Auto Member プラグインは、新規エントリーがディレクトリーに追加される場合にのみ実行されます。プラグインは、automembership ルールに一致するように編集される既存のエントリーまたはエントリーを無視します。
自動メンバールールに対して既存のエントリーをチェックし、それに応じてグループメンバーシップを更新するために実行できるディレクトリータスク操作があります。このタスク(cn=automember rebuild membership)では、LDAP 検索パラメーターに基づいて、処理する既存のエントリーを特定するには、3 つの要素を実行する必要があります。
  • 検索フィルター
  • 検索範囲
  • 検索を開始するベース DN
特定のタスク実行にも名前が必要です。
タスクエントリーは ldapmodify を使用して作成できます。タスクが完了すると、エントリーが自動的に削除されます。以下に例を示します。
dn: cn=my rebuild task, cn=automember rebuild membership,cn=tasks,cn=config
objectClass: top
objectClass: extensibleObject
cn: my rebuild task
basedn: dc=example,dc=com
filter: (uid=*)
scope: sub

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

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

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

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

このタスクには、cn=automember rebuild membership タスク (検索、検索フィルター、および検索スコープのベース DN) と同じ情報が必要です。また、推奨されるエントリーの更新を記録するエクスポート LDIF ファイルを指定する追加パラメーターがあります。
ldapmodify の使用:
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 を使用するには、以下を実行します。
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