Active-Directory
SquidGuard 和 Active Directory:如何處理多個組?
我正在設置 SquidGuard (1.4) 以針對 Active Directory 域驗證使用者並根據組成員身份應用 ACL;這是我的 squidGuard.conf 的一個例子:
src AD_Group_A { ldapusersearch ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_A%2cdc=domain%2cdc=com)) } src AD_Group_B { ldapusersearch ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_B%2cdc=domain%2cdc=com)) } dest dest_a { domainlist dest_a/domains urllist dest_b/urls log dest_a.log } dest dest_b { domainlist dest_b/domains urllist dest_b/urls log dest_b.log } acl { AD_Group_A { pass dest_a !dest_b all redirect http://some.url } AD_Group_B { pass !dest_a dest_b all redirect http://some.url } default { pass !dest_a !dest_b all redirect http://some.url } }
如果使用者是 Group_A或Group_B 的成員,則一切正常。但如果使用者是BOTH組的成員,則僅評估第一個源規則,因此僅應用第一個 ACL。
我知道這是由於源規則匹配在 SquidGuard 中的工作方式(如果一個規則匹配,則評估停止在那裡,然後應用相關的 ACL);所以我也試過這個:
src AD_Group_A_B { ldapusersearch ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_A%2cdc=domain%2cdc=com)) ldapusersearch ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_B%2cdc=domain%2cdc=com)) } acl { AD_Group_A_B { pass dest_a dest_b all redirect http://some.url } [...] }
但這也不起作用:如果使用者是其中任何一個組的成員,則無論如何都會匹配整個源規則,因此他可以到達兩個目的地(這當然不是我想要的)。
到目前為止,我發現的唯一解決方案是在 AD 中創建一個THIRD組,並為其分配一個源規則和一個 ACL;但是這個設置隨著超過兩個或三個目標集呈指數增長。
有沒有辦法更好地處理這個問題?
解決了……部分。我完全忽略了這樣一個事實,即您可以向 LDAP 查詢添加另一個條件……因此檢查多個組的成員身份非常容易。
一些警告:
- 仍然需要為每個可能的組組合定義 SquidGuard ACL
- 您需要在 SquidGuard 配置中添加至少兩個其他指令:(
ldapbinddn
它定義了用於連接到 AD 的使用者名,並且您必須在此處使用使用者對象的 DN,而不是普通使用者名!)和ldapbindpass
,它定義了使用者的密碼。- SquidGuard 需要在編譯時使用 LDAP 支持,預設情況下不編譯。
…但至少 AD 中的實際組可以保持在最低限度。