Aller au contenu
Administration Linux medium

Appliquer les mises à jour de sécurité sous Linux

17 min de lecture

Les mises à jour de sécurité corrigent des vulnérabilités connues (CVE) dans le noyau, les bibliothèques et les services installés. Sur un serveur exposé, les appliquer vite est la première ligne de défense. Chaque distribution fournit de quoi cibler uniquement ces correctifs, sans emporter les montées de version fonctionnelles.

Ce guide montre les commandes qui fonctionnent, et démonte deux recettes très répandues qui ne patchent rien du tout tout en donnant au lecteur l'impression d'avoir sécurisé sa machine. C'est pire qu'une absence de correctif : c'est un correctif imaginaire.

  • Distinguer les mises à jour de sécurité des mises à jour classiques
  • Lister les correctifs de sécurité disponibles sur Debian/Ubuntu et sur RHEL
  • Appliquer uniquement les correctifs de sécurité, avec des commandes vérifiées
  • Configurer les mises à jour automatiques sans qu'elles fassent plus que prévu
  • Vérifier qu'un correctif est bien installé, et si un redémarrage s'impose
  • Reconnaître les deux commandes qui ne patchent rien malgré les apparences

Les mises à jour de sécurité sont critiques dans toute infrastructure :

  • Un CVE critique est publié pour OpenSSL ou le noyau, il faut corriger dans les heures qui suivent.
  • Votre serveur web est exposé sur Internet, chaque paquet obsolète élargit la surface d'attaque.
  • La conformité impose un délai maximal de patching (30 jours pour les référentiels CIS ou ANSSI).
  • Vous gérez une flotte de serveurs et devez automatiser sans risquer une régression.
  • Avant un audit, vous devez prouver que le système est à jour sur les CVE critiques.

Mises à jour classiques et mises à jour de sécurité

Section intitulée « Mises à jour classiques et mises à jour de sécurité »
TypeContenuRisque de régressionUrgence
SécuritéCorrectifs CVE, patches ciblésFaible (changements minimaux)Haute
BugfixCorrections de bugs fonctionnelsMoyenMoyenne
FeatureNouvelles fonctionnalités, montées de versionÉlevéBasse

En production, la stratégie tient en une phrase : appliquer la sécurité automatiquement, et planifier le reste dans une fenêtre de maintenance.

