Autenticación de Apache HTTPd contra múltiples servidores LDAP con cuentas caducadas

8

Estamos usando mod_authnz_ldap y mod_authn_alias en Apache 2.2.9 (como se incluye en Debian 5.0, 2.2.9-10 + lenny7) para autenticar contra múltiples dominios de Active Directory para alojar un repositorio de Subversion. Nuestra configuración actual es:

# 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>

Estamos encontrando problemas con los usuarios que tienen cuentas en Alpha y Beta, especialmente cuando sus cuentas en Alpha han caducado (pero aún están presentes; la política de la compañía es que las cuentas permanecen vigentes por un mínimo de 1 año). Por ejemplo, cuando el usuario x (que tiene una cuenta vencida en Alpha y una cuenta válida en Beta), el registro de errores de Apache informa lo siguiente:

[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/

Intentar autenticarse como un usuario no existente (nobodycool) da como resultado el comportamiento correcto de consultar ambos servidores 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/

¿Cómo configuro Apache para consultar correctamente Beta si encuentra una cuenta caducada en Alpha?

Brian Bassett
fuente

Respuestas:

4

La AuthzLDAPAuthoritative offdirectiva permitirá que la autenticación pase al siguiente módulo solo si el usuario no puede coincidir con un DN en la consulta. Actualmente, aunque el usuario haya expirado, parece que su cuenta se devolverá como resultado cuando se realice la consulta LDAP.

No sé lo suficiente sobre el esquema LDAP de ActiveDirectory para dar una respuesta definitiva aquí, pero si pudiera agregar un filtro a su AuthLDAPURLdirectiva que filtre las cuentas vencidas, debería dar como resultado que el nombre de usuario no coincida con ningún DN en la consulta. Esto debería resultar en que la autenticación caiga al siguiente módulo.

Kamil Kisiel
fuente
1
Agregar un filtro funcionó. Fue lo suficientemente amable como para colocar una cadena consistente en el campo de descripción de aquellos usuarios que se movieron de Alfa a Beta (es por eso que las cuentas caducaron). La siguiente URL funciona correctamente: AuthLDAPURL ldap: //dc01.alpha: 3268 /? SAMAccountName? Sub? (& (ObjectClass = user) (! (Description = * moved-to-Beta *)))
Brian Bassett