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

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

GLPI 1/3 : comprendre, installer et sécuriser le serveur

Gestion de parc et assistance avec GLPI 11 : rôle de l’outil, matrice des flux, préparation d’un serveur Debian 13, socle Apache, PHP-FPM et MariaDB, séparation du code et des données, HTTPS et durcissement.

Systèmes✎ B. Jousseaume📅 22 octobre 2026⏱ 4 h📶 Intermédiaire
RepèreContenu
PublicTechniciens systèmes et réseaux en formation ; les encadrés cybersécurité et les défis permettent d’approfondir
Durée indicative8 à 12 h de pratique selon le niveau, en trois séances : une par cours
PrérequisCommandes Linux de base, notions DNS / TCP-IP, un domaine Active Directory fonctionnel
Versions de référenceGLPI 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
CoursPartieThèmeCe que vous produisez
1/3 (ce cours)1Comprendre GLPI avant de l’installerLa matrice des flux de votre maquette
2Préparer le serveur Debian 13Un serveur nommé, résolu par le DNS, à l’heure, filtré
3Installer le socle LAMPApache, PHP-FPM, MariaDB sécurisé + base dédiée
4Déployer les fichiers de GLPIUne arborescence qui sépare code et données
5Apache, PHP-FPM et HTTPSUn site https://glpi.sio.lan durci
GLPI 2/36Installation web et premiers réglagesUn GLPI opérationnel sans compte par défaut
7L’agent GLPI (inventaire)Des postes Windows et Linux inventoriés
GLPI 3/38Liaison avec l’Active DirectoryConnexion AD + droits attribués par groupe
9Bilan cybersécuritéVotre grille d’audit complétée
10Vérifier ses acquis + dépannageRé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 sertExemple concret
Inventaire du parcConnaî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 demandesUn utilisateur signale une imprimante en panne en salle 101
Gestion administrativeContrats, garanties, licences, fournisseursAlerte 30 jours avant la fin d’une garantie
Base de connaissancesCapitaliser les solutionsFiche « réinitialiser un mot de passe »
Tableaux de bordPiloter l’activité du serviceDé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.

SourceDestinationPort / protocoleRôle du flux
Navigateur (utilisateur, technicien)SRV-GLPI443/TCP — HTTPSUtiliser l’interface web
NavigateurSRV-GLPI80/TCP — HTTPUniquement une redirection vers HTTPS
Agent GLPI (poste)SRV-GLPI443/TCP — HTTPSEnvoyer l’inventaire (JSON)
SRV-GLPISRV-AD01636/TCP — LDAPSVérifier un mot de passe, lire les comptes et groupes
Apache / PHP-FPMMariaDB (même serveur)3306 — local uniquementLire et écrire les données GLPI
SRV-GLPI (optionnel)Agent GLPI62354/TCPRéveiller un agent à distance (désactivé par défaut ici)
Poste d’administrationSRV-GLPI22/TCP — SSHAdministrer 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.

MachineSystèmeAdresse IPRôle
SRV-AD01Windows Server 2022/2025192.168.50.10Contrôleur du domaine sio.lan, DNS (AD CS conseillé pour LDAPS)
SRV-GLPIDebian 13 (sans interface graphique)192.168.50.20Serveur GLPI, nom DNS glpi.sio.lan
PC-W11-01Windows 11, membre du domaineDHCP ou 192.168.50.101Poste client — agent Windows
PC-DEB-01Debian 13192.168.50.102Poste client — agent Linux (facultatif)
PasserellepfSense ou routeur du plateau192.168.50.254Accè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}
ExtensionPourquoi GLPI en a besoin
mysqlDialoguer avec MariaDB
intl, mbstringLangues, formats de date, caractères accentués (UTF-8)
gdGénérer et manipuler des images
curl, opensslAccès sécurisé à des ressources distantes (marketplace, flux RSS), HTTPS, OAuth
zip, bz2Archives (marketplace, plugins)
xmlTraitement XML (imports, échanges)
bcmathCalculs de précision (QR codes) — obligatoire depuis GLPI 11
ldapLiaison avec l’Active Directory (partie 8)
opcacheCache 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.

DossierContenuEmplacement finalLe serveur web peut-il écrire ?
Code de GLPIFichiers PHP de l’application/var/www/glpiNon (propriétaire root)
Racine webSeul point d’entrée HTTP/var/www/glpi/publicNon
configConnexion à la base, clé de chiffrement/etc/glpiOui (à l’installation)
filesDocuments, cache, sessions, plugins/var/lib/glpi/filesOui
JournauxFichiers de log de GLPI/var/log/glpiOui
marketplacePlugins installés depuis la marketplace/var/www/glpi/marketplaceOui (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
DirectiveAttaque limitéeExplication simple
cookie_httponlyVol de session par XSSUn script injecté dans une page ne peut pas lire le cookie de session
cookie_secureÉcoute réseauLe navigateur n’envoie jamais le cookie sur une connexion non chiffrée
cookie_samesiteCSRFUn site tiers ne peut pas faire agir votre session GLPI à votre insu
expose_phpReconnaissanceOn 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.

1. Quelles sont les deux grandes familles de fonctions de GLPI ?

💬 GLPI est un outil d’ITSM : savoir ce que l’on possède (inventaire) et organiser l’aide apportée (tickets).

2. Pourquoi le DocumentRoot d’Apache pointe-t-il vers /var/www/glpi/public ?

💬 Tout passe par le routeur index.php ; le reste du code reste hors de portée du navigateur.

3. Pourquoi le code de GLPI appartient-il à root et non à www-data ?

💬 C’est la défense en profondeur : www-data n’écrit que dans les dossiers de données, hors de la racine web.

4. Le port 3306 de MariaDB doit-il être ouvert dans le pare-feu du serveur GLPI ?

💬 Un service qui n’a pas à être joignable depuis le réseau ne doit pas l’être.

5. Que protège session.cookie_httponly = On ?

💬 Un script injecté dans une page ne peut pas lire un cookie HttpOnly.

© 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