Tutoriels gratuits et ouverts à toutes et à tous · mis à jour régulièrementNouveautésGlossaireÀ propos

Série « GLPI 11 » · partie 3 / 3

GLPI 3/3 : liaison Active Directory et bilan de sécurité

Relier GLPI 11 à l’Active Directory en LDAPS avec un compte de service limité, importer les utilisateurs, attribuer les droits par groupe, gérer le cycle de vie des comptes, puis auditer et maintenir l’installation.

Systèmes✎ B. Jousseaume📅 22 octobre 2026⏱ 4 h📶 Intermédiaire

8. Liaison avec l’Active Directory

Sans liaison, chaque utilisateur aurait un compte et un mot de passe de plus dans GLPI. Avec la liaison, l’utilisateur se connecte avec son compte du domaine : GLPI interroge l’annuaire par le protocole LDAP pour vérifier le mot de passe. GLPI ne stocke pas le mot de passe AD de l’utilisateur.

UsageCe que fait GLPIIntérêt
AuthentificationTransmet l’identifiant et le mot de passe saisis à l’AD, qui répond oui / nonUn seul mot de passe, politique de l’AD appliquée
Import / synchronisationLit nom, prénom, courriel, service, groupesFiches utilisateurs à jour sans saisie
HabilitationsApplique des règles selon les groupes ADDroits gérés au même endroit que le reste du SI
Cycle de vieRéagit quand un compte est désactivé ou supprimé dans l’ADUn départ dans l’entreprise = plus d’accès à GLPI

8.1 Préparer l’Active Directory

Sur SRV-AD01, PowerShell administrateur. On crée : une OU pour les comptes de service, un compte de service dédié à GLPI, deux groupes pour gérer les droits, et on suppose les utilisateurs rangés dans l’OU Utilisateurs SIO.

New-ADOrganizationalUnit -Name "Comptes de service" -Path "DC=sio,DC=lan"
New-ADOrganizationalUnit -Name "Groupes GLPI" -Path "DC=sio,DC=lan"

$svc = @{
  Name                 = "svc-glpi-ldap"
  SamAccountName       = "svc-glpi-ldap"
  UserPrincipalName    = "svc-glpi-ldap@sio.lan"
  Path                 = "OU=Comptes de service,DC=sio,DC=lan"
  AccountPassword      = (Read-Host -AsSecureString "Mot de passe du compte de service")
  Enabled              = $true
  PasswordNeverExpires = $true
  CannotChangePassword = $true
  Description          = "Lecture LDAP pour GLPI - aucune ouverture de session interactive"
}
New-ADUser @svc

New-ADGroup -Name "GG-GLPI-Techniciens" -GroupScope Global -Path "OU=Groupes GLPI,DC=sio,DC=lan"
New-ADGroup -Name "GG-GLPI-Admins" -GroupScope Global -Path "OU=Groupes GLPI,DC=sio,DC=lan"
Add-ADGroupMember -Identity "GG-GLPI-Techniciens" -Members "jdurand"

8.2 LDAP, LDAPS ou StartTLS ?

ModePortMot de passe sur le réseauUsage
LDAP simple389/TCPEn clairÀ éviter : uniquement pour un premier test isolé
LDAP + StartTLS389/TCPChiffré après négociation TLSPossible (option « Utiliser TLS » dans GLPI)
LDAPS636/TCPChiffré dès la connexionRecommandé — utilisé dans ce cours

LDAPS impose que le contrôleur de domaine possède un certificat. Avec une autorité AD CS d’entreprise, les contrôleurs de domaine en obtiennent un automatiquement. Le serveur GLPI doit alors faire confiance au certificat racine de cette autorité.

8.3 Préparer le serveur GLPI

Exportez le certificat racine de votre AD CS (format Base-64, .cer) et copiez-le sur le serveur GLPI, puis :

