Chapitre 1714 minIntermédiaire
Dépanner un serveur Linux : méthode et cas types
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- appliquer une méthode de dépannage ordonnée ;
- situer une panne de démarrage dans la chaîne UEFI, GRUB, noyau, systemd ;
- réparer un serveur bloqué en mode d'urgence ;
- traiter une demande d'évolution type E6 et une analyse type E7.
2 exercices corrigés1 schéma
Dépanner un serveur Linux, c'est passer d'un symptôme (« le site ne répond plus », « le serveur ne démarre pas ») à sa cause, par des vérifications ordonnées plutôt que par des essais au hasard, puis corriger, vérifier et documenter. Ce chapitre donne la méthode, la chaîne de démarrage et les points où elle casse, les pannes les plus fréquentes avec leurs commandes, puis deux cas complets au format des épreuves E6 et E7 de l'option SISR.
La méthode
- Décrire le symptôme précisément : qui est touché, depuis quand, quel message exact. « Le site ne marche pas » devient « depuis 9 h 10, les clients reçoivent une erreur 502 sur
suivi.sorbier.example; le site interne desrv-gestionrépond normalement ». - Délimiter : une machine ou toutes ? Un service ou tout le serveur ? Ce qui a changé récemment (mise à jour, modification de configuration, ajout de disque) est le premier suspect :
/var/log/apt/history.log,journalctl --since. - Observer avant d'agir : état des services, journaux, espace disque, réseau. On lit les messages d'erreur en entier : ils donnent la cause une fois sur deux.
- Formuler une hypothèse et la tester, une seule à la fois, sans tout modifier d'un coup.
- Corriger, en gardant une copie de ce qu'on change.
- Vérifier que le symptôme a disparu, pour les utilisateurs, pas seulement dans ton terminal.
- Documenter dans le ticket : symptôme, cause, correction, et ce qui évitera que ça recommence (une alerte de supervision, une procédure). L'outil de tickets et la démarche ITIL sont présentés dans les cours GLPI et gestion de parc et ITIL et support.
La chaîne de démarrage
Quand un serveur ne démarre plus, il faut savoir à quelle étape il s'arrête. Chacune affiche des messages reconnaissables :
| Étape | Symptôme | Piste |
|---|---|---|
| UEFI | « No bootable device », retour au menu du micrologiciel | Ordre de démarrage, disque absent, partition EFI détruite |
| GRUB | Invite grub rescue> ou grub> | Configuration de GRUB ou /boot endommagés : démarrer sur l'image d'installation en mode Rescue et réinstaller GRUB |
| Noyau et initramfs | Kernel panic, invite (initramfs) | Racine introuvable : volume LVM ou RAID non assemblé, UUID modifié. Choisir l'ancien noyau dans le menu Advanced options de GRUB |
| systemd, montages | « You are in emergency mode » | Ligne fausse dans /etc/fstab, disque absent sans nofail |
| Services | La machine démarre mais un service manque | systemctl --failed, journalctl -b -p err |
Un serveur qui ne démarre plus
Le mode d'urgence. Après l'ajout d'un disque, srv-journaux s'arrête sur « You are in emergency mode. After logging in, type "journalctl -xb" to view system logs ». La cause habituelle : une ligne de /etc/fstab qui désigne un disque absent ou un UUID mal recopié. La réparation :
- donner le mot de passe de
rootsi on te le demande (voir l'encadré pour le cas oùrootest verrouillé) ; journalctl -xb | grep -i -A3 mount: le message nomme le montage en échec ;mount -o remount,rw /si la racine est en lecture seule, puis corriger/etc/fstab(UUID exact avecblkid, ounofail, ou ligne commentée) ;systemctl daemon-reload && mount -a, puissystemctl default(oureboot).
Démarrer en mode de secours. Dans le menu de GRUB, place-toi sur l'entrée Debian et appuie sur e. À la fin de la ligne qui commence par linux, ajoute systemd.unit=rescue.target (ou emergency.target pour le minimum), puis Ctrl+X pour démarrer. La modification ne vaut que pour ce démarrage.
Les pannes fréquentes
Un disque plein. Symptômes : services qui s'arrêtent, « No space left on device », base de données en lecture seule.
df -h # quel système de fichiers est plein ?
df -i # ou n'a plus d'inodes ?
sudo du -xh --max-depth=1 /var | sort -h # où est la place, dossier par dossier
sudo journalctl --vacuum-size=500M # si c'est le journal
sudo apt clean # si c'est le cache des paquets
sudo lsof +L1 # fichiers supprimés mais encore ouverts (paquet lsof)
Le dernier cas est classique : un journal supprimé à la main par rm alors qu'un service l'a encore ouvert continue d'occuper le disque, invisible pour du. Redémarrer le service libère la place. Pour une solution durable : logrotate, un volume dédié, une alerte de supervision à 80 %.
Un service qui ne démarre pas.
systemctl status nginx # état et dernières lignes
journalctl -xeu nginx # le journal du service, avec explications
sudo nginx -t # syntaxe de la configuration (sshd -t, named-checkconf…)
sudo ss -tlnp | grep ':443' # le port est-il déjà pris par un autre programme ?
namei -l /srv/www/suivi/index.html # les droits sur tout le chemin
sudo journalctl -k -g 'apparmor="DENIED"' # un refus d'AppArmor ?
Le réseau. Remonter les couches dans l'ordre du chapitre 11 : lien, adresse, passerelle, route, DNS, port.
Une machine lente. uptime (charge comparée au nombre de cœurs), top trié par processeur (P) puis par mémoire (M), free -h (le swap est-il plein ?), dmesg -T | tail ou journalctl -k -p warning (erreurs de disque, manque de mémoire : « Out of memory: Killed process »). iostat -x 2 (paquet sysstat) montre si un disque sature.
« Permission non accordée ». id (quels groupes, et la session a-t-elle été rouverte depuis l'ajout ?), ls -l et getfacl sur le fichier, namei -l sur le chemin, sudo -l pour les droits sudo, puis le journal d'AppArmor.
L'heure. Certificats refusés, connexions Kerberos impossibles, journaux incohérents : timedatectl doit afficher le bon fuseau (Europe/Paris) et System clock synchronized: yes.
Cas type E6 SISR : une demande d'évolution
À l'épreuve E6, la commission te remet une demande d'évolution d'une de tes réalisations, que tu réalises seul en une heure sur ta propre infrastructure, avant la recette (cours Épreuve E6 SISR). Voici une demande typique sur une réalisation Debian.
Exercice 1 sur 2 Une demande d'évolution sur srv-web Réussi À revoir
Le prestataire envoie une nouvelle développeuse, Léa Martin, pour trois mois à partir du 1er décembre 2026. Antoine Mercier demande, sur srv-web :
- un compte nominatif pour elle, qui expire à la fin de sa mission, membre du groupe
web-dev; - un accès SSH par clé uniquement (sa clé publique t'est remise dans le fichier
lea.pub), sans droit d'administration autre que tester et recharger nginx ; - un disque supplémentaire de 20 Gio, monté de façon permanente sur
/srv/www/mediaset accessible en écriture au groupeweb-dev, en lecture seule à nginx ; - la preuve que tout fonctionne.
Décris ta réalisation, commandes comprises, puis les vérifications que tu montrerais en recette.
Voir la réponseMasquer la réponse de l'exercice 1
1. Le compte.
sudo adduser --comment "Léa Martin (prestataire)" dev-lmartin
sudo usermod -aG web-dev dev-lmartin
sudo chage -E 2027-03-01 dev-lmartin # refusé à partir du 1er mars 2027 : le compte sert jusqu'au 28 février inclus
2. SSH et sudo. Elle n'est pas administratrice : on ne la met pas dans sudo. La règle %web-dev ALL=(root) /usr/sbin/nginx -t, /usr/bin/systemctl reload nginx de /etc/sudoers.d/web-dev lui donne exactement les deux commandes. Pour SSH, si AllowGroups admins-ssh est en place, il faut autoriser aussi le groupe des développeurs (AllowGroups admins-ssh web-dev), puis :
sudo install -d -m 700 -o dev-lmartin -g dev-lmartin /home/dev-lmartin/.ssh
sudo install -m 600 -o dev-lmartin -g dev-lmartin lea.pub /home/dev-lmartin/.ssh/authorized_keys
sudo passwd -l dev-lmartin # pas de mot de passe utilisable : clé seulement
sudo sshd -t && sudo systemctl reload ssh
Avec PasswordAuthentication no déjà en place, le verrouillage du mot de passe est une sécurité de plus. Pour sudo, Léa a besoin d'un mot de passe : soit on lui en donne un et on ne verrouille pas, soit on ajoute NOPASSWD: uniquement devant ces deux commandes, qui ne donnent aucun autre pouvoir. Les deux choix se défendent ; il faut savoir justifier le sien.
3. Le disque. Ajout dans Proxmox (Hardware > Add > Hard Disk, 20 Gio), puis :
lsblk # repérer le nouveau disque, par exemple sdd
sudo parted /dev/sdd --script mklabel gpt mkpart medias ext4 0% 100%
sudo mkfs.ext4 -L medias /dev/sdd1
sudo mkdir -p /srv/www/medias
echo 'LABEL=medias /srv/www/medias ext4 defaults,nofail,nodev,nosuid,noexec 0 2' | sudo tee -a /etc/fstab
sudo systemctl daemon-reload && sudo mount -a
sudo chown root:web-dev /srv/www/medias
sudo chmod 2770 /srv/www/medias
sudo setfacl -m u:www-data:rX /srv/www/medias
sudo setfacl -d -m u:www-data:rX /srv/www/medias
sudo setfacl -d -m g::rwx /srv/www/medias
4. La recette. Montrer : id dev-lmartin (groupe web-dev) et sudo chage -l dev-lmartin (expiration) ; une connexion ssh dev-lmartin@192.168.10.225 par clé, et le refus d'une connexion par mot de passe (ssh -o PubkeyAuthentication=no …) ; sudo -l sous son compte (les deux commandes seulement) et le refus de sudo systemctl restart ssh ; df -h /srv/www/medias et la ligne de /etc/fstab ; un fichier créé par dev-lmartin dans /srv/www/medias, qui appartient bien au groupe web-dev (setgid), et lisible par nginx : sudo -u www-data cat /srv/www/medias/test.txt ; enfin, un redémarrage de srv-web pour prouver que le montage et les droits tiennent.
Tu avais trouvé ?
Cas type E7 SISR : analyser un serveur compromis
À l'écrit E7, tu analyses des extraits de journaux et de configurations fournis dans le dossier documentaire, et tu proposes des mesures (cours Épreuve E7 SISR).
Exercice 2 sur 2 Analyse d'une intrusion sur un serveur web Réussi À revoir
Le serveur web d'une PME (Debian 13, en DMZ) envoie depuis la nuit des milliers de courriels non sollicités. Le dossier documentaire contient :
Document 1 : extrait du journal SSH
nov. 03 23:41:08 web01 sshd-session[9112]: Failed password for deploy from 198.51.100.23 port 40112 ssh2
nov. 03 23:41:11 web01 sshd-session[9112]: Failed password for deploy from 198.51.100.23 port 40112 ssh2
nov. 03 23:47:52 web01 sshd-session[9530]: Accepted password for deploy from 198.51.100.23 port 40990 ssh2
Document 2 : extrait de /etc/ssh/sshd_config.d/local.conf
PasswordAuthentication yes
PermitRootLogin prohibit-password
Document 3 : crontab de l'utilisateur deploy (crontab -l -u deploy)
*/5 * * * * /home/deploy/.cache/.x/upd >/dev/null 2>&1
Document 4 : extrait de /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: ALL
- Reconstitue le déroulement de l'attaque.
- Quelles faiblesses l'ont permise ?
- Propose les actions immédiates, puis les mesures pour éviter que cela recommence.
Voir la réponseMasquer la réponse de l'exercice 2
-
Déroulement. Une adresse externe (
198.51.100.23) a essayé des mots de passe sur le comptedeployen SSH, directement depuis Internet. Après une série d'échecs, la connexion par mot de passe a réussi à 23 h 47. L'attaquant a installé un programme caché dans un dossier masqué (/home/deploy/.cache/.x/upd, les noms qui commencent par un point n'apparaissent pas avec un simplels), relancé toutes les 5 minutes par la crontab dedeploy, sans aucune sortie visible (>/dev/null 2>&1) : c'est le mécanisme de persistance qui envoie les courriels. Avec la règlesudodu compte, il a pu obtenir les droits derootsans mot de passe. -
Faiblesses. Le port SSH joignable depuis Internet (aucun filtrage des sources) ; l'authentification par mot de passe acceptée, avec un mot de passe trop faible pour résister aux essais ; aucun bannissement des adresses insistantes ; un compte technique aux droits
sudoillimités sans mot de passe (NOPASSWD: ALL) ; manifestement aucune alerte sur les connexions ni sur l'envoi massif de courriels. -
Actions immédiates : isoler le serveur (le retirer du réseau, ou bloquer ses flux sortants au pare-feu) en conservant les preuves (instantané de la VM, copie des journaux) ; prévenir le responsable et suivre la procédure de gestion d'incident ; considérer le serveur comme entièrement compromis, puisque l'attaquant a pu devenir
root: réinstaller à partir d'une image saine et restaurer les données depuis une sauvegarde antérieure à l'intrusion, plutôt que « nettoyer ».Mesures durables : SSH par clé uniquement (
PasswordAuthentication no) etPermitRootLogin no; SSH accessible seulement depuis le VPN, le réseau d'administration ou un bastion, jamais directement depuis Internet ; Fail2ban ; suppression deNOPASSWD: ALLau profit de règlessudolimitées aux commandes de déploiement ; centralisation des journaux vers un SIEM avec alertes sur les connexions réussies après des échecs, et sur les nouvelles tâches planifiées ; filtrage des flux sortants du serveur (SMTP sortant interdit à un serveur web) ; mises à jour automatiques et audit régulier (Lynis).
Tu avais trouvé ?