Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

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émentOù le trouverExemple avec Nginx
Le paquet qui l'installeapt show <paquet>nginx
L'unité systemd qui le démarresystemctl status <unité>nginx.service
Le compte système qui l'exécuteps -o user,cmd -C <programme>www-data pour les processus de travail, root pour le processus maître
Le port sur lequel il écoutess -tlnpTCP 80 et 443
Ses fichiers de configuration/etc/<service>//etc/nginx/nginx.conf, /etc/nginx/sites-available/
Ses journauxjournalctl -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 :

ServeurAdresseVLANCe qu'il fait dans ce cours
srv-ad192.168.10.17720 SERVEURSContrôleur de domaine Windows : annuaire, DNS, DHCP, NTP (existant)
srv-fichiers192.168.10.17820 SERVEURSPartages Windows des services (existant)
srv-gestion192.168.10.17920 SERVEURSApplication de gestion, API en TCP 8443, sous Windows (existant)
srv-ad2192.168.10.18120 SERVEURSSecond contrôleur de domaine (existant)
srv-journaux192.168.10.18020 SERVEURSRéception des journaux en syslog TLS, serveur Wazuh, supervision (existant)
srv-glpi192.168.10.18420 SERVEURSNouveau. GLPI sur Nginx, PHP-FPM et MariaDB, joint au domaine, relais de messagerie pour ses notifications
srv-partages192.168.10.18520 SERVEURSNouveau. Partage Samba pour l'entrepôt et export NFS pour les sauvegardes des serveurs Linux
srv-web192.168.10.22560 DMZSite 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).

Internet203.0.113.17Pare-feu pfSenseroutage et filtrageVLAN 10 POSTES192.168.10.64/26VLAN 99 ADMIN192.168.10.208/28VLAN 60 DMZ192.168.10.224/28srv-web .225Nginx, PHP-FPMLet's EncryptVLAN 20 SERVEURS · 192.168.10.176/28srv-ad .177Active DirectoryDNS, DHCP, NTPsrv-ad2 .181second contrôleurde domainesrv-journaux .180syslog TLS, Wazuhsupervisionsrv-fichiers .178partages Windowsdes servicessrv-gestion .179gestion, APITCP 8443srv-glpi .184GLPI sur NginxMariaDB, Postfixsrv-partages .185Samba, NFSserveur Debian 13 configuré dans ce coursVLAN, filtré par le pare-feu
Les serveurs Linux de Sorbier dans son plan d'adressage : la DMZ pour ce qui est publié, le VLAN 20 pour le reste

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 :

ServicePaquetVersion dans Debian 13
Serveur webnginx1.26
Serveur webapache22.4
PHP et PHP-FPMphp8.4-fpm8.4
Base de donnéesmariadb-server11.8
Certificats Let's Encryptcertbot, python3-certbot-nginx4.0
Jonction à l'annuairerealmd, sssd, adcli0.17, 2.10, 0.9
Partage Windowssamba, winbind4.22
Partage NFSnfs-kernel-server2.8
Répartition de chargehaproxy, keepalived3.0, 2.3
Messageriepostfix, dovecot-imapd3.10, 2.4
Journauxrsyslog8.2504
Pare-feu localnftables1.1
Protection contre les attaques par force brutefail2ban1.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).

text
# /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
bash
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.

bash
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 :

text
127.0.0.1       localhost
127.0.1.1       srv-glpi.ad.sorbier.example srv-glpi
bash
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 :

text
# /etc/resolv.conf
search ad.sorbier.example
nameserver 192.168.10.177
nameserver 192.168.10.181
bash
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) :

powershell
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 :

text
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 :

bash
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 :

bash
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.

  1. Installer le paquet de la distribution.
  2. Configurer dans /etc, en gardant une copie du fichier d'origine (cp fichier fichier.orig) et en commentant tes changements.
  3. 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.
  4. Recharger ou redémarrer, puis tester depuis un client : curl, openssl s_client, smbclient, mariadb -h.
  5. Sécuriser : compte dédié, droits minimaux, chiffrement, pare-feu local, journaux envoyés au serveur central.
  6. 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 :

bash
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
  1. Le paquet : apt policy mariadb-server (est-il installé, quelle version ?).
  2. L'unité systemd : systemctl status mariadb (active ? en échec ?).
  3. 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).
  4. Le port : ss -tlnp | grep mariadb (écoute-t-il sur 127.0.0.1:3306 ou sur toutes les adresses ?).
  5. La configuration : /etc/mysql/mariadb.conf.d/50-server.cnf (adresse d'écoute, bind-address).
  6. Le compte qui l'exécute : ps -o user,cmd -C mariadbd (le compte mysql), 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
text
# /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
text
127.0.1.1       srv-partages.ad.sorbier.example srv-partages
powershell
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é ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Installer et configurer Nginx sur Debian 13Revoir le sommaire du cours