Chapitre 116 minIntermédiaire
Services Linux : préparer un serveur Debian 13
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- retrouver les six éléments d'un service : paquet, unité, compte, port, configuration, journaux ;
- préparer un serveur Debian 13 : adresse fixe, nom complet, DNS de l'annuaire, heure ;
- activer les mises à jour de sécurité automatiques ;
- appliquer la même méthode à chaque service : installer, configurer, vérifier, tester, sécuriser, documenter.
3 exercices corrigés1 schéma
Un service Linux est un programme qui tourne en arrière-plan sur un serveur, démarré et surveillé par systemd, et qui répond sur le réseau à d'autres machines : un serveur web, une base de données, un relais de messagerie, un partage de fichiers. Ce chapitre explique comment un service est organisé sous Debian, présente les serveurs Linux de l'infrastructure fil rouge, et prépare proprement un serveur Debian 13 avant d'y installer quoi que ce soit : adresse fixe, nom, DNS, heure et mises à jour.
Ce qu'on appelle un service sous Linux
Sous Linux, un service est un démon (daemon) : un processus sans fenêtre ni terminal, lancé au démarrage, qui attend des requêtes. Quel que soit le logiciel, tu retrouves toujours les mêmes six éléments. Les connaître, c'est savoir où chercher quand quelque chose ne marche pas.
| Élément | Où le trouver | Exemple avec Nginx |
|---|---|---|
| Le paquet qui l'installe | apt show <paquet> | nginx |
| L'unité systemd qui le démarre | systemctl status <unité> | nginx.service |
| Le compte système qui l'exécute | ps -o user,cmd -C <programme> | www-data pour les processus de travail, root pour le processus maître |
| Le port sur lequel il écoute | ss -tlnp | TCP 80 et 443 |
| Ses fichiers de configuration | /etc/<service>/ | /etc/nginx/nginx.conf, /etc/nginx/sites-available/ |
| Ses journaux | journalctl -u <unité> et /var/log/<service>/ | /var/log/nginx/access.log et error.log |
Le processus maître démarre souvent en root pour ouvrir un port inférieur à 1024, puis il confie le travail à des processus qui tournent sous un compte dédié sans privilège. Si une faille du service est exploitée, l'attaquant obtient les droits de ce compte, pas ceux de root : c'est le principe du moindre privilège appliqué aux services.
Les commandes systemctl et journalctl, les comptes, les droits et les paquets sont expliqués dans le cours Linux — Administration système. Ce cours-ci suppose que tu sais t'en servir et qu'un serveur Debian 13 est installé, sans interface graphique, avec un accès SSH par clé.
Les serveurs Linux de Sorbier Logistique
Les exemples se passent chez Sorbier Logistique, la PME de transport et d'entreposage des cours Windows Server, Routage et commutation et Cybersécurité des infrastructures. Son réseau 192.168.10.0/24 est découpé en VLAN ; un pare-feu pfSense route et filtre les flux entre eux ; l'annuaire Active Directory ad.sorbier.example (nom NetBIOS SORBIER) fournit aussi le DNS, le DHCP et l'heure du réseau local. Tu es en alternance au service informatique, avec Antoine Mercier, le responsable, et les techniciens Chloé Lambert et Moussa Diallo.
Les serveurs Windows existent déjà. Ce cours ajoute les serveurs Linux, tous sous Debian 13 et virtualisés sur l'hyperviseur Proxmox VE de l'entreprise :
| Serveur | Adresse | VLAN | Ce qu'il fait dans ce cours |
|---|---|---|---|
srv-ad | 192.168.10.177 | 20 SERVEURS | Contrôleur de domaine Windows : annuaire, DNS, DHCP, NTP (existant) |
srv-fichiers | 192.168.10.178 | 20 SERVEURS | Partages Windows des services (existant) |
srv-gestion | 192.168.10.179 | 20 SERVEURS | Application de gestion, API en TCP 8443, sous Windows (existant) |
srv-ad2 | 192.168.10.181 | 20 SERVEURS | Second contrôleur de domaine (existant) |
srv-journaux | 192.168.10.180 | 20 SERVEURS | Réception des journaux en syslog TLS, serveur Wazuh, supervision (existant) |
srv-glpi | 192.168.10.184 | 20 SERVEURS | Nouveau. GLPI sur Nginx, PHP-FPM et MariaDB, joint au domaine, relais de messagerie pour ses notifications |
srv-partages | 192.168.10.185 | 20 SERVEURS | Nouveau. Partage Samba pour l'entrepôt et export NFS pour les sauvegardes des serveurs Linux |
srv-web | 192.168.10.225 | 60 DMZ | Site public de suivi des livraisons suivi.sorbier-logistique.fr, sur Nginx et PHP-FPM, certificat Let's Encrypt |
Les postes des salariés sont dans le VLAN 10 (192.168.10.64/26), le poste d'administration dans le VLAN 99 (192.168.10.208/28, adresse .209). Le site de suivi est publié sur Internet par l'adresse publique du pare-feu, 203.0.113.17 (une adresse réservée à la documentation, comme les noms en .example).
Pourquoi Debian 13
Debian 13 « Trixie », sortie le 9 août 2025, est la version stable de Debian en 2026 (dernière version intermédiaire : 13.7, le 12 septembre 2026). Elle reçoit les correctifs de sécurité de l'équipe Debian jusqu'au 9 août 2028, puis ceux du projet LTS jusqu'au 30 juin 2030. Debian est libre, stable, très répandue sur les serveurs, et c'est la base de Proxmox VE. Ubuntu Server (24.04 LTS ou 26.04 LTS) se configure presque de la même façon : seuls les numéros de version des paquets changent.
Les versions des services de ce cours sont celles que fournissent les dépôts de Debian 13 :
| Service | Paquet | Version dans Debian 13 |
|---|---|---|
| Serveur web | nginx | 1.26 |
| Serveur web | apache2 | 2.4 |
| PHP et PHP-FPM | php8.4-fpm | 8.4 |
| Base de données | mariadb-server | 11.8 |
| Certificats Let's Encrypt | certbot, python3-certbot-nginx | 4.0 |
| Jonction à l'annuaire | realmd, sssd, adcli | 0.17, 2.10, 0.9 |
| Partage Windows | samba, winbind | 4.22 |
| Partage NFS | nfs-kernel-server | 2.8 |
| Répartition de charge | haproxy, keepalived | 3.0, 2.3 |
| Messagerie | postfix, dovecot-imapd | 3.10, 2.4 |
| Journaux | rsyslog | 8.2504 |
| Pare-feu local | nftables | 1.1 |
| Protection contre les attaques par force brute | fail2ban | 1.1 |
Pour connaître la version exacte installée sur ta machine : apt policy nginx (ou le nom du paquet), ou l'option -v du programme (nginx -v, php -v, mariadb --version).
Préparer le serveur : adresse fixe, nom, DNS et heure
Un serveur ne prend pas son adresse au hasard dans le DHCP : ses clients, le pare-feu et le DNS doivent le trouver toujours au même endroit. Voici la préparation de srv-glpi, à refaire sur chaque serveur avec ses propres valeurs.
L'adresse IP fixe. Sous Debian 13 installé sans interface graphique, le réseau est géré par ifupdown, dans le fichier /etc/network/interfaces. Dans une VM Proxmox avec une carte VirtIO, l'interface s'appelle en général ens18 (vérifie avec ip -br link).
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto ens18
iface ens18 inet static
address 192.168.10.184/28
gateway 192.168.10.190
sudo systemctl restart networking
ip -br address show ens18
# ens18 UP 192.168.10.184/28
La passerelle .190 est l'interface du pare-feu dans le VLAN 20. Si tu modifies ce fichier à distance, une faute de frappe te coupe de la machine : garde la console de Proxmox ouverte à côté.
Le nom et le domaine. Le nom court est srv-glpi, le nom complet (FQDN) srv-glpi.ad.sorbier.example. La jonction au domaine du chapitre 8 et les certificats du chapitre 6 en dépendent.
sudo hostnamectl set-hostname srv-glpi
Dans /etc/hosts, la ligne 127.0.1.1 que l'installateur a écrite doit porter le nom complet en premier :
127.0.0.1 localhost
127.0.1.1 srv-glpi.ad.sorbier.example srv-glpi
hostname -f
# srv-glpi.ad.sorbier.example
Le DNS. Les serveurs du réseau local utilisent les DNS de l'annuaire, jamais un DNS public : sans eux, ils ne trouvent ni les contrôleurs de domaine, ni les noms internes. Avec ifupdown et sans le paquet resolvconf, le fichier /etc/resolv.conf s'écrit à la main :
# /etc/resolv.conf
search ad.sorbier.example
nameserver 192.168.10.177
nameserver 192.168.10.181
getent hosts srv-ad.ad.sorbier.example
# 192.168.10.177 srv-ad.ad.sorbier.example
Dans l'autre sens, l'enregistrement DNS du serveur se crée dans la zone ad.sorbier.example, sur le contrôleur de domaine (le cours Windows Server détaille la console DNS) :
Add-DnsServerResourceRecordA -ZoneName "ad.sorbier.example" -Name "srv-glpi" `
-IPv4Address "192.168.10.184" -CreatePtr
L'heure. Kerberos, utilisé par l'annuaire, refuse une authentification si l'horloge du client s'écarte de plus de 5 minutes de celle du contrôleur ; des journaux mal horodatés sont inexploitables lors d'un incident. Debian 13 synchronise son horloge avec chrony, qui interroge par défaut le pool public 2.debian.pool.ntp.org. Sur le réseau de Sorbier, les serveurs prennent l'heure sur les contrôleurs de domaine. Crée /etc/chrony/sources.d/sorbier.sources :
server srv-ad.ad.sorbier.example iburst
server srv-ad2.ad.sorbier.example iburst
Puis mets en commentaire la ligne pool 2.debian.pool.ntp.org iburst de /etc/chrony/chrony.conf (le pare-feu bloque de toute façon le NTP vers Internet depuis le VLAN 20), et recharge :
sudo systemctl restart chrony
chronyc sources
# MS Name/IP address Stratum Poll Reach LastRx Last sample
# ^* srv-ad.ad.sorbier.example 2 6 17 23 +312us[ +401us] +/- 18ms
# ^+ srv-ad2.ad.sorbier.example 2 6 17 22 -205us[ -115us] +/- 21ms
L'astérisque désigne la source retenue, le + une source valide en réserve.
Les mises à jour de sécurité automatiques. Un serveur qui attend qu'on pense à lui pour se mettre à jour reste vulnérable des semaines. Le paquet unattended-upgrades installe chaque jour les correctifs de sécurité de Debian, et seulement eux par défaut :
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades # répondre Oui
systemctl list-timers 'apt-daily*'
Les mises à jour qui demandent un redémarrage (noyau, bibliothèque C) ne redémarrent pas le serveur toutes seules : le fichier /run/reboot-required signale qu'il en faut un. Planifie-le dans une fenêtre de maintenance, et fais-le remonter dans ta supervision.
La méthode pour chaque service
Tous les chapitres suivent la même démarche. C'est aussi celle qu'attend une commission d'E6 quand tu présentes une réalisation : elle veut voir que tu sais vérifier ce que tu as fait, pas seulement le faire.
- Installer le paquet de la distribution.
- Configurer dans
/etc, en gardant une copie du fichier d'origine (cp fichier fichier.orig) et en commentant tes changements. - Vérifier la syntaxe avec l'outil du service avant de recharger :
nginx -t,apachectl configtest,php-fpm8.4 -t,haproxy -c -f,testparm,postfix check,doveconf -n,nft -c -f. - Recharger ou redémarrer, puis tester depuis un client :
curl,openssl s_client,smbclient,mariadb -h. - Sécuriser : compte dédié, droits minimaux, chiffrement, pare-feu local, journaux envoyés au serveur central.
- Documenter : ce que tu as installé, où sont les fichiers, comment tester, comment restaurer. Ce document est une pièce de ton portfolio.
Recharger (reload) relit la configuration sans couper les connexions en cours ; redémarrer (restart) arrête puis relance le service. Préfère reload quand le service le permet (Nginx, Apache, PHP-FPM, HAProxy, Postfix) : les utilisateurs ne voient rien. Et si la syntaxe est fausse, nginx -t te le dit avant la coupure, alors qu'un restart direct laisse le service arrêté.
Quand un service ne répond pas, cinq commandes donnent presque toujours la réponse, dans cet ordre :
systemctl status nginx # tourne-t-il ? depuis quand ? dernière erreur ?
journalctl -u nginx -n 50 --no-pager # que dit son journal ?
ss -tlnp | grep nginx # écoute-t-il, et sur quelle adresse et quel port ?
curl -I http://localhost # répond-il en local ?
sudo nft list ruleset # le pare-feu local laisse-t-il passer ?
Si curl répond en local mais pas depuis un poste, le problème est sur le chemin : pare-feu local, pare-feu pfSense entre les VLAN, ou DNS. Le chapitre 13 déroule cette méthode en détail.
Et le DNS et le DHCP sous Linux ?
Chez Sorbier, le DNS et le DHCP du réseau local sont ceux des contrôleurs de domaine : Active Directory a besoin de son DNS pour fonctionner, et le DHCP de Windows Server s'intègre à ce DNS (cours Windows Server, chapitre DNS et DHCP). Dans les zones sans annuaire, comme le Wi-Fi des visiteurs ou la DMZ, c'est le service DHCP de pfSense qui distribue les adresses.
Les mêmes services existent sous Linux, et tu les croiseras dans les organisations sans Windows : BIND 9 et Unbound pour le DNS, Kea pour le DHCP (le successeur d'ISC DHCP, qui n'est plus maintenu depuis fin 2022), dnsmasq pour les petits réseaux. Leur configuration est traitée dans le cours Services réseau. Ce cours-ci se concentre sur les services applicatifs qu'on installe sur un serveur Linux d'une infrastructure Windows : web, bases de données, certificats, annuaire, fichiers, messagerie, journaux.
Exercices
Exercice 1 sur 3 Les six éléments d'un service Réussi À revoir
Un collègue a installé MariaDB sur srv-glpi et te dit : « ça ne marche pas ». Pour chacun des six éléments d'un service, donne la commande ou l'emplacement que tu vérifies, dans l'ordre où tu le ferais.
Voir la réponseMasquer la réponse de l'exercice 1
- Le paquet :
apt policy mariadb-server(est-il installé, quelle version ?). - L'unité systemd :
systemctl status mariadb(active ? en échec ?). - Les journaux :
journalctl -u mariadb -n 50; c'est souvent là que se trouve la réponse (fichier de configuration invalide, disque plein, port déjà pris). - Le port :
ss -tlnp | grep mariadb(écoute-t-il sur127.0.0.1:3306ou sur toutes les adresses ?). - La configuration :
/etc/mysql/mariadb.conf.d/50-server.cnf(adresse d'écoute,bind-address). - Le compte qui l'exécute :
ps -o user,cmd -C mariadbd(le comptemysql), utile si le service n'arrive pas à écrire dans son dossier de données/var/lib/mysql.
L'ordre compte : inutile de lire la configuration si le paquet n'est pas installé, et le journal dit en général pourquoi le service est arrêté.
Tu avais trouvé ?
Exercice 2 sur 3 Préparer srv-partages Réussi À revoir
Écris le fichier /etc/network/interfaces, la ligne 127.0.1.1 de /etc/hosts et la commande PowerShell de l'enregistrement DNS du nouveau serveur srv-partages, adresse 192.168.10.185, dans le VLAN des serveurs de Sorbier.
Voir la réponseMasquer la réponse de l'exercice 2
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto ens18
iface ens18 inet static
address 192.168.10.185/28
gateway 192.168.10.190
127.0.1.1 srv-partages.ad.sorbier.example srv-partages
Add-DnsServerResourceRecordA -ZoneName "ad.sorbier.example" -Name "srv-partages" `
-IPv4Address "192.168.10.185" -CreatePtr
Le masque est /28 (le VLAN 20 est 192.168.10.176/28) et la passerelle est la dernière adresse utilisable, 192.168.10.190, portée par le pare-feu. Une erreur classique : recopier /24 parce que le réseau de l'entreprise « est en 192.168.10 ». Le serveur croirait alors joindre directement les postes du VLAN 10, sans passer par sa passerelle, et ne les atteindrait jamais.
Tu avais trouvé ?
Exercice 3 sur 3 L'heure qui dérive Réussi À revoir
Après une restauration de VM, srv-glpi affiche une heure en avance de 9 minutes. Que va-t-il se passer pour la jonction au domaine et pour les journaux ? Comment le constates-tu et comment le corriges-tu ?
Voir la réponseMasquer la réponse de l'exercice 3
Conséquences. Kerberos tolère par défaut 5 minutes d'écart : au-delà, les tickets sont refusés, et l'ouverture de session avec un compte du domaine échoue (erreur du type Clock skew too great dans le journal de SSSD). Les journaux envoyés au serveur central sont horodatés 9 minutes trop tard : impossible de les corréler avec ceux du pare-feu ou des contrôleurs lors d'une enquête.
Constat. chronyc tracking montre l'écart (System time) et la source utilisée ; chronyc sources montre si les contrôleurs sont joignables (colonne Reach à 0 s'ils ne répondent pas).
Correction. Vérifier que le pare-feu autorise NTP (UDP 123) de srv-glpi vers srv-ad et srv-ad2, puis forcer le rattrapage immédiat avec sudo chronyc makestep. La directive makestep 1 3 du fichier par défaut corrige d'un coup un écart de plus d'une seconde, mais seulement lors des trois premières mesures après le démarrage de chrony.
Tu avais trouvé ?