Apache2 basic authentication over LDAP

Pour plusieurs raisons il peut arriver que vous ayez envie d’empêcher l’accès à certaines ressources : un serveur de partage de fichiers, un serveur d’administration ou plus simplement une page web.

Sous Apache2 et Nginx il est possible de restreindre l’accès à certaines pages via une authentification basique :

ldap31.png

Pour ce qui est du moyen d’authentification, vous pouvez soit utiliser un identifiant et un mot de passe qui sera commun à plusieurs utilisateurs ou vous basez sur un annuaire LDAP. Dans le second cas, on pourra par exemple créer un groupe dans lequel seront listés les utilisateurs qui pourront accéder à cette page. Et ça tombe bien puisque c’est exactement ce que nous allons faire tout au long de cet article.

Avant de toucher à la configuration de notre Virtual Host sous Apache2 nous allons devoir créer la structure de notre annuaire (les OU, les groupes ainsi que le ou les utilisateurs). Tout ça je l’ai déjà traité dans un précédent article, je vous invite donc à le parcourir  !

Pour lier notre serveur Apache2 à notre LDAP il va falloir activer plusieurs modules via la commande suivante :

a2enmod ldap auth_basic auth_ldap authz_user

Puis nous allons devoir ajouter ce bloc de directives dans la configuration de notre Virtual Host :

 <Directory "/var/www/html/admin">
    # Authentification basique
    AuthType Basic
    # Ajout d'un message de dissuasion
    AuthName "Seuls les admins apache peuvent acceder à cette page !"
    # DN du compte LDAP utilisé pour se binder au serveur 
    # Ici j'ai mis les creds du compte de l'admin de l'annuaire
    # Dans la pratique ne faites jamais ça ... x)
    AuthLDAPBindDN "cn=admin,dc=whiteflag,dc=fr"
    AuthLDAPBindPassword "VMDEFTE"
    # On indique que l'authentification se fait via LDAP
    AuthBasicProvider ldap
    # On indique l'URL (ou l'IP) de l'annuaire
    AuthLDAPURL ldap://ldap.whiteflag.fr/ou=utilisateurs,dc=whiteflag,dc=fr?uid
    # Spécifie quel attribut du groupe doit être utilisé pour l'authent
    AuthLDAPGroupAttribute memberUid
    # On requiert que le compte fasse partie du groupe apacheAdmin
    Require ldap-group cn=apacheAdmin,ou=utilisateurs,dc=whiteflag,dc=fr
</Directory>

Ainsi seuls les utilisateurs disposant d’un compte LDAP faisant parti du groupe « apacheAdmin » pourront accéder à cette section restreinte. Il ne nous reste plus qu’à redémarrer le serveur apache2 via cette commande :

sudo systemctl restart apache2

Et, si tout s’est bien déroulé, en arrivant sur la page d’administration on devrait avoir une authentification qui pop. Remplissez là à l’aide de l’identifiant « Defte » ainsi que le mot de passe que vous avez fourni lors de l’utilisateur du binaire ldappasswd et :

ldap32.png

Voilà, nous avons accès à la partie administration !