Authentification d'Apache HTTPd sur plusieurs serveurs LDAP avec des comptes expirés

8

Nous utilisons mod_authnz_ldap et mod_authn_alias dans Apache 2.2.9 (tel que fourni dans Debian 5.0, 2.2.9-10 + lenny7) pour s'authentifier auprès de plusieurs domaines Active Directory pour l'hébergement d'un référentiel Subversion. Notre configuration actuelle est:

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

Nous rencontrons des problèmes avec les utilisateurs qui ont des comptes à la fois en Alpha et en Bêta, en particulier lorsque leurs comptes en Alpha sont expirés (mais toujours présents; la politique de l'entreprise est que les comptes perdurent pendant au moins 1 an). Par exemple, lorsque l'utilisateur x (qui a un compte expiré en Alpha et un compte valide en Bêta), le journal des erreurs Apache signale ce qui suit:

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

Toute tentative d'authentification en tant qu'utilisateur inexistant (nobodycool) entraîne le comportement correct de l'interrogation des deux serveurs 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/

Comment configurer Apache pour interroger correctement la version bêta si elle rencontre un compte expiré dans Alpha?

Brian Bassett
la source

Réponses:

4

La AuthzLDAPAuthoritative offdirective laissera l'authentification passer au module suivant uniquement si l'utilisateur ne peut pas être mis en correspondance avec un DN dans la requête. Actuellement, même si l'utilisateur est expiré, il semble que son compte sera toujours retourné en conséquence lorsque la requête LDAP sera effectuée.

Je ne connais pas suffisamment le schéma LDAP ActiveDirectory pour donner une réponse définitive ici, mais si vous pouviez ajouter un filtre à votre AuthLDAPURLdirective qui filtre les comptes expirés, le nom d'utilisateur ne devrait correspondre à aucun DN dans la requête. Cela devrait entraîner l'authentification par le module suivant.

Kamil Kisiel
la source
1
L'ajout d'un filtre a fonctionné. L'informatique a eu la gentillesse de placer une chaîne cohérente dans le champ de description des utilisateurs qui ont été déplacés d'Alpha vers Beta (c'est pourquoi les comptes ont expiré). L'URL suivante fonctionne correctement: AuthLDAPURL ldap: //dc01.alpha: 3268 /? SAMAccountName? Sub? (& (ObjectClass = user) (! (Description = * move-to-Beta *)))
Brian Bassett