Mar 12 2007

Authentification Apache avec Active Directory

Publié par à 12:00 sous Apache,ldap




Une installation typique dans une société comprend des clients Windows s’authentifiant sur un serveur Windows 2000 ou 2003 dont le coeur est Active Directory. Beaucoup ont aussi un serveur Apache sur lequel ils hébergent leur Intranet ou toute autre information critique. En parlant d’information critique, il y a de bonnes chances que l’access y soit restreint à certains groupes de personnes au sein de cette même société. On nous a demandé d’installer un wiki pour notre équipe pour bâtir une base de connaissance, qui contiendra probablement des informations sensibles sur la companie. Nous avons pensé que l’authentification avec Active Directory était une solution qui convenait tout-à-fait pour ce cas précis

  • C’est rapide à implementer
  • Personne n’aime avoir plusieurs comptes différents. C’est très humain d’oublier les noms d’utilisateur et les mots de passe
  • Il n’y a pas besoin de recréer chaque compte
  • Tout est centralisé. Si un compte est désactivé sur le domaine, l’accès au serveur web lui sera interdit aussi
  • Les groupes créés dans Active Directory peuvent être réutilisés

Même si, je ne suis pas un pro-Microsoft, ces quelques bonnes raisons suffisent pour faire le pas! Certains pourraient avoir envie d’utiliser le protocole Radius pour l’authentification dans Apache. Regardez ceci: http://www.freeradius.org/mod_auth_radius/
 

Lien avec Active Directory

Active Directory n’est autre qu’un serveur LDAP (Lightweight Directory Access Protocol), signifiant que l’on peut exécuter des requêtes pour rapatrier des informations sur les ordinateurs et les utilisateurs du domaine. Vous pouvez utiliser le client ldapsearch pour parcourir sa structure. Quoiqu’il en soit, vous devez créer un utilisateur spécial pour avoir un lien au controlleur de domaine afin d’obtenir des détails sur les utilisateurs.

  • Connectez-vous au controlleur de domaine et créez un nouvel utilisateur dans « Active Directory Users and Computers ».
  • Décochez « User must change password at next logon » et ne créez pas une boîte-aux-lettres Exchange.
  • Le nom d’utilisateur et le mot de passe seront nécessaires pour lier le serveur Apache au controlleur de domain.

La prochaine étape est de récupérer votre nom de domaine LDAP. Nous assumerons que c’est ‘location.company.com’. Si vous ne le connaissez pas, soit demandez à votre administrateur système ou exécuter la procédure suivante.
 
Exécutez ldp.exe sur le controlleur de domaine. Cliquez sur ‘Connection’ -> ‘Connect’ depuis le menu et laisser ‘localhost’ dans le champ en bas. Cliquez alors sur ‘Connection’ -> ‘Bind’ depuis le menu et entrez les détails de l’utilisateur que vous avez créé précédemment. Allez maintenant sur ‘Browse’ -> ‘Search’ et pressez ‘enter’. Ceci va retourner une liste de tous lesl objets présents dans le répertoire. C’est un peu austère mais vous pouvez trouver facilement les lignes correspondant aux utilisateurs de votre système. Une entrée devrait ressembler à ceci:

Dn: CN=John Doe,CN=Users,DC=location,DC=company,DC=com
objectClass: top; person; organizationalPerson; user;
cn: John Doe;
description: John Doe;

Nous venons de trouver notre information précédente location.company.com. Nous allons l’utiliser pour configurer le module Apache.
 

Configuration Apache

Nous utilisons Apache 2.2.2 mais la procédure est similaire avec les autres versions. Vérifiez que les modules mod_auth_ldap ou mod_authz_ldap sont présentes dans httpd.conf – dans la section load modules. La configuration des modules peut être ajoutée dans httpd.conf mais c’est toujours une bonne idée de la garder séparée dans un fichier externe. Apache sur Redhat conserve la configuration des modules dans /etc/httpd/conf.d/. J’ai ajouté les lignes suivantes dans authz_ldap.conf:
 

<Location /protected>
Order deny,allow
Allow from all
AuthBasicProvider ldap
AuthzLDAPAuthoritative Off
AuthLDAPURL
ldap://your-domain-controller:389/CN=Users,DC=location,DC=company,DC=com?sAMAccountName?sub?(objectClass=user)
# Ou éventuellement avec un filtre sur un groupe
# ldap://your-domain-controller:389/CN=Users,DC=location,DC=company,DC=com?sAMAccountName?
# sub?(memberOf=CN=MyGroup,CN=Users,DC=location,DC=company,DC=com)
AuthLDAPBindDN cn=myusername,cn=Users,dc=location,dc=company,dc=com
AuthLDAPBindPassword mypassword
AuthType Basic
AuthName "Protected"
require valid-user
</Location>

 
myusername et mypassword étant l’utilisateur et le mot de passe créés précédemment pour lier Active directory.
Redémarrez Apache, et c’est fait! Une fenêtre demandant un nom d’utilisateur et un mot de passe permet l’accès à un répertoire "protected;".
 

Notes

Vous ne devez pas entrer le nom de domaine devant le nom d’utilisateur comme pour Windows (\\DOMAINNAME\user), Ceci donnera un message « wrong credential » dans les logs Apache signifiant que le mot de passe ou le nom d’utilisateur est faux.
 
Il est possible de revenir vers d’autres méthodes d’authentification. Ajoutez simplement le mot-clé AuthLDAPAuthoritative suivi de AuthUserFile /var/www/html/Protected/htpasswd par exemple si votre fichier .htaccess est situé là. Vous pouvez créer un utilisateur extra s’il n’existe pas dans Active directory par ce moyen.

La directive <Location /protected> est récursive signifiant que toutes les pages de ses sous-répertoires sont aussi protégées. Si vous voulez donner un accès publique au sous-répertoire /pub, vous pouvez utiliser le set d’instructions suivantes:

<Location "/pub">
    Order allow,deny
    Allow from any
    Satisfy any
</LocationMatch>

One response so far

Une Réponse à “Authentification Apache avec Active Directory”

  1. www.sharkandfox.comon 04 Fév 2013 at 9:03

    Bel artiсle, comme pour le reste du sіte d’ailleurs. Je partage.

Comments RSS

Leave a Reply