ldapquery 為屬於名為 X 的組的使用者的 Active Directory 伺服器
當我在 CentOS 6.4 的 bash 提示符下執行此操作時
ldapsearch -LLL -H ldap://adserver.example.com -x -D someuser@example.com -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
我只想在 testuser 屬於名為 X 的組時得到響應,而不管組 X 在 AD 層次結構中的位置。例如:我想要一個名為 testuser 的使用者的數據,該使用者是名為 Group1 的組的成員。
我嘗試將過濾器更改為:
- (&(objectClass=person)(sAMAccountName=testuser)(memberOf=CN=Group1*))
- (&(objectClass=person)(sAMAccountName=testuser)(memberOf=Group1))
無濟於事。
從上面的輸出可以看出,testuser 屬於組
- CN=Group1,OU=Area,OU=Users,DC=example,DC=com
- 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 someuser@example.com -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 allow ADGroup_Group1;” 將按預期工作,但“http_access deny ADGroup_Group2;” 不起作用,因為 Group1 和 Group2 的父 OU 不同。
所以我有3個選擇:
- 查找適用於任何組名的過濾器,無論路徑如何(這個問題)
- 將(可能)所有AD 組移動到同一個 OU(呃……將對象移動到不同的 OU 將給我帶來更多的工作,因為我必須重新調整 GPO - 或者至少檢查已經定義的 GPO 是否有任何更改這個國王搬家可以帶)
- 為每個帶有組的 OU 定義(可能)一個 external_acl_type。(在這種情況下,我將有 N 個外部程序來檢查 LDAP 過濾器中的路徑更改)
不幸的是沒有。LDAP 對象的通用名稱不是全域唯一的;它僅相對於其父 OU 是唯一的。因此,如果您可以根據組的 CN 詢問使用者是否是組的成員,您可能會得到多個結果。
正是由於這個原因,使用者對象的 memberOf 屬性是一個 DN 列表(可分辨名稱,或完整的 X.500 路徑)。