Я настраиваю 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 ИЛИ Группа_B. Но если пользователь является членом ОБЕ групп, оценивается только первое исходное правило, поэтому применяется только первый 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 и назначьте ему исходное правило и ACL; но эта установка растет экспоненциально с более чем двумя или тремя наборами адресатов.
Есть ли способ справиться с этим лучше?
Решено ... частично. Я полностью упустил из виду тот факт, что вы можете добавить другой условие для запроса LDAP ... так что довольно легко проверить членство более чем в одной группе.
Некоторые предостережения:
ldapbinddn
(который определяет имя пользователя для подключения к AD, и здесь вы должны использовать DN объекта пользователя, а не простое имя пользователя!) и ldapbindpass
, который определяет пароль пользователя.… Но, по крайней мере, фактические группы в AD можно свести к минимуму.