GLPI : comment configurer l’authentification LDAP via l’Active Directory ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons avoir comment configurer l'authentification LDAP de GLPI pour pouvoir se connecter à l'application GLPI à partir des comptes utilisateurs présents dans un annuaire Active Directory. Ainsi, un utilisateur pourra accéder à GLPI à l'aide de son nom d'utilisateur et son mot de passe habituel (puisque ce seront les informations de son compte dans l'Active Directory).
GLPI propose nativement un modèle d'authentification LDAP, ce qui lui permet de s'appuyer sur un annuaire de comptes externe, comme l'Active Directory de Microsoft. Il faut savoir que les comptes utilisateurs de l'Active Directory seront importés dans la base de données de GLPI, grâce à un processus de synchronisation. Lorsqu'un utilisateur Active Directory se connecte pour la première fois, son compte est créé dans GLPI. Avant cela, il n'est pas visible, sauf si vous décidez d'effectuer un "import en masse" des comptes AD dans GLPI.
Par ailleurs, en complément de ce tutoriel, voici le lien vers la documentation officielle :
II. Configuration cible
Avant de passer à la configuration, voici quelques informations sur l'environnement utilisé.
Pour cette démonstration, le domaine Active Directory "it-connect.local" sera utilisé et le contrôleur de domaine SRV-ADDS-02 sera utilisé. Ce serveur dispose de l'adresse IP "10.10.100.11" et la connexion sera effectuée en LDAP, sur le port par défaut (389).
- Le compte utilisateur qui sera utilisé comme "connecteur" pour permettre à GLPI de se connecter à l'Active Directory se nomme "Sync_GLPI". Il est stocké dans l'unité d'organisation "Connecteurs" de l'annuaire (voir image ci-dessous). Il s'agit d'un compte utilisateur standard, sans aucun droit particulier sur l'annuaire Active Directory. Faites-moi plaisir : n'utilisez pas de compte Administrateur.
- Tous les utilisateurs qui doivent pouvoir se connecter à GLPI à l'aide de leur compte Active Directory sont stockés dans l'unité d'organisation "Personnel" visible ci-dessous. Elle correspond à ce que l'on appelle la "Base DN" vis-à-vis du connecteur LDAP de GLPI. Les autres utilisateurs ne pourront pas se connecter. En fait, ce n'est pas utile de mettre la racine du domaine comme base DN : essayez de restreindre autant que possible pour limiter la découverte de l'annuaire Active Directory au strict nécessaire.
- Les utilisateurs de l'Active Directory pourront se connecter à GLPI à l'aide de leur identifiant correspondant à l'attribut "UserPrincipalName" (mis en évidence, en jaune, sur l'image ci-dessous). Cet identifiant, sous la forme "identifiant + nom de domaine", leur permettra se connecter à GLPI avec un identifiant qui correspond à leur e-mail. L'alternative consisterait à utiliser l'attribut "SamAccountName" (soit l'identifiant sous la forme "DOMAINE\identifiant").
Voilà, maintenant, nous allons pouvoir dérouler la configuration !
II. Installer l'extension LDAP de PHP
L'extension LDAP de PHP doit être installée sur votre serveur pour que GLPI soit capable de communiquer avec votre serveur contrôleur de domaine Active Directory (ou tout autre annuaire LDAP).
Connectez-vous à votre serveur GLPI et exécutez les deux commandes suivantes pour mettre à jour le cache des paquets et procéder à l'installation de l'extension.
sudo apt-get update
sudo apt-get install php-ldap
Cette extension sera installée et activée dans la foulée. Vous n'avez pas besoin de relancer le serveur.
III. Ajouter un annuaire LDAP dans GLPI
Désormais, nous allons ajouter notre annuaire Active Directory à GLPI. Connectez-vous à GLPI avec un compte administrateur, puis dans le menu "Configuration", cliquez sur "Authentification".
Au centre de l'écran, cliquez sur "Annuaire LDAP".
Puis, cliquez sur le bouton "Ajouter".
Un formulaire s'affiche à l'écran. Comment le renseigner ? À quoi correspondent tous ces champs ? C'est que nous allons voir ensemble.
- Nom : le nom de cet annuaire LDAP, vous pouvez utiliser un nom convivial, ce n'est pas obligatoirement le nom du domaine, ni le nom du serveur.
- Serveur par défaut : faut-il s'appuyer sur ce serveur par défaut pour l'authentification LDAP ? Il ne peut y avoir qu'un seul serveur LDAP défini par défaut.
- Actif : nous allons indiquer "Oui", sinon ce sera déclaré, mais non utilisé.
- Serveur : adresse IP du contrôleur de domaine à interroger. Avec le nom DNS, cela ne semble pas fonctionner (malheureusement).
- Port : 389, qui est le port par défaut du protocole LDAP. Si vous utilisez TLS, il faudra le préciser à postériori, dans l'onglet "Informations avancées", du nouveau serveur LDAP.
- Filtre de connexion : requête LDAP pour rechercher les objets dans l'annuaire Active Directory. Généralement, nous faisons en sorte de récupérer les objets utilisateurs ("objectClass=user") en prenant uniquement les utilisateurs actifs (via un filtre sur l'attribut UserAccountControl).
- BaseDN : où faut-il se positionner dans l'annuaire pour rechercher les utilisateurs ? Ce n'est pas nécessaire la racine du domaine, tout dépend comment est organisé votre annuaire et où se situent les utilisateurs qui doivent pouvoir se connecter. Il faut indiquer le DistinguishedName de l'OU.
- Utiliser bind : à positionner sur "Oui" pour du LDAP classique (sans TLS)
- DN du compte : le nom du compte à utiliser pour se connecter à l'Active Directory. En principe, vous ne pouvez pas utiliser de connexion anonyme ! Ici, il ne faut pas indiquer uniquement le nom du compte, mais la valeur de son attribut DistinguishedName.
- Mot de passe du compte : le mot de passe du compte renseigné ci-dessus
- Champ de l'identifiant : dans l'Active Directory, quel attribut doit être utilisé comme identifiant de connexion pour le futur compte GLPI ? Généralement, UserPrincipalName ou SamAccountName, selon vos besoins.
- Champ de synchronisation : GLPI a besoin d'un champ sur lequel s'appuyer pour synchroniser les objets. Ici, nous allons utiliser l'objectGuid de façon à avoir une valeur unique pour chaque utilisateur. Ainsi, si un utilisateur est modifié dans l'Active Directory, GLPI pourra se repérer grâce à cet attribut qui lui n'évoluera pas (sauf si le compte est supprimé puis recréé dans l'AD).
Ci-dessous, la configuration utilisée pour cette démonstration et qui correspond à la "configuration cible" évoquée précédemment.
- Nom : Active Directory - it-connect.local
- Serveur par défaut : Oui
- Actif : Oui
- Serveur : 10.10.100.11
- Port : 389
- Filtre de connexion : (&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
- BaseDN : OU=Personnel,DC=it-connect,DC=local
- Utiliser bind : Oui
- DN du compte : CN=Sync_GLPI,OU=Connecteurs,OU=Tiering,OU=IT,DC=it-connect,DC=local
- Mot de passe du compte : Mot de passe du compte "Sync_GLPI"
- Champ de l'identifiant : userprincipalname
- Champ de synchronisation : objectguid
Quand votre configuration est prête, cliquez sur "Ajouter".
Dans la foulée, GLPI va effectuer un test de connexion LDAP et vous indiquer s'il est parvenu, ou non, à se connecter à votre annuaire. Si ce n'est pas le cas (comme moi, la première fois), cliquez sur le nom de votre annuaire, vérifiez la configuration, puis retournez dans "Tester" sur la gauche afin de lancer un nouveau test. Pour ma part, le problème venait du champ "Serveur" : j'avais mis le nom DNS du serveur à la place de l'adresse IP, mais cela ne fonctionnait pas. Pourtant, mon serveur GLPI parvient bien à résoudre le nom DNS.
Par ailleurs, vous pouvez explorer les différents onglets : Utilisateurs, Groupes, Réplicats, etc... Pour affiner la configuration. L'onglet "Utilisateurs" est intéressant pour configurer le mappage entre les champs d'une fiche utilisateur dans GLPI et les attributs d'un compte dans l'Active Directory. Quant à l'onglet "Réplicats", vous pouvez l'utiliser pour déclarer un ou plusieurs contrôleurs de domaine "de secours" à contacter si le serveur principal n'est plus joignable.
IV. Tester la connexion Active Directory
Si GLPI valide la connexion à votre annuaire Active Directory, vous pouvez tenter de vous authentifier à l'application avec un compte utilisateur. Pour ma part, c'est l'utilisateur Guy Mauve qui va servir de cobaye. Son login GLPI sera donc "[email protected]" puisque je m'appuie sur l'attribut UserPrincipalName. Pour le mot de passe, je dois indiquer celui de son compte Active Directory.
Remarque : la source d'authentification doit être l'Active Directory.
Voilà, l'authentification fonctionne ! L'utilisateur a pu se connecter avec son compte Active Directory et il hérite du rôle "Self-service".
Dans le même temps, à partir du compte admin de GLPI, je peux remarquer la présence d'un nouveau compte utilisateur dont l'identifiant est "[email protected]" ! GLPI a également récupéré le nom, le prénom et l'adresse e-mail à partir de différents attributs de l'objet LDAP.
En complément, à partir de la section "Configuration" puis "Générale", vous pouvez décocher l'option "Afficher la liste des sources d'authentification sur la page de login" pour que la page de connexion à GLPI n'affiche pas la liste de vos sources. Ceci évite d'indiquer publiquement que votre GLPI est synchronisé avec l'Active Directory. Lorsqu'un utilisateur va chercher à s'authentifier, GLPI va sélectionner la bonne source d'authentification (Merci à @Patrice Vaillant pour l'astuce).
V. Forcer une synchronisation Active Directory
A partir de GLPI, vous pouvez forcer une synchronisation LDAP de façon à mettre à jour les comptes dans GLPI "liés" à des comptes Active Directory, mais aussi pour importer en masse tous les comptes des utilisateurs Active Directory. Ceci vous évite d'attendre la première connexion et vous permet de préparer le compte : attribution du bon rôle, etc.
Cliquez sur "Administration" dans le menu, puis "Utilisateurs". Ici, vous avez accès au bouton "Liaison annuaire LDAP".
Vous avez ensuite le choix entre deux actions différentes, selon vos besoins.
Si vous cliquez sur "Importation de nouveaux utilisateurs", vous pourrez importer en masse les comptes dans l'Active Directory. Il vous suffit de lancer une recherche, de sélectionner les comptes à importer et de lancer l'import grâce au bouton "Actions".
Remarque : vous pouvez aussi importer des groupes Active Directory. Pour cela, suivez la même procédure, mais en allant dans "Groupes" sous "Administration".
VI. Conclusion
En suivant ce tutoriel, vous devriez être en mesure d'importer les comptes utilisateurs d'un annuaire Active Directory dans GLPI, pour faciliter la connexion de vos utilisateurs. Sachez que si un utilisateur change son mot de passe dans l'Active Directory, ce n'est pas un problème : GLPI vérifie les informations lors de la connexion.
Chapitre VI. Activer le SSO pour se connecter 😉
Hello,
Tu sais comment faire ? Si tu as des infos, je suis preneur ! 🙂
Chez nous il est en place, ldap AD + SSO dans Glpi 🙂
Ldap + SSO
Tu ne confond pas Ldap + MFA ?
Car pour moi il n’est pas possible de mixer le LDAP et le SAML
Voici les grandes lignes :
Installer le rôle Authentification windows sur le IIS
Sur le site IIS, menu authentification
Désactiver Authentification anonyme et activer Authentification Windows
Dans Glpi
Configuration / Authentification/autres méthodes
Mettre REMOTE_USER dans Champs de stockage de l’identification dans la requête http
Et ensuite GPO pour ajouter glpi dans les site de confiance (intranet local)
Testé et fonctionnel !
Il faudra au préalable installer la fonctionnalité « Authentification Windows » via le gestionnaire de serveur.
Concrètement, ça pose une authentification par boîte de dialogue au niveau du serveur Web, dans laquelle il suffit de renseigner ses identifiants AD. C’est intéressant de désactiver l’authentification anonyme au niveau de IIS, pour protéger notamment le formulaire GLPI classique de connexion exposé en frontal sur Internet. Merci @Jean !
Je viens de mettre en place une connexion LDAPS afin de protéger les identifiants AD sur le réseau. Ca n’a pas été une sinécure, mais c’est désormais fonctionnel (avec config IIS) !
Salut Marc,
On se casse les dents sur la conf ici, un peu d’aide serai bienvenue.
Le test fonctionne en passant ldaps//mondc.com:636, mais a partir du momant où l’ont veut lire l’AD pour synchro les users, ont ne trouve plus rien …
Cordialement,
Matthieu
Merci pour ce tuto.
Il serait interessant je pense d’y ajouter une annexe concernant la mise en place LDAPS car celle-ci peut-être cruciale dans la sécurisation d’un SI.
Bonne journée
Je suis pour le chapitre VI également !
un petit plus appris en formation TSSR cette semaine:
sur la première ligne du formulaire de configuration LDAP il y a des présélections.
en cliquant sur active directory, on remplit certains champs avec des valeurs par défaut.
Bonjour,
De mémoire, il est également possible d’automatiser la synchronisation ldap, afin que les nouveaux utilisateurs AD apparaissent automatiquement dans GLPI.
Script existant:
/var/www/glpi/scripts/ldap_mass_sync.php
Crontab-e
* */1 * * * /usr/bin/php5 /var/www/glpi/scripts/ldap_mass_sync.php ldapservers_id=x action=1
Le paramètre ‘action’ indique s’il faut effectuer un import (valeur 0), une synchronisation (valeur 1), ou s’il faut réimporter et resynchroniser tous les utilisateurs (valeur 2). Si cette option n’est pas définie, le script est en mode synchronisation.
* */1 * * * = toutes les heures
Evidemment, il faut aussi penser à configurer le GLPI Cron.
Salut
Attention il me semble que ce script est obsolete.
Il faut utiliser /var/www/glpi/bin/console glpi:ldap:synchronize_users -c
Bonjour,
Avez vous un article qui parle de la personnalisations des notifications e-mails dans GLPI 10?