sudo cp sio-ca.cer /usr/local/share/ca-certificates/sio-ca.crt
sudo update-ca-certificates
sudo apt install -y ldap-utils
grep TLS_CACERT /etc/ldap/ldap.conf     # doit pointer vers /etc/ssl/certs/ca-certificates.crt

# Test de connexion LDAPS avec le compte de service
ldapsearch -H ldaps://srv-ad01.sio.lan -D "svc-glpi-ldap@sio.lan" -W \
  -b "OU=Utilisateurs SIO,DC=sio,DC=lan" "(sAMAccountName=jdurand)" cn mail memberOf

sudo systemctl restart php8.4-fpm

Si ldapsearch affiche la fiche de l’utilisateur, la partie réseau, DNS, certificat et compte de service est validée : il ne reste que la configuration dans GLPI. Tester hors de l’application d’abord est un réflexe de dépannage précieux.

8.4 Déclarer l’annuaire dans GLPI

Configuration > Authentification > Annuaires LDAP > Ajouter :

ChampValeur (maquette)Explication
NomAD SIOLibellé libre
Serveur par défaut / ActifOui / OuiAnnuaire utilisé à la connexion
Serveurldaps://srv-ad01.sio.lanLe nom doit correspondre au certificat du DC
Port636LDAPS
Filtre de connexion(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))Uniquement les personnes, et pas les comptes désactivés
BaseDNOU=Utilisateurs SIO,DC=sio,DC=lanOn limite la recherche à l’OU utile (moindre exposition)
Utiliser bindOuiGLPI s’identifie avant de chercher
DN du compte (pour les connexions non anonymes)svc-glpi-ldap@sio.lanLe compte de service
Mot de passe du compte(celui du compte de service)Stocké chiffré par GLPI
Champ de l’identifiantsamaccountnameL’identifiant que tapent les utilisateurs
Champ de synchronisationobjectguidIdentifiant unique et immuable : un compte renommé reste le même utilisateur

Enregistrez, puis ouvrez l’onglet Tester : GLPI doit indiquer que la connexion à l’annuaire est réussie. Dans l’onglet Utilisateurs, vérifiez la correspondance des champs (nom = sn, prénom = givenname, courriel = mail, téléphone = telephonenumber). Dans l’onglet Groupes, choisissez une recherche des groupes dans les utilisateurs avec l’attribut memberof.

8.5 Importer et connecter les utilisateurs

  • Administration > Utilisateurs > Liaison annuaire LDAP > Import de nouveaux utilisateurs : lancez la recherche, sélectionnez les comptes, puis Actions > Importer.
  • Alternative : un utilisateur AD qui se connecte pour la première fois peut être créé automatiquement (réglage dans Configuration > Authentification > Configuration). Il reçoit alors les droits définis par les règles (8.6).
  • Pour la synchronisation périodique, GLPI fournit des commandes en ligne de commande. Listez-les avec sudo -u www-data php /var/www/glpi/bin/console list ldap et lisez l’aide de celle qui synchronise les utilisateurs (--help).

8.6 Attribuer les droits selon les groupes AD

Par défaut, un utilisateur importé reçoit au mieux le profil Self-Service. On automatise le reste : Administration > Règles > Règles d’affectation d’habilitations à un utilisateur > Ajouter.

RègleCritèreActions
Techniciens ADGroupe LDAP (attribut memberof) contient CN=GG-GLPI-TechniciensEntité : SIO (racine) · Profil : Technician · Récursif : Oui
Administrateurs ADGroupe LDAP (attribut memberof) contient CN=GG-GLPI-AdminsEntité : SIO · Profil : Admin · Récursif : Oui
Tous les utilisateurs ADAnnuaire LDAP = AD SIOEntité : SIO · Profil : Self-Service

Les libellés exacts des critères peuvent varier légèrement selon la version : choisissez le critère qui porte sur le groupe de l’annuaire LDAP. Testez chaque règle avec le bouton Tester le moteur de règles.

