6.9.7. LDAP での承認とグループローディング


LDAP ディレクトリーには、ユーザーアカウントおよびグループのエントリーが含まれ、属性によって参照されます。LDAP サーバーの設定によっては、ユーザーエンティティーは、ユーザーが memberOf 属性を介して所属するグループをマッピングでき、グループエンティティーは uniqueMember 属性を介して所属するユーザーをマッピングできます。または、両方のマッピングは LDAP サーバーで維持できます。
通常、ユーザーは簡単なユーザー名を使用してサーバーに対して認証を行います。グループメンバーシップ情報を検索する場合、使用中のディレクトリーサーバーによっては、この単純名またはディレクトリー内のユーザーのエントリーの識別名を使用して検索を実行できます。
サーバーに接続するユーザーの認証手順が常に最初に行われます。ユーザーの認証に成功すると、サーバーはユーザーのグループを読み込みます。認証のステップと承認の手順では、それぞれ LDAP サーバーへの接続が必要です。レルムは、グループの読み込みステップの認証接続を再利用してこのプロセスを最適化します。以下の設定手順のように、承認セクションでルールを定義して、ユーザーの簡単なユーザー名を識別名に変換できます。認証時の「ユーザー名から識別名へのマッピング」検索の結果はキャッシュされ、force 属性が "false" に設定されている場合の承認クエリー時に再利用されます。force が true の場合、承認中に検索が再度実行されます(グループのロード中)。これは通常、異なるサーバーが認証および承認を実行すると実行されます。
<authorization>
    <ldap connection="...">
    	<!-- OPTIONAL -->
       <username-to-dn force="true"> 
           <!-- Only one of the following. -->
           <username-is-dn />
           <username-filter base-dn="..." recursive="..." user-dn-attribute="..." attribute="..." />
           <advanced-filter base-dn="..." recursive="..." user-dn-attribute="..." filter="..." />
        </username-to-dn>
        
       <group-search group-name="..." iterative="..." group-dn-attribute="..." group-name-attribute="..." >
           <!-- One of the following -->
           <group-to-principal base-dn="..." recursive="..." search-by="...">
               <membership-filter principal-attribute="..." />
           </group-to-principal>
           <principal-to-group group-attribute="..." />
       </group-search>
    </ldap>
</authorization>
Copy to Clipboard Toggle word wrap
重要
これらの例では、デフォルト値で一部の属性を指定します。これはデモ用に行われます。デフォルト値を指定する属性は、サーバーによって永続化される時に設定から削除されます。例外は force 属性です。これは、デフォルト値の false に設定されていても必要になります。

username-to-dn

username-to-dn 要素は、ユーザー名を LDAP ディレクトリー内のエントリーの識別名にマップする方法を指定します。この要素は、どちら も true の場合にのみ必要です。
  • 認証および承認の手順は、異なる LDAP サーバーに対して行われます。
  • グループ検索が識別名を使用する。
1:1 username-to-dn

リモートユーザーが入力するユーザー名がユーザーの識別名であることを指定します。

<username-to-dn force="false">
   <username-is-dn />
</username-to-dn>
Copy to Clipboard Toggle word wrap

これにより 1:1 マッピングが定義され、追加設定はありません。

username-filter

次のオプションは、認証手順の上記で説明した簡単なオプションと非常に似ています。指定された属性で、指定のユーザー名に対して一致するものが検索されます。

<username-to-dn force="true">
    <username-filter base-dn="dc=people,dc=harold,dc=example,dc=com" recursive="false" attribute="sn" user-dn-attribute="dn" />
</username-to-dn>
Copy to Clipboard Toggle word wrap

設定可能な属性は次のとおりです。

  • base-dn: 検索を開始するコンテキストの識別名。
  • recursive: 検索がコンテキストのサブコンテキストを拡張するかどうか。デフォルトは false です。
  • attribute: 入力したユーザー名と照合するユーザーエントリーの属性。デフォルトは uid です。
  • user-dn-attribute: ユーザーの識別名を取得するために読み込む属性です。デフォルトは 5 です。
advanced-filter

詳細フィルターを指定するオプションです。認証セクションでは、カスタムフィルターを使用してユーザーの識別名を見つけられます。

<username-to-dn force="true">
    <advanced-filter base-dn="dc=people,dc=harold,dc=example,dc=com" recursive="false" filter="sAMAccountName={0}" user-dn-attribute="dn" />
</username-to-dn>
Copy to Clipboard Toggle word wrap

