Apache .htaccess – Authentification LDAP, pour protéger vos répertoires

I. Présentation

Bonjour à tous, aujourd'hui nous allons voir comment mettre en place un contrôle d'accès .htaccess sur un serveur web en utilisant un service Active Directory (LDAP), en guise de point d'authentification central.

Voici les deux serveurs et leurs configurations système/réseau qui vont me permettre de réaliser ce tutoriel :

  • Serveur Active Directory - Windows Server 2019 : 192.168.145.128/24
  • Serveur WEB - Ubuntu 20.04 : 192.168.145.157/24

Je pars du principe que votre contrôleur de domaine est déjà installé et fonctionnel.

Tutoriel - Création d'un domaine Active Directory

II. Arborescence Active Directory - Windows Server

Voici un aperçu de l'Active Directory que je vais utiliser dans le cadre de ce tutoriel.

Ci-dessus, les utilisateurs présents dans l'OU Info. Eux seuls auront le droit de se connecter, via .htaccess, dans la section "Authentifier les utilisateurs d'une OU spécifique - .htaccess" de cet article.

Utilisateurs présents dans le groupe "myGroupe". Eux seuls auront le droit de se connecter, via .htaccess, dans la section : Authentifier les utilisateurs d'un groupe global spécifique - .htaccess

Note : si vos deux serveurs sont sur le même réseau, vous n'aurez pas besoin de toucher au réglage du pare-feu. Dans le cas contraire, vous allez devoir créer une règle permettant d'autoriser les flux entrants sur le port LDAP 389, ou pour les plus pressés, désactiver votre firewall (NetSh Advfirewall set allprofiles state off). - à ne pas faire en production 🙂

Pour en savoir plus sur la création d'une règle firewall "inbound" via PowerShell, consultez cet article : 

Tutoriel - Gérer le pare-feu en PowerShell

III. Configuration côté serveur WEB (Ubuntu)

Si ce n'est pas déjà fait de votre côté, voici la commande pour installer Apache2 :

apt-get install apache2 

Éditons le fichier de configuration d'apache2, afin d'autoriser les fichiers .htaccess, sur l'ensemble du serveur web (depuis sa racine) :

nano /etc/apache2/apache2.conf 

C
hanger la valeur de None -> All, afin que les fichiers .htaccess/.htpasswd soient pris en compte !

Activation du mode LDAP pour apache2 :

a2enmod authnz_ldap

Redémarrez votre service web avec la commande ci-dessous :

systemctl restart apache2.service

Création d'un dossier test/ à la racine de notre serveur web, afin de procéder aux différents tests :

mkdir /var/www/html/test
chown www-data:www-data /var/www/html/test -R

Création d'un fichier d'exemple et du fichier .htaccess. Nous allons éditer celui-ci par la suite :

cd /var/www/html/test
touch file.txt
touch .htaccess

Ouvrez votre navigateur et saisissez l’adresse IP de votre serveur web Apache. Dans notre exemple, l’URL http://192.168.145.157 a été saisie dans le navigateur.

La page par défaut Apache sera affichée. Cela nous permet de vérifier que nous pouvons bel et bien atteindre notre serveur web.

IV. Test de l'authentification .htaccess / LDAP

A. Authentifier les utilisateurs d'une OU spécifique - .htaccess

Nous allons modifier le fichier .htaccess pour configurer l'authentification LDAP :

nano .htaccess
Options Indexes FollowSymlinks
AuthType Basic
AuthName "Apache LDAP authentication"
AuthBasicAuthoritative Off
AuthBasicProvider ldap
AuthLDAPURL "ldap://192.168.145.128/OU=Info,DC=coud,DC=local?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "[email protected]"
AuthLDAPBindPassword thepassw0rd
Require valid-user

Les modifications à effectuer dans ce fichier sont soulignés et en gras ! Adaptez-les en fonction de votre configuration. Dans cet exemple, on cible l'OU "Info" du domaine coud.local.