9. Bilan cybersécurité

Complétez la grille d’audit de votre installation. Pour chaque ligne, la colonne « Vérification » indique comment le prouver : une mesure non vérifiée n’est qu’une intention.

MesureRisque couvertVérificationOK ?
Version 11.0.x la plus récenteFailles connues et publiquesAdministration > À propos ; GitHub releases
HTTPS + redirection HTTPVol d’identifiants sur le réseaucurl -I http://glpi.sio.lan → 301
DocumentRoot sur /publicAccès direct à des fichiers internesLecture du vhost
config / files / logs hors racine webFuite de configuration, webshellls -ld des dossiers (partie 4 de GLPI 1/3)
Code appartenant à rootModification du code par l’applicationstat /var/www/glpi/index.php
install.php suppriméRéinstallation / écrasementls /var/www/glpi/install/
Comptes par défaut désactivésConnexion avec glpi/glpiTentative de connexion refusée
Compte admin nominatif + 2FAAbsence de traçabilité, vol de mot de passeHistorique, écran de connexion
MariaDB en écoute locale, compte dédiéAccès direct à la basess -tlnp, SHOW GRANTS
Cookies httponly / secure / samesiteVol de session, CSRFOutils de développement du navigateur
Pare-feu : 22, 80, 443 depuis le LANExposition de servicessudo ufw status ; nmap depuis un client
Agents : certificat vérifié + authentificationFaux serveur, faux inventairesJournal de l’agent
LDAPS + compte de service limitéMot de passe AD en clair, élévationldapsearch en ldaps://, groupes du compte
Sauvegardes testéesPerte de données, rançongicielRestauration sur une VM de test

9.1 Maintenir dans le temps

  • Veille : abonnez-vous aux publications de version de GLPI (GitHub) et aux avis du CERT-FR. Un correctif de sécurité GLPI s’applique dans les jours qui suivent, pas « aux prochaines vacances ».
  • Mettre à jour proprement : sauvegarde de la base et des dossiers, puis procédure officielle de mise à jour (remplacement du code, php bin/console db:update). On ne met jamais à jour sans sauvegarde testée.
  • Sauvegarder : base (mariadb-dump), /etc/glpi (contient la clé de chiffrement — sans elle, les mots de passe stockés sont perdus) et /var/lib/glpi/files. Une sauvegarde de /etc/glpi est un secret : elle se protège comme tel.
  • Surveiller : /var/log/glpi/ et /var/log/apache2/glpi_*.log. Pour aller plus loin, envoyez-les vers votre outil de centralisation de journaux (Graylog, Wazuh).
# Exemple de sauvegarde manuelle avant une mise à jour
sudo mariadb-dump --single-transaction glpi | gzip > /root/glpi-$(date +%F).sql.gz
sudo tar -czf /root/glpi-fichiers-$(date +%F).tgz /etc/glpi /var/lib/glpi/files
sudo chmod 600 /root/glpi-*

10. Vérifier ses acquis et dépanner

10.1 Questions de synthèse

  1. Que signifie GLPI, et quelles sont ses deux grandes familles de fonctions ?
  2. Pourquoi GLPI 11 conseille-t-il de servir uniquement le dossier public ?
  3. Citez les trois dossiers que l’on sort de la racine web et ce que chacun contient.
  4. Pourquoi le code de GLPI doit-il appartenir à root et non à www-data ?
  5. Quel est l’intérêt de PHP-FPM par rapport au module PHP d’Apache ?
  6. Expliquez avec vos mots session.cookie_secure et session.cookie_httponly.
  7. Pourquoi l’option NO_SSL_CHECK de l’agent est-elle dangereuse ? Que faut-il faire à la place ?
  8. Quelle différence entre LDAP, LDAP + StartTLS et LDAPS ?
  9. Pourquoi utilise-t-on objectguid comme champ de synchronisation plutôt que l’identifiant ?
  10. Quels droits AD faut-il donner au compte de service de GLPI, et pourquoi pas davantage ?
  11. Comment le filtre de connexion empêche-t-il un compte désactivé de se connecter ?
  12. Citez trois informations de l’inventaire qui intéresseraient un attaquant, et une mesure qui limite ce risque.

