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.
| Usage | Ce que fait GLPI | Intérêt |
|---|---|---|
| Authentification | Transmet l’identifiant et le mot de passe saisis à l’AD, qui répond oui / non | Un seul mot de passe, politique de l’AD appliquée |
| Import / synchronisation | Lit nom, prénom, courriel, service, groupes | Fiches utilisateurs à jour sans saisie |
| Habilitations | Applique des règles selon les groupes AD | Droits gérés au même endroit que le reste du SI |
| Cycle de vie | Réagit quand un compte est désactivé ou supprimé dans l’AD | Un 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 ?
| Mode | Port | Mot de passe sur le réseau | Usage |
|---|---|---|---|
| LDAP simple | 389/TCP | En clair | À éviter : uniquement pour un premier test isolé |
| LDAP + StartTLS | 389/TCP | Chiffré après négociation TLS | Possible (option « Utiliser TLS » dans GLPI) |
| LDAPS | 636/TCP | Chiffré dès la connexion | Recommandé — 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 :
| Champ | Valeur (maquette) | Explication |
|---|---|---|
| Nom | AD SIO | Libellé libre |
| Serveur par défaut / Actif | Oui / Oui | Annuaire utilisé à la connexion |
| Serveur | ldaps://srv-ad01.sio.lan | Le nom doit correspondre au certificat du DC |
| Port | 636 | LDAPS |
| 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 |
| BaseDN | OU=Utilisateurs SIO,DC=sio,DC=lan | On limite la recherche à l’OU utile (moindre exposition) |
| Utiliser bind | Oui | GLPI s’identifie avant de chercher |
| DN du compte (pour les connexions non anonymes) | svc-glpi-ldap@sio.lan | Le compte de service |
| Mot de passe du compte | (celui du compte de service) | Stocké chiffré par GLPI |
| Champ de l’identifiant | samaccountname | L’identifiant que tapent les utilisateurs |
| Champ de synchronisation | objectguid | Identifiant 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 ldapet 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ègle | Critère | Actions |
|---|---|---|
| Techniciens AD | Groupe LDAP (attribut memberof) contient CN=GG-GLPI-Techniciens | Entité : SIO (racine) · Profil : Technician · Récursif : Oui |
| Administrateurs AD | Groupe LDAP (attribut memberof) contient CN=GG-GLPI-Admins | Entité : SIO · Profil : Admin · Récursif : Oui |
| Tous les utilisateurs AD | Annuaire LDAP = AD SIO | Entité : 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.
| Mesure | Risque couvert | Vérification | OK ? |
|---|---|---|---|
| Version 11.0.x la plus récente | Failles connues et publiques | Administration > À propos ; GitHub releases | |
| HTTPS + redirection HTTP | Vol d’identifiants sur le réseau | curl -I http://glpi.sio.lan → 301 | |
| DocumentRoot sur /public | Accès direct à des fichiers internes | Lecture du vhost | |
| config / files / logs hors racine web | Fuite de configuration, webshell | ls -ld des dossiers (partie 4 de GLPI 1/3) | |
| Code appartenant à root | Modification du code par l’application | stat /var/www/glpi/index.php | |
| install.php supprimé | Réinstallation / écrasement | ls /var/www/glpi/install/ | |
| Comptes par défaut désactivés | Connexion avec glpi/glpi | Tentative de connexion refusée | |
| Compte admin nominatif + 2FA | Absence de traçabilité, vol de mot de passe | Historique, écran de connexion | |
| MariaDB en écoute locale, compte dédié | Accès direct à la base | ss -tlnp, SHOW GRANTS | |
| Cookies httponly / secure / samesite | Vol de session, CSRF | Outils de développement du navigateur | |
| Pare-feu : 22, 80, 443 depuis le LAN | Exposition de services | sudo ufw status ; nmap depuis un client | |
| Agents : certificat vérifié + authentification | Faux serveur, faux inventaires | Journal de l’agent | |
| LDAPS + compte de service limité | Mot de passe AD en clair, élévation | ldapsearch en ldaps://, groupes du compte | |
| Sauvegardes testées | Perte de données, rançongiciel | Restauration 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/glpiest 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
- Que signifie GLPI, et quelles sont ses deux grandes familles de fonctions ?
- Pourquoi GLPI 11 conseille-t-il de servir uniquement le dossier
public? - Citez les trois dossiers que l’on sort de la racine web et ce que chacun contient.
- Pourquoi le code de GLPI doit-il appartenir à root et non à
www-data? - Quel est l’intérêt de PHP-FPM par rapport au module PHP d’Apache ?
- Expliquez avec vos mots
session.cookie_secureetsession.cookie_httponly. - Pourquoi l’option
NO_SSL_CHECKde l’agent est-elle dangereuse ? Que faut-il faire à la place ? - Quelle différence entre LDAP, LDAP + StartTLS et LDAPS ?
- Pourquoi utilise-t-on
objectguidcomme champ de synchronisation plutôt que l’identifiant ? - Quels droits AD faut-il donner au compte de service de GLPI, et pourquoi pas davantage ?
- Comment le filtre de connexion empêche-t-il un compte désactivé de se connecter ?
- Citez trois informations de l’inventaire qui intéresseraient un attaquant, et une mesure qui limite ce risque.
10.2 Dépannage
| Symptôme | Cause probable | Piste de résolution |
|---|---|---|
| Apache ne redémarre pas | Erreur de syntaxe dans le vhost, module manquant | sudo apache2ctl configtest ; journalctl -xeu apache2 |
| Page blanche ou erreur 500 | PHP-FPM arrêté, extension manquante, droits | systemctl status php8.4-fpm ; /var/log/glpi/ ; /var/log/apache2/glpi_error.log |
| L’assistant signale un dossier non accessible en écriture | Propriétaire ou chemin incorrect | Relire les § 4.3 et 4.4 de GLPI 1/3, contrôler local_define.php |
| Erreur 503 / « Service Unavailable » | Mauvais chemin du socket PHP-FPM | ls /run/php/ et comparer avec le vhost |
| L’agent n’apparaît pas dans GLPI | Inventaire non activé, URL fausse, certificat refusé | Administration > Inventaire ; journal de l’agent ; curl depuis le poste |
| Agent : erreur SSL / certificate verify failed | Certificat non fourni ou nom différent | Vérifier CA_CERT_FILE / ca-cert-file et le nom glpi.sio.lan |
| Test LDAP en échec | DNS, certificat de l’AD, mot de passe, BaseDN | Tester d’abord avec ldapsearch (8.3) ; nc -zv srv-ad01.sio.lan 636 |
| L’utilisateur AD se connecte mais n’a aucun droit | Aucune règle ne correspond | Tester le moteur de règles ; vérifier l’attribut memberof |
| Les tâches planifiées ne s’exécutent pas | Cron absent ou mode GLPI | sudo 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_FILEdes 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.
© 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.