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)
email l'email de l'utilisateur mail
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 :

Internal Link </note>

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.