10.2 Dépannage

SymptômeCause probablePiste de résolution
Apache ne redémarre pasErreur de syntaxe dans le vhost, module manquantsudo apache2ctl configtest ; journalctl -xeu apache2
Page blanche ou erreur 500PHP-FPM arrêté, extension manquante, droitssystemctl status php8.4-fpm ; /var/log/glpi/ ; /var/log/apache2/glpi_error.log
L’assistant signale un dossier non accessible en écriturePropriétaire ou chemin incorrectRelire les § 4.3 et 4.4 de GLPI 1/3, contrôler local_define.php
Erreur 503 / « Service Unavailable »Mauvais chemin du socket PHP-FPMls /run/php/ et comparer avec le vhost
L’agent n’apparaît pas dans GLPIInventaire non activé, URL fausse, certificat refuséAdministration > Inventaire ; journal de l’agent ; curl depuis le poste
Agent : erreur SSL / certificate verify failedCertificat non fourni ou nom différentVérifier CA_CERT_FILE / ca-cert-file et le nom glpi.sio.lan
Test LDAP en échecDNS, certificat de l’AD, mot de passe, BaseDNTester d’abord avec ldapsearch (8.3) ; nc -zv srv-ad01.sio.lan 636
L’utilisateur AD se connecte mais n’a aucun droitAucune règle ne correspondTester le moteur de règles ; vérifier l’attribut memberof
Les tâches planifiées ne s’exécutent pasCron absent ou mode GLPIsudo crontab -u www-data -l ; mode CLI dans les actions automatiques

10.3 Pour aller plus loin

  • Déployer l’agent sur tout un groupe de postes par GPO ou WAPT, certificat compris.
  • Remplacer le certificat autosigné par un certificat émis par l’AD CS et supprimer CA_CERT_FILE des agents.
  • Placer GLPI derrière un reverse proxy (HAProxy) et étudier ce qui change pour les en-têtes et les adresses IP des journaux.
  • Ajouter Fail2ban sur les échecs de connexion à GLPI, ou envoyer les journaux dans Graylog / Wazuh.
  • Mettre en place un collecteur de courriels pour créer des tickets par e-mail, en réfléchissant au risque d’hameçonnage.

🧠 Testez vos connaissances

5 questions. Répondez puis cliquez sur « Corriger ». Rien n’est enregistré : c’est de l’auto-évaluation.

1. Quel droit Active Directory faut-il donner au compte de service de GLPI ?

💬 La lecture de l’annuaire ne demande aucun droit d’administration : moindre privilège.

2. Quelle différence entre LDAP simple (389) et LDAPS (636) ?

💬 LDAPS est recommandé ; StartTLS chiffre après négociation sur le port 389.

3. Pourquoi utiliser objectguid comme champ de synchronisation ?

💬 L’identifiant (sAMAccountName) peut changer ; l’objectGUID, jamais.

4. Comment un compte désactivé dans l’AD est-il empêché de se connecter à GLPI ?

💬 Le filtre (!(userAccountControl:1.2.840.113556.1.4.803:=2)) écarte les comptes désactivés.

5. Pourquoi garder un compte administrateur local de secours dans GLPI ?

💬 Avec un mot de passe long, la 2FA, et rangé dans le coffre-fort de mots de passe.

© 2026 Bruno Jousseaume. Ce cours est publié sous licence CC BY-NC-SA 4.0 : vous pouvez le partager et l’adapter en citant l’auteur et un lien vers cette page, sans usage commercial, et en partageant vos adaptations sous la même licence.

Pour aller plus loin