username-filter の例と同じ属性は、意味とデフォルト値も同じです。新たな属性があります。

  • filter: ユーザーのエントリーの検索に使用するカスタムフィルター。ユーザー名は {0} の場所に置き換え られます。
重要

フィルターの定義後も XML が有効である必要があるため、& などの特殊文字を使用する場合には、適切な形式が使用されるようにします。たとえば、&amp; 文字の & です。

グループ検索

グループメンバーシップ情報の検索時に使用できるスタイルは 2 つあります。最初のスタイルは、ユーザーのエントリーに、ユーザーがメンバーであるグループを参照する属性が含まれる場所です。2 つ目のスタイルは、グループにユーザーエントリーを参照する属性が含まれる場所です。

使用するスタイルを選択する場合、Red Hat では、グループを参照するユーザーエントリーの設定を使用することを推奨します。これは、検索を実行せずに既知の識別名の属性を読み取ることで、グループ情報をロードできるからです。他のアプローチでは、ユーザーを参照するグループを特定するための大規模な検索が必要です。

設定を記述する前に、LDIF の例を見てみましょう。

例6.1 LDIF の例: プリンシパルからグループ

この例では、GroupOne に所属するユーザー TestUserOne があり、 GroupOne GroupFive のメンバーになります。グループメンバーシップは、ユーザー(またはグループ)がメンバーであるグループの識別名に設定された memberOf 属性を使用すると表示されます。

ここには示されていませんが、ユーザーが直接メンバーであるグループごとに 1 つずつ、複数の memberOf 属性を設定することは可能です。

dn: uid=TestUserOne,ou=users,dc=principal-to-group,dc=example,dc=org
objectClass: extensibleObject
objectClass: top
objectClass: groupMember
objectClass: inetOrgPerson
objectClass: uidObject
objectClass: person
objectClass: organizationalPerson
cn: Test User One
sn: Test User One
uid: TestUserOne
distinguishedName: uid=TestUserOne,ou=users,dc=principal-to-group,dc=example,dc=org
memberOf: uid=GroupOne,ou=groups,dc=principal-to-group,dc=example,dc=org
memberOf: uid=Slashy/Group,ou=groups,dc=principal-to-group,dc=example,dc=org
userPassword:: e1NTSEF9WFpURzhLVjc4WVZBQUJNbEI3Ym96UVAva0RTNlFNWUpLOTdTMUE9PQ==

dn: uid=GroupOne,ou=groups,dc=principal-to-group,dc=example,dc=org
objectClass: extensibleObject
objectClass: top
objectClass: groupMember
objectClass: group
objectClass: uidObject
uid: GroupOne
distinguishedName: uid=GroupOne,ou=groups,dc=principal-to-group,dc=example,dc=org
memberOf: uid=GroupFive,ou=subgroups,ou=groups,dc=principal-to-group,dc=example,dc=org

dn: uid=GroupFive,ou=subgroups,ou=groups,dc=principal-to-group,dc=example,dc=org
objectClass: extensibleObject
objectClass: top
objectClass: groupMember
objectClass: group
objectClass: uidObject
uid: GroupFive
distinguishedName: uid=GroupFive,ou=subgroups,ou=groups,dc=principal-to-group,dc=example,dc=org
Copy to Clipboard Toggle word wrap

例6.2 LDIF の例: グループからプリンシパル

この例では、GroupOne のメンバーである同じユーザー TestUserOne を示しています。これは GroupFive のメンバーですが、この例ではグループから相互参照に使用されるユーザーに uniqueMember 属性になります。

ここでも、グループメンバーシップの相互参照に使用される属性は繰り返すことができます。GroupFive を確認すると、ここに表示されない別のユーザー TestUserFive への参照もあります。

dn: uid=TestUserOne,ou=users,dc=group-to-principal,dc=example,dc=org
objectClass: top
objectClass: inetOrgPerson
objectClass: uidObject
objectClass: person
objectClass: organizationalPerson
cn: Test User One
sn: Test User One
uid: TestUserOne
userPassword:: e1NTSEF9SjR0OTRDR1ltaHc1VVZQOEJvbXhUYjl1dkFVd1lQTmRLSEdzaWc9PQ==

dn: uid=GroupOne,ou=groups,dc=group-to-principal,dc=example,dc=org
objectClass: top
objectClass: groupOfUniqueNames
objectClass: uidObject
cn: Group One
uid: GroupOne
uniqueMember: uid=TestUserOne,ou=users,dc=group-to-principal,dc=example,dc=org

