Installer et sécuriser un serveur GLPI 10 sur Debian 12¶
1. Objectif du cours¶
Installer une instance GLPI 10 sur Debian 12 en assemblant une stack LAMP fonctionnelle, en séparant les répertoires sensibles du webroot et en verrouillant l'installation avant l'ouverture aux utilisateurs. Respecter les bonnes pratiques de compatibilité et de sécurité décrites dans le document.
2. Notions et définitions essentielles¶
- Stack LAMP : Linux (OS), Apache2 (serveur web), MariaDB (SGBD compatible GLPI) et PHP (exécution applicative).
- DocumentRoot : répertoire servi par Apache ; pour GLPI il doit pointer sur le sous-dossier public/.
- Répertoires sensibles GLPI : configuration (/etc/glpi/), données variables (/var/lib/glpi/files/), journaux (/var/log/glpi/).
- Compte applicatif MariaDB : utilisateur dédié à glpidb, jamais root, avec droits limités.
- install.php : script d'installation web à supprimer après déploiement.
3. Fonctionnement et principes¶
- Compatibilité : GLPI 10.x supporte MySQL/MariaDB et PHP 8.2 disponible sur Debian 12 ; vérifier la matrice de compatibilité avant d'installer.
- Séparation des espaces : seul /var/www/glpi/public doit être exposé par Apache ; le reste du code et les données restent hors du webroot pour limiter l'exposition.
- Principe de moindre droit : l'utilisateur MariaDB pour GLPI doit avoir des droits restreints à la seule base glpidb ; le serveur web (www-data) doit pouvoir lire le code et écrire uniquement dans les répertoires de données/journaux.
- Durcissement progressif : mise à jour du système avant installation, durcissement initial de MariaDB, initialisation correcte des fuseaux horaires et vérifications via l'assistant GLPI puis via la page "Vérifications système".
4. Commandes et manipulations¶
Regrouper par procédure (extraits et commandes essentielles présentes dans le PDF) :
- Vérifications initiales :
-
Contrôles d'état du système (nom d'hôte, IP, droits sudo, version Debian) via les utilitaires systèmes fournis.
-
Mise à jour du système et installation de la stack :
- Mise à jour : rafraîchissement et application des paquets, redémarrage si nécessaire.
-
Installation Apache2 et MariaDB en une seule action ; vérification et activation des services systemd.
-
PHP et extensions requises (GLPI 10.x) :
- Installation de PHP 8.2 et des extensions obligatoires : intl, mysql, curl, gd, xml, etc.
-
Activation du module PHP pour Apache si nécessaire.
-
Durcissement et création de la base MariaDB :
- Lancer le script de durcissement MariaDB.
-
Se connecter en root MariaDB puis créer la base glpidb avec encodage utf8mb4, créer l'utilisateur applicatif et lui accorder uniquement les droits sur glpidb ; charger les fuseaux horaires dans MariaDB et redémarrer le service.
-
Déploiement GLPI et structure des répertoires :
- Télécharger l'archive officielle (wget) et extraire dans /var/www/.
- Créer les répertoires /etc/glpi/, /var/lib/glpi/files/, /var/log/glpi/ et déplacer les contenus sensibles hors du webroot.
- Créer inc/downstream.php dans le répertoire applicatif et /etc/glpi/local_define.php pour rediriger GLPI vers les nouveaux chemins.
-
Appliquer la propriété www-data sur les répertoires concernés.
-
Configuration Apache / VirtualHost :
- Créer un VirtualHost pointant DocumentRoot sur /var/www/glpi/public et activer les règles de réécriture et le passage de l'en-tête Authorization.
-
Activer les modules et le site, tester la configuration Apache et recharger le service.
-
Post-installation et verrouillage :
- Supprimer install/install.php après validation de l'installation web.
- Exécuter l'outil de vérification de GLPI côté console pour contrôler les prérequis (commande console fournie).
(Le PDF contient les exemples et extraits de fichiers cités ; ne pas reproduire ici les scripts complets.)
5. Sécurité et bonnes pratiques¶
- Toujours mettre à jour Debian 12 avant d'installer des services (corriger noyau et paquets).
- Ne pas utiliser le compte root MariaDB pour l'application ; créer un compte applicatif avec droits limités.
- Charger les fuseaux horaires dans MariaDB pour éviter les alertes GLPI liées aux timestamps.
- Ne jamais pointer DocumentRoot sur la racine applicative complète : exposer uniquement /public/.
- Supprimer immédiatement install/install.php après installation pour éviter réinitialisation non autorisée.
- Modifier ou supprimer les comptes par défaut (glpi, tech, normal, post-only) ; créer au préalable un autre super-admin.
- Appliquer des permissions restrictives : propriétaire www-data et permissions fichiers/répertoires conservatrices (valeurs indicatives issues de la procédure officielle).
- Documenter et versionner le compte rendu de mise en service (runbook) avec architecture, chemins, comptes, tests et procédure de rollback.
6. Points essentiels à retenir pour le TSSR¶
- GLPI 10.x s'installe sur une stack LAMP compatible ; vérifier versions avant installation.
- Encodage de la base : utiliser utf8mb4 pour couvrir l'ensemble d'Unicode (emojis inclus).
- Séparer code ( /var/www/glpi/ ) et racine web ( /var/www/glpi/public ) ; déplacer config, fichiers et logs hors du webroot.
- Durcir MariaDB via mysql_secure_installation puis créer un compte applicatif limité.
- Installer PHP 8.2 avec les extensions obligatoires listées par GLPI 10.x.
- Supprimer install.php après installation et traiter immédiatement les comptes par défaut.
- Vérifier les contrôles système GLPI et corriger toutes les alertes bloquantes avant ouverture.
- Tenir un runbook versionné décrivant l'architecture, les comptes et les vérifications.
- Limiter les droits d'écriture aux répertoires réellement nécessaires (données/logs).
- Tester le refus d'accès aux ressources internes depuis un navigateur avant mise en service.
7. Tableau récapitulatif¶
| Élément | Recommandation | Risque si non respecté |
|---|---|---|
| DocumentRoot | /var/www/glpi/public | Exposition de fichiers sensibles |
| Encodage base | utf8mb4 | Perte d'emojis/caractères Unicode |
| Compte DB | utilisateur dédié, droits limités | Compromission de toutes les bases si root utilisé |
| Fichiers sensibles | /etc/glpi, /var/lib/glpi/files, /var/log/glpi | Accès public aux configs, pièces jointes, logs |
| Comptes par défaut | modifier/supprimer | Accès immédiat via identifiants connus |
8. Vérifications pratiques¶
- Vérifier l'état initial du système : nom d'hôte, IP fixe et droits sudo.
- Confirmer que Apache2 et MariaDB sont actifs après installation et configurés pour démarrer.
- Valider la version PHP active et que PHP est chargé côté serveur web.
- Accéder à l'assistant web GLPI et confirmer que le contrôle des prérequis est vert.
- Tester la connexion à la base depuis l'assistant et l'initialisation du schéma.
- Après installation, vérifier que l'URL /install/install.php n'est plus accessible.
- Consulter la page "Vérifications système" de GLPI pour traiter les alertes et confirmer leur disparition après corrections.
- Tenter d'accéder aux chemins de configuration et de données depuis un navigateur : serveur doit refuser l'accès (403/404).
- Lancer côté serveur la vérification des prérequis applicatifs fournie par GLPI pour confirmer l'absence d'erreurs bloquantes.
- Confirmer la persistance des corrections après redémarrage des services.
9. Flashcards Anki¶
Quels sont les composants d'une stack LAMP pour GLPI :: Linux, Apache2, MariaDB et PHP Quel encodage de base est recommandé pour GLPI et pourquoi :: utf8mb4, il couvre l'intégralité du standard Unicode (emojis inclus) Quel répertoire doit être exposé par Apache pour GLPI :: le sous-dossier public (DocumentRoot = /var/www/glpi/public) Où placer la configuration de GLPI selon la procédure recommandée :: /etc/glpi/ Quels répertoires contiennent les pièces jointes et les journaux :: pièces jointes et cache : /var/lib/glpi/files/ ; journaux : /var/log/glpi/ Quel script permet de durcir MariaDB après installation :: mysql_secure_installation Pourquoi ne pas utiliser root MariaDB pour GLPI :: donne un accès excessif à la base de données ; il faut un compte applicatif limité Que faire du fichier install/install.php après l'installation web :: le supprimer pour éviter la réinitialisation via l'assistant Quelles permissions propriétaires sont recommandées pour les fichiers GLPI :: propriétaire www-data avec permissions restrictives (ex. fichiers 0644 / répertoires 0755) Quelle commande GLPI permet de vérifier les prérequis depuis le terminal :: l'outil console fourni par GLPI (php bin/console system:check_requirements)