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というユーザーのデータが必要です。
フィルタを次のように変更してみました。
無駄に。
上記の出力からわかるように、testuserはグループに属しています
フィルタ '(&(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つの選択肢があります:
残念ながら違います。 LDAPオブジェクトの一般名はグローバルに一意ではありません。親OUに対してのみ一意です。したがって、グループのCNに基づいて、ユーザーがグループのメンバーであるかどうかを尋ねることができれば、複数の結果が得られる可能性があります。
このため、ユーザーオブジェクトのmemberOf属性はDN(識別名、または完全なX.500パス)のリストです。