Configurer un annuaire LDAP Active Directory dans GLPI

Brancher GLPI sur Active Directory permet aux utilisateurs de se connecter avec leur compte du domaine et d'importer fiches et groupes. La configuration tient dans un formulaire, mais chaque champ a un piège.

Schéma : srv-glpi01 interroge le contrôleur srv-dc01 en LDAPS 636 avec le compte svc-glpi, tandis que le LDAP 389 sans SSL est refusé si la signature est exigée
Illustration schématique — ne reproduit aucune interface réelle.

GLPI sait interroger un ou plusieurs annuaires LDAP pour authentifier les utilisateurs, contrôler leur accès, récupérer leurs informations personnelles et importer des groupes. Tout annuaire compatible LDAP v3 convient, dont Active Directory (AD) de Microsoft, mais aussi OpenLDAP ou le serveur LDAP d'un NAS. Cette page décrit le cas le plus courant : un domaine AD et une instance GLPI 11.

Une erreur dans ce formulaire peut bloquer la connexion de tous les comptes du domaine. Testez d'abord sur une instance de lab, et gardez un compte local super-administrateur fonctionnel avant d'activer l'annuaire en production.

Comment GLPI utilise l'annuaire

Le traitement se fait en trois temps, et les confondre explique la plupart des tickets « l'utilisateur n'arrive pas à se connecter » :

  1. Authentification. À la première connexion, GLPI cherche l'utilisateur dans tous les annuaires configurés jusqu'à le trouver. Si l'import depuis une source externe est autorisé, le compte est créé dans GLPI et lié à ce serveur. Aux connexions suivantes, seul cet annuaire est interrogé.
  2. Contrôle d'accès. Être authentifié ne donne pas forcément le droit d'entrer. Les profils et entités viennent des règles d'affectation d'habilitations à un utilisateur.
  3. Récupération des données. Nom, courriel, téléphone et groupes sont relus dans l'annuaire à chaque connexion.

Topologie du lab

HôteRôleInterfaceAdresse
srv-dc01contrôleur de domaine lab.local, LDAP et LDAPSEthernet0192.168.10.10/24
srv-glpi01Debian 13, GLPI 11ens18192.168.10.20/24
poste-adminnavigateur, console ADeth0192.168.10.50/24

Prérequis

apt install php-ldap ldap-utils
systemctl reload apache2

Vérifier l'annuaire avant GLPI

Un test depuis le serveur GLPI sépare les problèmes réseau ou de compte des erreurs de saisie. L'outil ldapsearch du paquet ldap-utils fait une liaison simple (-x) avec le DN du compte (-D) et demande le mot de passe (-W).

ldapsearch -x -H ldaps://srv-dc01.lab.local -D "CN=svc-glpi,OU=Services,DC=lab,DC=local" -W -b "DC=lab,DC=local" "(sAMAccountName=jdupont)" cn mail

Si l'entrée de l'utilisateur revient, le réseau, le certificat et le compte de service sont bons. Une erreur à ce stade ne se corrigera pas dans GLPI.

Déclarer l'annuaire dans GLPI

Dans Configuration > Authentification > Annuaires LDAP, ajoutez un annuaire. Cliquez d'abord sur le lien de préconfiguration Active Directory : il préremplit plusieurs champs, dont le filtre de connexion. Le lien Valeurs par défaut les remet à zéro.

ChampValeur pour le labRemarque
Serveurldaps://srv-dc01.lab.localnom complet ou adresse IP
Port636389 en LDAP simple
BaseDNDC=lab,DC=localaucun espace après les virgules
DN du compteCN=svc-glpi,OU=Services,DC=lab,DC=localmême règle d'écriture
Champ de l'identifiantsamaccountnameuid sur un annuaire OpenLDAP
Champ de synchronisationobjectguidnon modifiable ensuite

Cochez Actif, et Serveur par défaut si c'est votre annuaire principal. La documentation insiste : un annuaire non activé ne sert à rien, et le BaseDN comme le DN du compte sont sensibles à la casse.

Le champ de synchronisation

C'est le seul choix difficile à rattraper : une fois enregistré, il ne peut plus être modifié. Il doit être unique pour chaque utilisateur. Pour AD, GLPI recommande objectGUID, l'identifiant unique que Microsoft définit à la création de l'objet et qui ne change jamais, même si le compte est renommé ou déplacé.

