GLPI et les annuaires LDAP
Introduction
GLPI peut s'appuyer sur un ou plusieurs annuaires LDAP pour :
- authentifier les utilisateurs
- récupérer leurs informations personnelles (nom, mail, téléphone, etc)
Il est possible, comme nous le verrons plus bas d'importer et de synchroniser les utilisateurs de 2 manières :
- au fil de l'eau : à la première connexion, l'utilisateur est créé dans GLPI. A chaque login, ses informations personnelles sont synchronisées avec l'annuaire ;
- en masse : soit via l'interface web de GLPI, soit en utilisant des scripts
GLPI fonctionne avec tout annuaire compatible LDAP v3. Donc, de ce fait, aussi avec Microsoft Active Directory .
L'ensemble des configurations sont accessibles dans GLPI dans la partie « Configuration / Authentification » onglet “LDAP : configuration de l'authentification LDAP”
<note warning> Si vous ne voyez aucune configuration LDAP ainsi qu'un message d'erreur sur cette partie c'est que vous n'avez pas installé le module LDAP pour PHP.
Sous Windows, il faut :
- Décommenter dans le fichier php.ini (fichier présent dans le répertoire apache/bin) la ligne “extension=php_ldap.dll”.
- redémarrer votre serveur web.
Sous Debian Linux, il faut :
- Installer le paquet php5-ldap et ajouter la ligne “extension=ldap.so” à la fin du fichier. Sous Debian Lenny, la configuration est automatiquement ajoutée à l'installation du paquet. Elle se trouve dans le répertoire /etc/php5/apache2/conf.d/ .
- redémarrer votre serveur web.
</note>
<note> Il est possible de définir plusieurs annuaires LDAP pour l'authentification dans GLPI. Le fonctionnement est le suivant :
- lors de la première connexion de l'utilisateur, GLPI va s'adresser à tous les annuaires jusqu'à trouver celui qui contient l'utilisateur.
- l'utilisateur est créé dans GLPI et l'identifiant du serveur LDAP est stocké.
- à chaque login l'utilisateur est authentifié sur l'annuaire dont l'identifiant est stocké dans GLPI
- si l'authentification a échoué, GLPI réessaye de toutes les méthodes d'authentification possibles
</note>
Ajout d'un nouvel annuaire
Pour ajouter un nouvel annuaire, cliquer sur le bouton “+” situé dans la barre de menu haut.
L'écran de configuration d'un nouvel annuaire apparaît.
<note tip> Il existe un modèle de pré-configuration Active Directory, qui pré-remplit un certain nombre de champs. Celui-ci a été mis en place afin de faciliter la configuration GLPI-AD. Pour le charger, cliquer sur le lien “Pré-configuration Active Directory”.</note>
Le bloc des paramètres de connexions
Paramètre | Signification |
---|---|
Hôte LDAP | l'adresse de votre serveur LDAP |
Basedn | le DN de recherche initial |
rootdn (pour les connexions non anonymes) | utilisateur autorisé à effectuer une recherche dans l'annuaire si la connexion anonyme n'est pas possible |
Pass (pour les connexions non anonymes) | le mot de passe de l'utilisateur |
Filtre de connexion | filtre permettant de restreindre la recherche d'une personne dans l'annuaire. Par exemple, si seul un ensemble restreint de personnes de l'annuaire ont le droit de se connecter à GLPI, il faut mettre en place une condition pour restreindre la recherche à ces personnes. |
Utiliser TLS | indique si la connexion LDAP doit se faire de manière chiffrée une fois établie avec l'annuaire |
Fuseau horaire | permet spécifier le fuseau horaire du serveur d'annuaire |
<note warning> Le rootdn doit-être renseigné sous la forme du DN complet de l'utilisateur. Par exemple CN=glpiadmin,DC=mondomaine si le compte dans l'annuaire pour GLPI est glpiadmin </note>
Connexion LDAP sécurisée
Il est possible de connecter GLPI à un annuaire LDAP à travers une connexion SSL (aussi appelé LDAPS). Il suffit de rajouter devant le nom de l'hôte (ou son IP) ldaps://. Ainsi que de changer le port (par défaut 636). Par exemple l'accès en LDAPS en local donnera :
Hôte : ldaps://127.0.0.1 Port : 636
Réplicats
Il est possible de renseigner des réplicats du serveur LDAP que vous configurez. Ceux-ci auront les même caractéristiques que le maître.
L'ajout de réplicats se fait dans la fiche d'un annuaire, il suffit de rentrer les informations suivantes :
Champs | Signification |
---|---|
Nom | le nom du réplicat affiché dans GLPI |
Serveur | le nom DNS ou l'adresse IP du réplicat |
Port | le port DNS ou l'adresse IP du réplicat |
Il n'y a pas de limite quant au nombre d'annuaires répliqués.
Base DN et utilisateur authentifié
Attention, le rootdn et le basedn doivent être écrits sans espaces après les virgules. De plus, la casse est importante.
Exemple de rootdn :
cn=Admin, ou=users, dc=mycompany | incorrect |
cn=Admin,ou=users,dc=mycompany | correct |
Pour Active-Directory, si on utilise le userprincipalname au lieu du samaccountname on peut avoir un rootdn sous la forme:
prenom.nom@domaine.fr | correct |
Les paramètres à entrer sont très simples, par exemple :
- hote : ldap.mycompany.fr
- basedn : dc=mycompany,dc=fr
Et cela doit suffire si la recherche anonyme est permise. Dans le cas contraire, et si tous les utilisateurs ne sont pas positionnés au sein du même DN, il vous faut spécifier le DN d'un utilisateur autorisé et son mot de passe : rootdn/Pass. Pour Active Directory, il est obligatoire de renseigner un compte qui a le droit de s'authentifier sur le domaine.
Vous pouvez tester ces paramètres en tentant de vous connecter à votre annuaire grâce à un browser LDAP. Il en existe beaucoup, mais on peut citer :
- LdapBrowser Editor (logiciel libre écrit en Java, et donc multi-plateforme)
- ADSIedit pour Active Directory. Cet outil se trouve sur trouve avec les supports tools/outils supplémentaires disponibles sur votre CD d'installation.
<note> Si certains de vos utilisateurs ont des restrictions de connexion à certaines machines configurées dans leur profil AD, vous risquez d'avoir l'erreur suivante lors d'une tentative de login sur la page d'accueil de GLPI : Utilisateur non trouvé ou plusieurs utilisateurs identiques trouvés. La solution consiste à ajouter le serveur hébergeant l'AD à la liste des PC sur lesquels l'utilisateur peut se connecter. </note>
Filtre de connexion
Vous devez mettre en place une condition pour la recherche. Celle-ci permet de filtrer la recherche des utilisateurs à un nom réduit d'enregistrements. On peut citer les exemples de filtres suivants :
- un filtre classique LDAP peut être :
(objectclass=inetOrgPerson)
- au sein de l'université de Poitiers, des champs sont renseignés pour spécifier à quelle entité sont rattachés les personnels. Si l'on veut restreindre l'accès à certaines entités, la condition est :
(upempaffectation=500400)
Ou, plus compliqué :
(| (upempaffectation=500400)(upempaffectation=500200))
Dans une entreprise, on peut vouloir limiter la récupération des comptes utilisateurs aux seuls comptes ayant une adresse mail et un userprincipalname sous la forme prenom.nom@entreprise.fr:
(&(objectClass=user)(objectCategory=person)(mail=*)(userprincipalname=*@entreprise.fr))
Pour Active Directory utilisez le filtre suivant, qui ne renvoie que les utilisateurs non désactivés (car les machines sont aussi considérées comme des utilisateurs par AD) :
(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Il faut noter que ce filtre est automatiquement remplit lorsque le modèle de pré-configuration Active Directory est sélectionné.
Il existe, souvent, une limite pour le nombre maximum d'enregistrements retournés par une requête (par défaut 1000) :
- sur unix, il faut voir la configuration du client LDAP (par exemple sur Debian/Ubuntu dans /etc/ldap/ldap.conf)
- sur AD il vous suffit de modifier le MaxPageSize de votre annuaire. Pour cela, il faut taper les commandes suivantes :
C:> ntdsutil ntdsutil: ldap policies ldap policy: connections server connections: connect to server 192.168.1.1 ( here a few messages regarding connectivity are displayed) server connections : q ldap policy : show values ( here we will see all the values including MaxPageSize which is 1000 currently) ldap policy : set maxpagesize to 5000 ldap policy : commit changes ldap policy : q ntdsutil : q
Le message “Test de connexion réussi” indique que GLPI a pu se connecter à l'annuaire LDAP avec les informations renseignées (hôte, port, compte utilisateur). Il reste désormais à importer vos utilisateurs. Pour cela, il faut bien vérifier les autres paramètres (filtre de connexion, champs de login, etc).</note>
Les liaisons LDAP/GLPI
Par défaut, elles sont initialisées aux valeurs standards utilisées par un LDAP conforme (pas un Active Directory). Les valeurs données ci-dessous ne sont que des exemples; suivant votre annuaire LDAP elles peuvent varier.
Champs | Signification | Valeur LDAP standard | Valeur Active Directory |
---|---|---|---|
login name | le nom d'utilisateur | uid | samaccountname ou userprincipalname (écrire en minuscule) |
l'email de l'utilisateur | |||
phone | le numéro de téléphone | telephonenumber | |
realname | le nom | cn | sn |
firstname | le prénom | givenname |
<note warning>
Le nom des attributs LDAP doit être obligatoirement en minuscule.
Le plus simple est que vous naviguiez dans votre LDAP ou votre AD pour déterminer les champs qui correspondent à ces informations car ils peuvent varier fortement suivant le système que vous utilisez.</note>
<note tip> Dans Active Directory, l'authentification d'un utilisateur peut se faire de deux façons:
- soit à l'ancienne mode Windows NT en utilisant le champ samaccountname
- soit à la mode UPN en utilisant le champ userprincipalname.
</note>
Dans la version 0.72, apparaîtront les paramètres suivants :
Champs | Signification | Valeur LDAP standard | Valeur Active Directory |
---|---|---|---|
title | le titre de la personne | title | title |
type | type de personne | employeetype | employeetype |
language | langue courante de l'utilisateur | preferredlanguage | preferredlanguage |
Le paramètre “language” permettra de synchroniser la langue de l'utilisateur avec l'annuaire. Cette fonctionnalité peut-être intéressante dans une utilisation multilingues.
Les formations de langues acceptés sont :
- fr_FR
- fr
- Français
<note warning> Lorsqu'un utilisateur est supprimé de l'annuaire, il n'est pas supprimé de GLPI </note>
Appartenance des utilisateurs à des groupes
L'appartenance d'un utilisateur à un groupe dans GLPI peut-être déduite d'un annuaire LDAP. Cela permet de déporter cette gestion quotidienne à celui-ci.
La liaison utilisateur/groupe est calculée :
- à l'import de l'utilisateur dans GLPI
- à chaque connexion de l'utilisateur
- lorsque l'on force la synchronisation avec l'annuaire
Elle permet, par exemple, de créer dans l'annuaire des groupes de techniciens, qui se traduiront dans GLPI par des profils particulier pour ses membres.
Les groupes peuvent être :
- importés automatiquement par GLPI (il faut aller dans Administration → Groupes → Liaison LDAP)
- crées manuellement dans GLPI en précisant les paramètres LDAP
En fonction de l'annuaire, l'information de l'appartenance d'un utilisateur a un groupe est accessible de manière différente. GLPI peut déduire celle-ci en :
- cherchant dans un attribut de l'objet utilisateur
- cherchant dans un attribut d'un objet groupe
Configuration d'un groupe
Champs | Signification |
---|---|
Type de recherche | endroit où aller trouver l'appartenance à un groupe |
Filtre pour la recherche dans les groupes | filtre de recherche pour les groupes |
Utiliser le DN pour la recherche | recherche de l'appartenance à un groupe en utilisant le DN de l'utilisateur ou pas |
Attribut utilisateur indiquant ses groupes | dans quel attribut du groupe recherche l'utilisateur |
Attribut des groupes contenant les utilisateurs | dans quel attribut de l'utilisateur recherche l'appartenance à un groupe |
Exemples de groupes
Dans un annuaire LDAP classique, il faudra choisir laquelle des 2 méthodes est adaptée en fonction des objets utilisés :
- recherche dans un groupe (par exemple un groupOfNames)
- recherche dans un utilisateur (si on utilise son propre type d'objet par exemple)
Dans un annuaire Active Directory, il est possible de rechercher des 2 manières :
- Dans un utilisateur on cherche le DN du groupe dans l'attribut memberOf
- Dans un groupe on chercher le DN de l'utilisateur dans l'attribut member
<note> Le paramètre de configuration “Utiliser le DN pour la recherche” est important. Par défaut il est sur “Oui”, mais il y a des cas où il doit être mis à “non”. Par exemple, lors de l'utilisation d'un objet posixGroup, on ne stocke pas le DN de l'utilisateur mais juste son uid. </note>
<note> Un objet groupe doit forcément contenir un attribut CN, qui sera utilisé comme nom du groupe dans GLPI. En particulier, une OU n'est pas un groupe ! </note>
Exemple de configuration avec un annuaire OpenLDAP dans lequel l'association des utilisateurs aux groupes est renseignée dans les groupes avec l'attribut multi-valué memberUid :
Champs | Valeur |
---|---|
Type de recherche | Dans les groupes |
Filtre pour la recherche dans les groupes | (objectClass=posixGroup) |
Attribut des groupes contenant les utilisateurs | memberuid |
Cas particulier : faire correspondre un groupe GLPI avec une "OU LDAP" (Organizational Unit)
Il est possible d'affecter un utilisateur dans un groupe en analysant l'OU du user, présente dans son DN. Pour ce faire il faut indiquer, dans la configuration de l'annuaire :
- Type de recherche : “dans les utilisateurs” ou “Utilisateurs et groupes”
- Attribut utilisateur indiquant ses groupes : indiquer “dn”
Dans la définition du groupe :
- Attribut utilisateur indiquant ses groupes : indiquer “ou”
- Valeur LDAP : indiquer l'ou que vous désirez (respectez bien la casse !)
<note> Outre la bonne configuration de l'authentification externe, il faut s'assurer que l'utilisateur configuré dans GLPI pour lire les informations de l'AD possède des droits en lecture de la propriété memberOf sur les objets Users de l'AD.
Ajout de cette possibilité :
Ouvrir les propriétés de la racine (On peut restreindre à une OU) de son annuaire dans ADSI Edit (ici DC=mondomaine,DC=fr). Aller dans les propriétés avancées de sécurité. Ajouter l'utilisateur GLPI comme suit :
Automatiser l'import via un script
Pour importer les nouveaux comptes AD dans GLPI, nous allons utiliser le script d'import automatique GLPI ainsi qu'une tâche planifiée. Le script d'import est présent dans le dossier script de GLPI(ldap_mass_sync.php).
Les arguments du script
Le script a besoin d'arguments pour fonctionner (le server id et l'action qu’il doit exécuter). Le serveur ID, pour trouver notre ID, allez dans:
- CONFIGURATION =⇒ AUTENTIFICATION =⇒ ouvrez votre server LDAP
Votre ID se trouve dans l'adresse URL, pour nous 2 :
Pour l'action nous avons deux choix :
- 1 Pour Synchroniser
- 0 Pour importer.
Tache planifiée Windows
- Créez un fichier BAT et collez y les lignes :
<note>REM Placer vous dans le dossier ou se trouve le script
REM Go to the folder where is the script.
cd “C:\Program Files\OCS Inventory NG\xampp\htdocs\glpi\scripts”
REM Exécuter php.exe avec le script
REM Run php.exe and launch script
“C:\Program Files\OCS Inventory NG\xampp\php\php.exe” ldap_mass_sync.php –server_id=2 action=0 </note>
- Ensuite créez une tache planifiée Windows.