web-dev-qa-db-ja.com

ldapqueryXという名前のグループに属するユーザー用のActiveDirectoryサーバー

CentOS6.4のbashプロンプトでこれを行うと

ldapsearch -LLL -H ldap://adserver.example.com -x -D [email protected] -w somepass -b 'OU=Users,DC=example,DC=com' '(&(objectClass=person)(sAMAccountName=testuser))'

私は得る

dn: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com
...
objectClass: person
...
cn: TestUser Surname
sn: Surname
...
distinguishedName: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com
...
memberOf: CN=Group1,OU=Area,OU=Users,DC=example,DC=com
memberOf: CN=Gropu2,OU=Users,DC=example,DC=com
...
sAMAccountName: testuser

グループXがAD階層のどこにあるかに関係なく、testuserがXという名前のグループに属している場合にのみ応答を取得したい。たとえば、Group1という名前のグループのメンバーであるtestuserというユーザーのデータが必要です。

フィルタを次のように変更してみました。

  1. (&(objectClass = person)(sAMAccountName = testuser)(memberOf = CN = Group1 *))
  2. (&(objectClass = person)(sAMAccountName = testuser)(memberOf = * Group1 *))

無駄に。

上記の出力からわかるように、testuserはグループに属しています

  1. CN = Group1、OU = Area、OU = Users、DC = example、DC = com
  2. CN = Gropu2、OU = Users、DC = example、DC = com。

フィルタ '(&(objectClass = person)(sAMAccountName = testuser)(memberOf = CN = Group1、OU = Area、OU = Users、DC = example、DC = com))'を使用すると機能しますが、グループ名のみでクエリを実行します(完全な「パス」は使用しません)。

それを行う方法はありますか?

Active Directoryで定義されたグループをSquid(Linuxプロキシ)ACLとして使用する必要があるため、これを実行しようとしています。そのためには、次のような外部ACLタイプを定義する必要があります。

external_acl_type ADGroup %LOGIN /usr/lib64/squid/squid_ldap_group -R -b "OU=Users,DC=example,DC=com" -D [email protected] -w somepass -f "(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,OU=Users,DC=example,DC=com))" -h adserver.example.com

タイプを使用して、このようなACLを定義します

acl ADGroup_Group1 external ADGroup Group1
acl ADGroup_Group2 external ADGroup Group2
...
http_access allow ADGroup_Group1;
http_access deny ADGroup_Group2;

Squidがこの「許可」をチェックしているとき、%uをユーザーログイン名に、%gをACL(Group1、Group2)で定義されたグループ名に置き換えてから、上記のLDAPクエリを実行します。

上記からわかるように、「http_access allowADGroup_Group1;」意図したとおりに機能しますが、「http_access denyADGroup_Group2;」 Group1とGroup2の親OUが異なるため、機能しません。

だから私は3つの選択肢があります:

  1. パスに関係なく、任意のグループ名で機能するフィルターを見つける(この質問)
  2. (潜在的に)[〜#〜] all [〜#〜]ADグループを同じOUに移動します(うーん..オブジェクトを別のOUに移動するには、GPOを再調整する必要があるため、さらに多くの作業が必要になります。または、少なくとも、このキングの移動によってもたらされる変更について、定義済みのGPOを確認する必要があります)
  3. グループを持つすべてのOUに対して(潜在的に)external_acl_typeを定義します。 (この場合、LDAPフィルターのパスの変更を確認するためだけにN個の外部プロセスがあります)

残念ながら違います。 LDAPオブジェクトの一般名はグローバルに一意ではありません。親OUに対してのみ一意です。したがって、グループのCNに基づいて、ユーザーがグループのメンバーであるかどうかを尋ねることができれば、複数の結果が得られる可能性があります。

このため、ユーザーオブジェクトのmemberOf属性はDN(識別名、または完全なX.500パス)のリストです。

5
Simon Catlin