Аутентификация Apache HTTPd на нескольких серверах LDAP с просроченными учетными записями

8

Мы используем mod_authnz_ldap и mod_authn_alias в Apache 2.2.9 (как поставляется в Debian 5.0, 2.2.9-10 + lenny7) для аутентификации на нескольких доменах Active Directory для размещения репозитория Subversion. Наша текущая конфигурация:

# Turn up logging
LogLevel debug

# Define authentication providers
<AuthnProviderAlias ldap alpha>
  AuthLDAPBindDN "CN=Subversion,OU=Service Accounts,O=Alpha"
  AuthLDAPBindPassword [[REDACTED]]
  AuthLDAPURL ldap://dc01.alpha:3268/?sAMAccountName?sub?
</AuthnProviderAlias>

<AuthnProviderAlias ldap beta>
  AuthLDAPBindDN "CN=LDAPAuth,OU=Service Accounts,O=Beta"
  AuthLDAPBindPassword [[REDACTED]]
  AuthLDAPURL ldap://ldap.beta:3268/?sAMAccountName?sub?
</AuthnProviderAlias>

# Subversion Repository
<Location /svn>
  DAV svn
  SVNPath /opt/svn/repo
  AuthName "Subversion"
  AuthType Basic
  AuthBasicProvider alpha beta
  AuthzLDAPAuthoritative off
  AuthzSVNAccessFile /opt/svn/authz
  require valid-user
</Location>

Мы сталкиваемся с проблемами пользователей, у которых есть учетные записи в Alpha и Beta, особенно когда срок их учетных записей в Alpha истек (но все еще присутствует; политика компании заключается в том, что учетные записи живут не менее 1 года). Например, когда пользователь x (у которого истек срок действия учетной записи в Alpha и действительная учетная запись в бета-версии), журнал ошибок Apache сообщает следующее:

[Tue May 11 13:42:07 2010] [debug] mod_authnz_ldap.c(377): [client 10.1.1.104] [14817] auth_ldap authenticate: using URL ldap://dc01.alpha:3268/?sAMAccountName?sub?
[Tue May 11 13:42:08 2010] [warn] [client 10.1.1.104] [14817] auth_ldap authenticate: user x authentication failed; URI /svn/ [ldap_simple_bind_s() to check user credentials failed][Invalid credentials]
[Tue May 11 13:42:08 2010] [error] [client 10.1.1.104] user x: authentication failure for "/svn/": Password Mismatch
[Tue May 11 13:42:08 2010] [debug] mod_deflate.c(615): [client 10.1.1.104] Zlib: Compressed 527 to 359 : URL /svn/

Попытка аутентификации как несуществующего пользователя (nobodycool) приводит к правильному поведению запросов к обоим серверам LDAP:

[Tue May 11 13:42:40 2010] [debug] mod_authnz_ldap.c(377): [client 10.1.1.104] [14815] auth_ldap authenticate: using URL ldap://dc01.alpha:3268/?sAMAccountName?sub?
[Tue May 11 13:42:40 2010] [warn] [client 10.1.1.104] [14815] auth_ldap authenticate: user nobodycool authentication failed; URI /svn/ [User not found][No such object]
[Tue May 11 13:42:40 2010] [debug] mod_authnz_ldap.c(377): [client 10.1.1.104] [14815] auth_ldap authenticate: using URL ldap://ldap.beta:3268/?sAMAccountName?sub?
[Tue May 11 13:42:44 2010] [warn] [client 10.1.1.104] [14815] auth_ldap authenticate: user nobodycool authentication failed; URI /svn/ [User not found][No such object]
[Tue May 11 13:42:44 2010] [error] [client 10.1.1.104] user nobodycool not found: /svn/
[Tue May 11 13:42:44 2010] [debug] mod_deflate.c(615): [client 10.1.1.104] Zlib: Compressed 527 to 359 : URL /svn/

Как мне настроить Apache для правильного запроса бета-версии, если он обнаруживает устаревшую учетную запись в Alpha?

Брайан Бассетт
источник

Ответы:

4

AuthzLDAPAuthoritative offДиректива позволит падение аутентификации через к следующему модулю , только если пользователь не может быть согласован с DN в запросе. В настоящее время, даже если срок действия пользователя истек, похоже, что его учетная запись все равно будет возвращена в результате выполнения запроса LDAP.

Я недостаточно знаю схему LDAP ActiveDirectory, чтобы дать здесь определенный ответ, но если бы вы могли добавить в свою AuthLDAPURLдирективу фильтр, отфильтровывающий просроченные учетные записи, это должно привести к тому, что имя пользователя не будет совпадать ни с одним DN в запросе. Это должно привести к провалу аутентификации к следующему модулю.

Камил Кисиэль
источник
1
Добавление фильтра сработало. Он был достаточно любезен, чтобы поместить согласованную строку в поле описания тех пользователей, которые были перемещены из Альфы в Бета-версию (поэтому учетные записи истекли). Следующий URL работает правильно: AuthLDAPURL ldap: //dc01.alpha: 3268 /? SAMAccountName? Sub? (& (ObjectClass = user) (! (Description = * Move-to-Beta *)))
Брайан Бассетт,