dn: uid=GroupFive,ou=subgroups,ou=groups,dc=group-to-principal,dc=example,dc=org
objectClass: top
objectClass: groupOfUniqueNames
objectClass: uidObject
cn: Group Five
uid: GroupFive
uniqueMember: uid=TestUserFive,ou=users,dc=group-to-principal,dc=example,dc=org
uniqueMember: uid=GroupOne,ou=groups,dc=group-to-principal,dc=example,dc=org
Copy to Clipboard Toggle word wrap

一般的なグループ検索

前述の 2 つの方法の例を確認する前に、両方の方法に共通する属性を定義する必要があります。

<group-search group-name="..." iterative="..." group-dn-attribute="..." group-name-attribute="..." >
    ...
</group-search>
Copy to Clipboard Toggle word wrap
  • group-name: この属性は、ユーザーがメンバーであるグループの一覧として返されるグループ名に使用するフォームを指定するために使用されます。これは、グループ名の単純な形式か、グループの識別名のいずれかになります。識別名が必要な場合は、この属性を DISTINGUISHED_NAME に設定できます。デフォルトは SIMPLE です。
  • iterative: この属性は、ユーザーが所属するグループを特定した後に、グループをもとに繰り返し検索を行い、グループに所属するグループを特定します。反復検索が有効な場合は、他のグループやサイクルが検出されると、メンバーではないグループに到達するまで継続されます。デフォルトは false です。

同時グループメンバーシップは問題ではありません。各検索の記録は、すでに検索されているグループが再度検索されないように保持されます。

重要

繰り返し検索を行うには、グループエントリーがユーザーエントリーと同じものを見える必要があります。ユーザーがメンバーとなっているグループを識別するのに使用するのと同じアプローチを使用して、グループがメンバーとなっているグループを特定します。これは、グループのグループメンバーシップが相互参照に使用される属性の名前が変更されたり、参照の方向が変更された場合に実行できません。

  • group-dn-attribute: 属性が識別名であるグループのエントリー。デフォルトは 5 です。
  • group-name-attribute: 属性が簡単な名前であるグループのエントリー。デフォルトは uid です。

例6.3 プリンシパルからグループへの設定例

上からの LDIF の例を基に、ユーザーのグループを繰り返しロードする設定の例は次のとおりです。相互参照に使用される属性はユーザーの memberOf 属性です。

<authorization>
    <ldap connection="LocalLdap">
        <username-to-dn>
            <username-filter base-dn="ou=users,dc=principal-to-group,dc=example,dc=org" recursive="false" attribute="uid" user-dn-attribute="dn" />
        </username-to-dn>
        <group-search group-name="SIMPLE" iterative="true" group-dn-attribute="dn" group-name-attribute="uid">
            <principal-to-group group-attribute="memberOf" />
        </group-search>
    </ldap>
</authorization>
Copy to Clipboard Toggle word wrap

この設定で最も重要なことは、principal-to-group 要素が単一の属性で追加されていることです。

  • group-attribute: ユーザーがメンバーであるグループの識別名と一致するユーザーエントリーの属性名。デフォルトは memberOf です。

例6.4 グループからプリンシパルへの設定例

この例は、前述のグループからプリンシパルへの LDIF の例に対する繰り返し検索を示しています。

<authorization>
      <ldap connection="LocalLdap">
          <username-to-dn>
              <username-filter base-dn="ou=users,dc=group-to-principal,dc=example,dc=org" recursive="false" attribute="uid" user-dn-attribute="dn" />
          </username-to-dn>
          <group-search group-name="SIMPLE" iterative="true" group-dn-attribute="dn" group-name-attribute="uid">
              <group-to-principal base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org" recursive="true" search-by="DISTINGUISHED_NAME">
                  <membership-filter principal-attribute="uniqueMember" />
              </group-to-principal>
          </group-search>
      </ldap>
  </authorization>
Copy to Clipboard Toggle word wrap

ここでは、要素 group-to-principal が追加されます。この要素は、ユーザーエントリーを参照するグループの検索方法を定義するために使用されます。以下の属性が設定されます。

  • base-dn: 検索を開始するために使用するコンテキストの識別名。
  • recursive: サブコンテキストも検索されるかどうか。デフォルトは false です。
  • search-by: 検索で使用するロール名の形式。有効な値は SIMPLE および DISTINGUISHED_NAME です。デフォルトは DISTINGUISHED_NAME です。

group-to-principal 要素には、相互参照を定義する membership-filter 要素があります。

  • principal-attribute: ユーザーエントリーを参照するグループエントリーの属性の名前。デフォルトは member です。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る