Un quatrième cas échappe complètement à ce tableau : la montée de version majeure de la distribution, par exemple de Debian 12 à Debian 13. Ce n'est pas une mise à jour, c'est une migration, avec ses préparatifs et ses pièges (le nom des interfaces réseau peut changer, /etc/sysctl.conf cesse d'être lu, une base MariaDB mal arrêtée devient irrécupérable). Elle ne s'automatise pas : voyez Debian 13 « Trixie ».

Commencez par rafraîchir le catalogue des paquets. Cette commande ne modifie rien sur le système :

Fenêtre de terminal
sudo apt update

Pour voir ce qui relève de la sécurité, on filtre sur l'origine du paquet, car c'est elle qui porte l'information :

Fenêtre de terminal
apt list --upgradable 2>/dev/null | grep -i security
libssl3t64/noble-security 3.0.13-0ubuntu3.6 amd64 [upgradable from: 3.0.13-0ubuntu3.4]
openssl/noble-security 3.0.13-0ubuntu3.6 amd64 [upgradable from: 3.0.13-0ubuntu3.4]

Le suffixe -security dans le nom de la suite (noble-security, bookworm-security) est ce qui distingue un correctif de sécurité d'une mise à jour ordinaire.

Voici la recette que l'on trouve partout, et sur ce site même jusqu'à cette relecture :

Fenêtre de terminal
# NE FAITES PAS CELA : cette commande n'installe rien
sudo apt-get upgrade -y -o Dir::Etc::SourceList=/etc/apt/sources.list \
-o Dir::Etc::SourceParts=/dev/null

L'idée semble maligne : restreindre APT au seul sources.list en neutralisant le reste. Elle ne fonctionne pas, et le lab le prouve. Sur une Ubuntu 24.04, en simulation :

apt-get -s upgrade -> 7 paquets à installer
apt-get -s upgrade -o Dir::Etc::SourceList=... -> 0 paquet à installer

Sept mises à jour disponibles, zéro appliquée. La raison est que depuis Ubuntu 24.04 et Debian 12, les dépôts ont migré vers le format deb822 : les vraies sources vivent dans /etc/apt/sources.list.d/ubuntu.sources, et /etc/apt/sources.list ne contient plus que des commentaires. La commande pointe donc un fichier vide, et SourceParts=/dev/null exclut le fichier qui compte. APT ne voit plus aucun dépôt, et n'a donc rien à installer.

Le pire n'est pas qu'elle échoue, c'est qu'elle échoue en silence : elle retourne 0, n'affiche aucune erreur, et vous laissez le serveur en croyant l'avoir patché.

Le seul outil qui sait vraiment ce qu'est une mise à jour de sécurité sur Debian et Ubuntu, c'est unattended-upgrades. Il lit l'origine des paquets, pas leur nom.

Fenêtre de terminal
sudo apt install unattended-upgrades
sudo unattended-upgrades --dry-run -v
Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security,
o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security
Packages that will be upgraded: gzip libncursesw6 libtinfo6 ncurses-base
ncurses-bin perl-base tar

Retirez --dry-run pour appliquer réellement. Mais lisez d'abord la ligne Allowed origins : elle contient un piège.

  1. Installer le paquet. apt-listchanges est utile pour recevoir le détail de ce qui a changé.

    Fenêtre de terminal
    sudo apt install unattended-upgrades apt-listchanges
  2. Restreindre aux correctifs de sécurité. C'est l'étape que la plupart des tutoriels sautent, et c'est la plus importante.

    Fenêtre de terminal
    sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
    Unattended-Upgrade::Allowed-Origins {
    // "${distro_id}:${distro_codename}"; // commenté : pas le fonctionnel
    "${distro_id}:${distro_codename}-security";
    };
    Unattended-Upgrade::Automatic-Reboot "false";
    Unattended-Upgrade::Mail "admin@example.com";
    Unattended-Upgrade::Remove-Unused-Dependencies "true";
    OptionRecommandation en production
    Allowed-Originsuniquement -security, la ligne du dépôt principal commentée
    Automatic-Rebootfalse : le redémarrage se planifie, il ne se subit pas
    Mailune adresse réellement lue, sinon l'automatisation est aveugle
    Remove-Unused-Dependenciestrue pour éviter l'accumulation de paquets orphelins
  3. Activer le service. Sans cette commande, la configuration existe mais rien ne l'exécute.

    Fenêtre de terminal
    sudo dpkg-reconfigure -plow unattended-upgrades
  4. Vérifier que le résultat correspond à l'intention. C'est la seule preuve qui vaille : la liste des origines ne doit plus contenir que celles en -security.

    Fenêtre de terminal
    sudo unattended-upgrades --dry-run -v | grep "Allowed origins"
    systemctl status apt-daily-upgrade.timer
Fenêtre de terminal
grep " upgrade " /var/log/apt/history.log | tail -5
sudo tail -20 /var/log/unattended-upgrades/unattended-upgrades.log

Le premier fichier journalise toutes les opérations APT, le second uniquement celles de l'automate. Comparer les deux révèle les mises à jour appliquées à la main, hors procédure.

DNF, lui, comprend nativement la notion de correctif de sécurité, parce que Red Hat publie des avis (errata) qui lient un paquet à un CVE :

Fenêtre de terminal
sudo dnf updateinfo list security
RLSA-2026:19224 Important/Sec. vim-minimal-2:8.2.2637-26.el9_8.4.x86_64
RLSA-2026:22717 Moderate/Sec. vim-minimal-2:8.2.2637-26.el9_8.5.x86_64
RLSA-2026:28209 Moderate/Sec. vim-minimal-2:8.2.2637-26.el9_8.6.x86_64

Chaque ligne porte un identifiant d'avis (RHSA chez Red Hat, RLSA chez Rocky) et une sévérité. C'est cette métadonnée qui rend le ciblage possible, et fiable.

Fenêtre de terminal
sudo dnf update --security

Pour ne traiter que le plus urgent, filtrez par sévérité :

Fenêtre de terminal
sudo dnf update --security --sec-severity=Critical
SévéritéQuand appliquer
Criticalimmédiatement, sans attendre la fenêtre de maintenance
Importantsous 48 heures
Moderatefenêtre de maintenance planifiée
Lowprochaine maintenance
  1. Installer l'automate.

    Fenêtre de terminal
    sudo dnf install dnf-automatic
  2. Le restreindre à la sécurité, dans /etc/dnf/automatic.conf :

    [commands]
    upgrade_type = security
    apply_updates = yes
    [emitters]
    emit_via = email,stdio
    [email]
    email_from = root@localhost
    email_to = admin@example.com

    La clé est upgrade_type = security : sa valeur par défaut est default, qui applique tout.

  3. Activer le timer, sans quoi la configuration reste lettre morte.

    Fenêtre de terminal
    sudo systemctl enable --now dnf-automatic.timer
    systemctl status dnf-automatic.timer
Fenêtre de terminal
sudo dnf history list
sudo dnf history info last

dnf history est plus riche que son équivalent APT : chaque transaction est annulable avec dnf history undo <id>, ce qui offre un vrai rollback après une mise à jour malheureuse.

Fenêtre de terminal
apt-cache policy openssl
openssl:
Installed: 3.0.13-0ubuntu3.6
Candidate: 3.0.13-0ubuntu3.6

Si Installed égale Candidate, le paquet est à jour.

Un correctif du noyau, de la glibc ou de systemd ne prend effet qu'après un redémarrage. La méthode diffère selon la famille.

Fenêtre de terminal
[ -f /run/reboot-required ] && cat /run/reboot-required.pkgs

Le fichier n'existe que si un paquet a demandé un redémarrage, et le second nomme les coupables. Utilisez bien /run/ : /var/run n'est qu'un lien symbolique hérité du passé.

EnvironnementSécuritéFonctionnelRedémarrage
Dev / Testautomatique, immédiatautomatiqueautomatique
Stagingautomatique, immédiathebdomadaireplanifié
Productionautomatique, sécurité seulefenêtre de maintenance, après validation en stagingfenêtre de maintenance

La règle qui tient en production : la sécurité s'automatise, le fonctionnel se planifie, le redémarrage se décide. Les trois sont des décisions distinctes, et les confondre est la source la plus fréquente d'incident lié aux mises à jour.

Trois garde-fous complètent le dispositif. Recevez les rapports par courriel, et lisez-les : une automatisation dont personne ne lit la sortie est une automatisation aveugle. Testez le fonctionnel en staging avant la production. Et ne repoussez pas indéfiniment les redémarrages : un correctif de noyau non appliqué ne protège de rien.

La plupart des problèmes viennent d'une commande qui échoue en silence, ou d'un automate configuré mais jamais déclenché. Le tableau part du symptôme visible.

SymptômeCause probableSolution
apt update échoue sur une cléClé de dépôt expirée ou absentePoser la clé dans /etc/apt/keyrings/ et la déclarer avec Signed-By:. apt-key n'existe plus depuis Debian 12.
La commande « sécurité seulement » n'installe riensources.list est vide (format deb822)Passer par unattended-upgrades, seul outil qui lit l'origine des paquets
dnf update --security ne fait rien sur FedoraFedora ne publie pas d'avis de sécuritéUtiliser dnf update tout court
needs-restarting: command not foundPaquet absent par défaut sur RHELdnf install dnf-utils
unattended-upgrades applique aussi le fonctionnelLa ligne ${distro_codename} est active par défautLa commenter dans 50unattended-upgrades
L'automate ne s'exécute jamaisTimer non activésystemctl enable --now apt-daily-upgrade.timer (ou dnf-automatic.timer)
Mise à jour bloquée par un conflitPaquet retenu ou dépendance casséeapt --fix-broken install, ou dnf distro-sync
Transaction interrompueCoupure pendant l'opérationdpkg --configure -a, ou dnf history redo last

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Les mises à jour de sécurité corrigent des CVE : prioritaires, et à faible risque de régression.
  • Deux recettes très répandues ne patchent rien, en silence et en retournant 0 : la commande APT avec Dir::Etc::SourceList (le sources.list est vide en deb822), et dnf --security sur Fedora (qui ne publie aucun avis de sécurité).
  • Sur Debian et Ubuntu, le seul outil qui distingue vraiment la sécurité est unattended-upgrades : il lit l'origine des paquets, pas leur nom.
  • Sa configuration par défaut ne se limite pas à la sécurité : la ligne ${distro_codename} autorise aussi le fonctionnel. Commentez-la en production.
  • Sur RHEL et ses dérivés, dnf update --security fonctionne parce que Red Hat publie des avis liant paquet et CVE. --sec-severity=Critical cible l'urgence.
  • needs-restarting n'est pas installé par défaut sur RHEL (dnf-utils), et /run/reboot-required n'existe pas : c'est un réflexe Debian.
  • Après un correctif de noyau, uname -r affiche encore l'ancien tant qu'on n'a pas redémarré. Un serveur à jour qui tourne sur un noyau vulnérable est un audit raté.
  • En production : la sécurité s'automatise, le fonctionnel se planifie, le redémarrage se décide.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn