| Repère | Contenu |
|---|---|
| Public | Techniciens systèmes et réseaux en formation ; les encadrés cybersécurité et les défis permettent d’approfondir |
| Durée indicative | 8 à 12 h de pratique selon le niveau, en trois séances : une par cours |
| Prérequis | Commandes Linux de base, notions DNS / TCP-IP, un domaine Active Directory fonctionnel |
| Versions de référence | GLPI 11.0.8 (juin 2026) · agent GLPI 1.20 (septembre 2026) · Debian 13 Trixie · PHP 8.4 Toujours vérifier la dernière version sur le GitHub officiel avant de commencer |
| Cours | Partie | Thème | Ce que vous produisez |
|---|---|---|---|
| 1/3 (ce cours) | 1 | Comprendre GLPI avant de l’installer | La matrice des flux de votre maquette |
| 2 | Préparer le serveur Debian 13 | Un serveur nommé, résolu par le DNS, à l’heure, filtré | |
| 3 | Installer le socle LAMP | Apache, PHP-FPM, MariaDB sécurisé + base dédiée | |
| 4 | Déployer les fichiers de GLPI | Une arborescence qui sépare code et données | |
| 5 | Apache, PHP-FPM et HTTPS | Un site https://glpi.sio.lan durci | |
| GLPI 2/3 | 6 | Installation web et premiers réglages | Un GLPI opérationnel sans compte par défaut |
| 7 | L’agent GLPI (inventaire) | Des postes Windows et Linux inventoriés | |
| GLPI 3/3 | 8 | Liaison avec l’Active Directory | Connexion AD + droits attribués par groupe |
| 9 | Bilan cybersécurité | Votre grille d’audit complétée | |
| 10 | Vérifier ses acquis + dépannage | Réponses aux questions de synthèse |
1. Comprendre GLPI avant de l’installer
GLPI (Gestion Libre de Parc Informatique) est un logiciel libre, créé en 2003 et maintenu par l’éditeur français Teclib’. C’est un outil d’ITSM (IT Service Management) : il aide un service informatique à savoir ce qu’il possède (inventaire) et à organiser l’aide qu’il apporte aux utilisateurs (tickets). La version majeure 11 est sortie le 1er octobre 2025.
1.1 Ce que fait GLPI
| Fonction | À quoi ça sert | Exemple concret |
|---|---|---|
| Inventaire du parc | Connaître le matériel et les logiciels, automatiquement | « Combien de postes ont encore 8 Go de RAM ? » |
| Assistance (tickets) | Recevoir, suivre et tracer les incidents et les demandes | Un utilisateur signale une imprimante en panne en salle 101 |
| Gestion administrative | Contrats, garanties, licences, fournisseurs | Alerte 30 jours avant la fin d’une garantie |
| Base de connaissances | Capitaliser les solutions | Fiche « réinitialiser un mot de passe » |
| Tableaux de bord | Piloter l’activité du service | Délai moyen de résolution par technicien |
1.2 Architecture : qui parle à qui ?
GLPI est une application web écrite en PHP. Elle repose sur un serveur web (Apache), un moteur PHP (PHP-FPM) et une base de données (MariaDB). Autour d’elle gravitent les navigateurs des utilisateurs, les agents installés sur les postes et l’annuaire Active Directory.
| Source | Destination | Port / protocole | Rôle du flux |
|---|---|---|---|
| Navigateur (utilisateur, technicien) | SRV-GLPI | 443/TCP — HTTPS | Utiliser l’interface web |
| Navigateur | SRV-GLPI | 80/TCP — HTTP | Uniquement une redirection vers HTTPS |
| Agent GLPI (poste) | SRV-GLPI | 443/TCP — HTTPS | Envoyer l’inventaire (JSON) |
| SRV-GLPI | SRV-AD01 | 636/TCP — LDAPS | Vérifier un mot de passe, lire les comptes et groupes |
| Apache / PHP-FPM | MariaDB (même serveur) | 3306 — local uniquement | Lire et écrire les données GLPI |
| SRV-GLPI (optionnel) | Agent GLPI | 62354/TCP | Réveiller un agent à distance (désactivé par défaut ici) |
| Poste d’administration | SRV-GLPI | 22/TCP — SSH | Administrer le serveur |
1.3 La maquette
Le domaine sio.lan et les adresses sont fictifs : adaptez noms et adresses à votre environnement. Ils sont repris dans les trois cours.
| Machine | Système | Adresse IP | Rôle |
|---|---|---|---|
| SRV-AD01 | Windows Server 2022/2025 | 192.168.50.10 | Contrôleur du domaine sio.lan, DNS (AD CS conseillé pour LDAPS) |
| SRV-GLPI | Debian 13 (sans interface graphique) | 192.168.50.20 | Serveur GLPI, nom DNS glpi.sio.lan |
| PC-W11-01 | Windows 11, membre du domaine | DHCP ou 192.168.50.101 | Poste client — agent Windows |
| PC-DEB-01 | Debian 13 | 192.168.50.102 | Poste client — agent Linux (facultatif) |
| Passerelle | pfSense ou routeur du plateau | 192.168.50.254 | Accès Internet pour les mises à jour |
2. Préparer le serveur Debian 13
Une VM modeste suffit pour une maquette : 2 vCPU, 4 Go de RAM, 20 Go de disque (valeurs indicatives, à augmenter en production selon la taille du parc). Installez Debian 13 sans environnement graphique, avec seulement « serveur SSH » et « utilitaires usuels du système » : chaque paquet inutile est une surface d’attaque en plus.
2.1 Nom de la machine et adresse IP fixe
Un serveur a une adresse fixe et un nom stable : les agents et les utilisateurs doivent toujours le retrouver.
sudo hostnamectl set-hostname srv-glpi
sudo nano /etc/hosts
Ligne à adapter dans /etc/hosts :
127.0.1.1 srv-glpi.sio.lan srv-glpi
Configuration réseau statique dans /etc/network/interfaces (vérifiez le nom de votre carte avec ip -br a) :
auto ens18
iface ens18 inet static
address 192.168.50.20/24
gateway 192.168.50.254
sudo nano /etc/resolv.conf
nameserver 192.168.50.10
search sio.lan
sudo systemctl restart networking
ip -br a ; ip route
2.2 Enregistrement DNS de l’application
Les utilisateurs taperont https://glpi.sio.lan, pas une adresse IP. Sur SRV-AD01, dans une console PowerShell administrateur :
Add-DnsServerResourceRecordA -ZoneName "sio.lan" -Name "glpi" -IPv4Address "192.168.50.20"
Puis vérifiez depuis le serveur Debian :
getent hosts glpi.sio.lan
getent hosts srv-ad01.sio.lan
2.3 L’heure : un détail qui n’en est pas un
sudo timedatectl set-timezone Europe/Paris
sudo nano /etc/systemd/timesyncd.conf
Dans la section [Time] du fichier :
NTP=192.168.50.10
sudo systemctl restart systemd-timesyncd
timedatectl
Une horloge fausse casse la validation des certificats TLS et rend les journaux inexploitables lors d’une enquête : impossible de corréler une connexion suspecte dans GLPI avec un événement de l’AD si les deux serveurs n’ont pas la même heure.
2.4 Mises à jour et pare-feu
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.50.0/24 to any port 22 proto tcp
sudo ufw allow from 192.168.50.0/24 to any port 443 proto tcp
sudo ufw allow from 192.168.50.0/24 to any port 80 proto tcp
sudo ufw enable
sudo ufw status verbose
3. Installer le socle LAMP
Linux + Apache + MariaDB + PHP. Sur Debian 13, PHP 8.4 est fourni par les dépôts officiels ; GLPI 11 exige au minimum PHP 8.2 et MariaDB 10.6 (ou MySQL 8.0). On utilise PHP-FPM plutôt que le module PHP d’Apache : PHP tourne alors comme un service séparé, plus performant et plus facile à isoler.
3.1 Paquets
sudo apt install -y apache2 php8.4-fpm mariadb-server
sudo apt install -y php8.4-{curl,gd,intl,mysql,zip,bcmath,mbstring,xml,bz2,ldap,opcache}
| Extension | Pourquoi GLPI en a besoin |
|---|---|
| mysql | Dialoguer avec MariaDB |
| intl, mbstring | Langues, formats de date, caractères accentués (UTF-8) |
| gd | Générer et manipuler des images |
| curl, openssl | Accès sécurisé à des ressources distantes (marketplace, flux RSS), HTTPS, OAuth |
| zip, bz2 | Archives (marketplace, plugins) |
| xml | Traitement XML (imports, échanges) |
| bcmath | Calculs de précision (QR codes) — obligatoire depuis GLPI 11 |
| ldap | Liaison avec l’Active Directory (partie 8) |
| opcache | Cache du code PHP compilé : de meilleures performances |
3.2 Sécuriser MariaDB
sudo mariadb-secure-installation
Répondez de façon à : supprimer les utilisateurs anonymes, interdire la connexion root à distance, supprimer la base de test. Vérifiez ensuite que MariaDB n’écoute que sur la boucle locale :
sudo ss -tlnp | grep 3306
# Attendu : 127.0.0.1:3306 (et surtout pas 0.0.0.0:3306)
3.3 Créer la base et un utilisateur dédié
Principe de moindre privilège : une application = une base = un utilisateur qui n’a des droits que sur cette base. On ne donne jamais le compte root de MariaDB à une application. Générez d’abord un mot de passe robuste :
openssl rand -base64 24
sudo mariadb
Dans le client MariaDB :
CREATE DATABASE glpi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'glpi'@'localhost' IDENTIFIED BY 'MotDePasseGenere';
GRANT ALL PRIVILEGES ON glpi.* TO 'glpi'@'localhost';
GRANT SELECT ON mysql.time_zone_name TO 'glpi'@'localhost';
FLUSH PRIVILEGES;
EXIT;
La ligne time_zone_name permet à GLPI de gérer les fuseaux horaires. Il faut aussi charger ces fuseaux dans MariaDB (sinon l’assistant affichera un avertissement) :
sudo mariadb-tzinfo-to-sql /usr/share/zoneinfo | sudo mariadb mysql
4. Déployer les fichiers de GLPI
4.1 Télécharger depuis la source officielle
cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/11.0.8/glpi-11.0.8.tgz
sha256sum glpi-11.0.8.tgz # notez l'empreinte dans votre documentation
sudo tar -xzf glpi-11.0.8.tgz -C /var/www/
ls /var/www/glpi
On ne télécharge jamais GLPI depuis un site miroir ou un lien trouvé sur un forum : une archive modifiée peut contenir une porte dérobée. Noter l’empreinte SHA-256 permet de prouver plus tard quelle archive exacte a été installée (traçabilité).
4.2 Séparer le code et les données
Par défaut, l’archive contient tout au même endroit : le code (qui ne doit jamais changer), la configuration (qui contient le mot de passe de la base et la clé de chiffrement) et les données (documents joints aux tickets, cache, sessions). On applique la recommandation de l’éditeur : seul le dossier public est exposé au web, et les données sensibles sortent de /var/www.
| Dossier | Contenu | Emplacement final | Le serveur web peut-il écrire ? |
|---|---|---|---|
| Code de GLPI | Fichiers PHP de l’application | /var/www/glpi | Non (propriétaire root) |
| Racine web | Seul point d’entrée HTTP | /var/www/glpi/public | Non |
| config | Connexion à la base, clé de chiffrement | /etc/glpi | Oui (à l’installation) |
| files | Documents, cache, sessions, plugins | /var/lib/glpi/files | Oui |
| Journaux | Fichiers de log de GLPI | /var/log/glpi | Oui |
| marketplace | Plugins installés depuis la marketplace | /var/www/glpi/marketplace | Oui (si vous l’utilisez) |
sudo mv /var/www/glpi/config /etc/glpi
sudo mkdir -p /var/lib/glpi /var/log/glpi
sudo mv /var/www/glpi/files /var/lib/glpi/files
4.3 Indiquer à GLPI où se trouvent ses dossiers
Premier fichier : /var/www/glpi/inc/downstream.php, lu au démarrage de GLPI, qui indique où se trouve la configuration :
sudo nano /var/www/glpi/inc/downstream.php
<?php
define('GLPI_CONFIG_DIR', '/etc/glpi/');
if (file_exists(GLPI_CONFIG_DIR . '/local_define.php')) {
require_once GLPI_CONFIG_DIR . '/local_define.php';
}
Second fichier : /etc/glpi/local_define.php, qui déclare les dossiers de données et de journaux :
sudo nano /etc/glpi/local_define.php
<?php
define('GLPI_VAR_DIR', '/var/lib/glpi/files');
define('GLPI_LOG_DIR', '/var/log/glpi');
4.4 Les droits : le serveur web ne modifie pas son propre code
# Le code appartient à root : lisible, mais pas modifiable par Apache/PHP
sudo chown -R root:root /var/www/glpi
sudo find /var/www/glpi -type d -exec chmod 755 {} \;
sudo find /var/www/glpi -type f -exec chmod 644 {} \;
# Seuls les dossiers de données sont confiés à www-data
sudo chown -R www-data:www-data /etc/glpi /var/lib/glpi /var/log/glpi /var/www/glpi/marketplace
sudo chmod 750 /etc/glpi /var/lib/glpi /var/log/glpi
5. Configurer Apache, PHP-FPM et HTTPS
On passe en HTTPS dès le départ : les identifiants des utilisateurs (y compris leur mot de passe AD une fois la liaison de la partie 8 en place) et les inventaires transitent par ce site. Les envoyer en clair, même « juste pour un essai », c’est prendre une mauvaise habitude.
5.1 Le certificat
En maquette, on génère un certificat autosigné. Il chiffre correctement les échanges, mais aucun poste ne lui fait confiance par défaut : il faudra le déclarer aux agents (partie 7, dans GLPI 2/3).
sudo openssl req -x509 -newkey rsa:3072 -sha256 -days 397 -nodes \
-keyout /etc/ssl/private/glpi.sio.lan.key \
-out /etc/ssl/certs/glpi.sio.lan.crt \
-subj "/CN=glpi.sio.lan" \
-addext "subjectAltName=DNS:glpi.sio.lan,IP:192.168.50.20"
sudo chmod 600 /etc/ssl/private/glpi.sio.lan.key
5.2 L’hôte virtuel Apache
sudo nano /etc/apache2/sites-available/glpi.conf
# Tout accès en HTTP est redirigé vers HTTPS
<VirtualHost *:80>
ServerName glpi.sio.lan
Redirect permanent / https://glpi.sio.lan/
</VirtualHost>
<VirtualHost *:443>
ServerName glpi.sio.lan
DocumentRoot /var/www/glpi/public
SSLEngine on
SSLCertificateFile /etc/ssl/certs/glpi.sio.lan.crt
SSLCertificateKeyFile /etc/ssl/private/glpi.sio.lan.key
# En-têtes de sécurité
Header always set Strict-Transport-Security "max-age=31536000"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
<Directory /var/www/glpi/public>
Require all granted
RewriteEngine On
# Transmettre l'en-tête Authorization à PHP (API, agents)
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Tout passe par le routeur de GLPI, sauf les fichiers existants
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</Directory>
# PHP est confié au service PHP-FPM
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog /var/log/apache2/glpi_error.log
CustomLog /var/log/apache2/glpi_access.log combined
</VirtualHost>
sudo a2enmod ssl rewrite headers proxy_fcgi setenvif
sudo a2dissite 000-default.conf
sudo a2ensite glpi.conf
sudo apache2ctl configtest # doit répondre « Syntax OK »
sudo systemctl restart apache2
5.3 Durcir PHP
On modifie le fichier de PHP-FPM (et non celui d’Apache) : /etc/php/8.4/fpm/php.ini. Recherchez chaque directive avec Ctrl+W dans nano et ajustez sa valeur :
sudo nano /etc/php/8.4/fpm/php.ini
expose_php = Off ; ne pas annoncer la version de PHP
session.cookie_httponly = On ; le cookie de session est invisible pour JavaScript
session.cookie_secure = On ; le cookie ne circule qu'en HTTPS
session.cookie_samesite = Lax ; limite les attaques CSRF
upload_max_filesize = 20M ; pièces jointes des tickets
post_max_size = 20M
sudo systemctl restart php8.4-fpm
| Directive | Attaque limitée | Explication simple |
|---|---|---|
| cookie_httponly | Vol de session par XSS | Un script injecté dans une page ne peut pas lire le cookie de session |
| cookie_secure | Écoute réseau | Le navigateur n’envoie jamais le cookie sur une connexion non chiffrée |
| cookie_samesite | CSRF | Un site tiers ne peut pas faire agir votre session GLPI à votre insu |
| expose_php | Reconnaissance | On ne facilite pas la recherche de failles connues pour une version précise |
5.4 Rendre Apache plus discret
sudo nano /etc/apache2/conf-available/security.conf
Donnez ces valeurs aux deux directives :
ServerTokens Prod
ServerSignature Off
sudo systemctl reload apache2
🧠 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.