Le compte [email protected], est un compte qui nous permettra exclusivement d’interroger l'AD, et thepassw0rd est le mot de passe du compte en question. Pour des raisons de sécurité, il ne doit pas disposer de droits d'administration dans l'AD. Vous pouvez très bien créer un compte avec un autre nom.

Dans notre exemple, l’URL suivante a été saisie dans le navigateur http://192.168.145.157/test. Sur l’écran de connexion, entrez un nom d’utilisateur et un mot de passe Active Directory. Rentrez le couple login/mdp d'un de vos utilisateurs de votre arborescence active directory. Je précise que cet utilisateur doit se trouver dans la même OU que celle spécifiée un peu plus haut. (Dans mon cas : L'OU est Info, et je vais m'authentifier avec le compte haddock.)

Apache Authentification LDAP
Authentification réussite !

Vous avez aussi la possibilité de vous authentifier par le biais d'un groupe d'utilisateurs. C'est le deuxième exemple que je vous présente, ci-dessous.

B. Authentifier les utilisateurs d'un groupe global spécifique - .htaccess

La configuration s'effectue toujours dans le fichier .htaccess :

nano .htaccess
# Fonctionnel pour un groupe spécifique 
Options Indexes FollowSymlinks
AuthType Basic
AuthName "Apache LDAP authentication"
AuthBasicAuthoritative Off
AuthBasicProvider ldap
AuthLDAPURL "ldap://192.168.145.128/OU=Info,DC=coud,DC=local?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "[email protected]"
AuthLDAPBindPassword thepassw0rd
AuthLDAPGroupAttributeIsDN on
require ldap-group CN=myGroupe,OU=Info,DC=coud,DC=local

Les modifications à effectuer dans ce fichier sont soulignés et en gras ! Adaptez-les en fonction de votre configuration. Par rapport à la première configuration, on ajoute la directive "require ldap-group".

Nous utilisons le même compte et le même mot de passe que dans le premier exemple : [email protected] et thepassw0rd. Pour rappel : ce compte ne doit pas disposer de droits d'administration, pour des raisons évidentes de sécurité.

Accéder à l'URL : http://192.168.145.157/test, et renseignez un utilisateur présent dans le groupe que vous avez renseigné.

Dans mon cas : Le groupe est myGroupe, et je vais m'authentifier avec le compte tintin.

Apache Authentification Active Directory

C. À ne pas faire ! 

Vous ne pouvez pas authentifier un utilisateur qui se trouve dans une OU différente du groupe de l'OU en question^^. Faites le test de votre côté, vous verrez que l'authentification vous sera refusée !

V. Post-scriptum

Note 1 : A noter que les utilisateurs membres du groupe "myGroupe" doivent être dans la même OU que ce dernier. C'est le seul point négatif que j'ai trouvé pour cette technique d'authentification.

Note 2 : Si pour des raisons qui vous appartiennent vous souhaitez mettre le groupe dans l'OU Users par défaut, il faut changer l'attribut OU -> CN=Users, dans le bloc de code qui compose le fichier .htaccess. C'est une spécificité liée au fait que ce soit un container par défaut de l'Active Directory.

Comme vous avez pu le constater, cette manipulation apporte une couche de sécurité supplémentaire, du fait qu'aucun mot de passe n'est partagé, puisque chaque utilisateur utilise son mot de passe qui lui est propre.

De mon point de vue, optez pour la deuxième méthode qui permet ou non d'authentifier un ensemble d'utilisateurs d'une OU qui est uniquement membre d'un groupe. Ce qui signifie que tous les utilisateurs d'une OU, n'auront pas le droit d'y accéder.

++

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"

Nombre de posts de cet auteur : 24.Voir tous les posts

2 thoughts on “Apache .htaccess – Authentification LDAP, pour protéger vos répertoires

  • Bonjour,
    Je vous ai découvert depuis peu et je suis impressionné par le nombre de sujets abordés, étant spécialiste de la VOIP, grâce à vos articles et tutoriels, mes connaissances progressent de jour en jour et sont essentielles à la mise en pratique et à l’intégration de la VOIP.
    Un grand merci !
    Et continuez …
    Christophe.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.