Le filtre de connexion

Dans AD, les ordinateurs sont aussi des objets de classe user. Le filtre préchargé ne garde donc que les personnes dont le compte n'est pas désactivé :

(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

La partie 1.2.840.113556.1.4.803 est la règle de correspondance « ET bit à bit » de Microsoft, et la valeur 2 correspond à l'indicateur qui marque un compte désactivé dans userAccountControl. Pour ne laisser entrer qu'un groupe, ajoutez une condition sur l'appartenance. La règle 1.2.840.113556.1.4.1941 suit aussi les groupes imbriqués :

(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(memberOf:1.2.840.113556.1.4.1941:=CN=GLPI-Utilisateurs,OU=Groupes,DC=lab,DC=local))

Pourquoi LDAPS plutôt que LDAP simple

GLPI se connecte par une liaison simple (simple bind) avec le compte de service. Microsoft précise que si la signature LDAP est exigée sur le contrôleur de domaine, les liaisons simples sans SSL sur le port 389 sont refusées, alors que la liaison simple via SSL sur le port 636 n'est pas concernée. Sur un domaine durci, le LDAP simple casse donc, et il fait circuler le mot de passe du compte de service en clair.

Pour passer en LDAPS, préfixez le serveur par ldaps://, mettez le port à 636, enregistrez, puis dans l'onglet Informations avancées passez Utiliser TLS à « Oui ». Le serveur GLPI doit faire confiance à l'autorité de certification qui a signé le certificat du contrôleur. La directive TLS_CACERT de /etc/ldap/ldap.conf désigne le fichier des autorités reconnues par la bibliothèque LDAP du système :

TLS_CACERT /etc/ssl/certs/lab-ca.pem

Tester puis importer

L'onglet Tester vérifie l'hôte, le port et le compte. Un succès ne dit rien du filtre ni du champ identifiant : il reste à importer.

ActionOùEffet
Importation de nouveaux utilisateursAdministration > Utilisateurs > Liaison annuaire LDAPcrée les comptes trouvés par le filtre
Synchronisation des utilisateurs déjà importésmême écranmet à jour les fiches existantes
Connexion directepage de connexion de GLPIcrée le compte à la volée si l'import externe est autorisé

Pour automatiser, la console GLPI fournit glpi:ldap:synchronize_users, avec notamment --only-create-new, --only-update-existing et --ldap-server-id. Planifiez-la avec cron sous l'utilisateur du serveur web, pour que les fichiers créés gardent les bons droits.

sudo -u www-data php /var/www/glpi/bin/console glpi:ldap:synchronize_users --only-update-existing

Les erreurs les plus courantes

La même logique de compte de service et de filtre s'applique ailleurs dans un lab : voyez la connexion de Centreon à Active Directory. Une fois les utilisateurs en place, l'étape suivante est l'inventaire avec l'agent GLPI. Les autres tutoriels sont rassemblés dans la rubrique GLPI.

Questions fréquentes

Quel champ identifiant choisir pour Active Directory ?

samaccountname, qui correspond à l'identifiant de connexion Windows. Sur un annuaire OpenLDAP, on utilise en général uid. Le champ de synchronisation, lui, doit être objectguid pour AD.

GLPI peut-il utiliser plusieurs annuaires LDAP ?

Oui, sans limite de nombre. Plus il y en a, plus la recherche d'un nouvel utilisateur à sa première connexion est longue, puisque GLPI les interroge tour à tour. Un seul peut être serveur par défaut.

Que se passe-t-il si le contrôleur de domaine est indisponible ?

Les utilisateurs liés à cet annuaire ne peuvent plus se connecter. GLPI permet de déclarer des réplicats, d'autres serveurs avec les mêmes données, utilisés seulement quand le serveur principal ne répond plus.

Les groupes AD sont-ils importés ?

GLPI peut récupérer les groupes de l'annuaire ; la méthode de récupération se règle dans l'onglet Groupes de l'annuaire. Testez-la sur quelques comptes avant une synchronisation complète.

Le mot de passe du compte de service a disparu après l'enregistrement, est-ce normal ?

Oui. La documentation GLPI indique que ce champ apparaît vide après l'enregistrement et que le mot de passe est bien conservé en base. Ne le ressaisissez que pour le changer.