Activer les mises à jour de sécurité automatiques sur Ubuntu/Debian

 

Maintenir un système Linux à jour est crucial pour la sécurité, mais gérer manuellement les mises à jour peut être fastidieux. Ubuntu et Debian offrent des mécanismes pour automatiser les mises à jour de sécurité, garantissant que les correctifs critiques sont appliqués sans intervention humaine. Ce guide vous montre comment configurer et gérer ces mises à jour automatiques en toute sécurité.

Dans ce guide, vous allez apprendre à :

  • Comprendre les différents types de mises à jour (sécurité, recommandées, toutes)
  • Installer et configurer unattended-upgrades
  • Personnaliser le comportement des mises à jour automatiques
  • Configurer les notifications par email
  • Gérer les redémarrages automatiques si nécessaire
  • Vérifier et surveiller les mises à jour appliquées
  • Résoudre les problèmes courants

Prérequis :

  • Ubuntu 16.04+ ou Debian 9+ (la plupart des distributions récentes)
  • Accès root ou sudo

Pourquoi activer les mises à jour automatiques ?

Avantages

  • Sécurité renforcée : Les failles de sécurité sont corrigées rapidement, réduisant la fenêtre d’exposition aux attaques.
  • Gain de temps : Plus besoin de surveiller et d’appliquer manuellement les mises à jour de sécurité.
  • Conformité : Facilite le respect des politiques de sécurité et de conformité (ISO 27001, PCI-DSS, etc.).
  • Stabilité : Les mises à jour de sécurité sont généralement testées et ne cassent pas le système.

Précautions

  • Mises à jour de paquets critiques : Certaines mises à jour peuvent nécessiter un redémarrage (kernel, libc, systemd).
  • Applications personnalisées : Les mises à jour peuvent potentiellement affecter des configurations spécifiques.
  • Bande passante : Les téléchargements automatiques consomment de la bande passante.

Recommandation : Activez les mises à jour automatiques de sécurité uniquement (pas toutes les mises à jour) pour minimiser les risques.


1) Vérifier l’état actuel

Avant de commencer, vérifiez si unattended-upgrades est déjà installé :

# Vérifier si le paquet est installé
dpkg -l | grep unattended-upgrades

# Vérifier le statut du service
systemctl status unattended-upgrades

Si le paquet n’est pas installé, vous verrez un message vide ou une erreur.


2) Installation de unattended-upgrades

Sur Ubuntu

Sur Ubuntu, unattended-upgrades est généralement préinstallé. Si ce n’est pas le cas :

sudo apt update
sudo apt install unattended-upgrades

Sur Debian

sudo apt update
sudo apt install unattended-upgrades apt-listchanges

Note : apt-listchanges est optionnel mais recommandé pour voir les changements avant qu’ils ne soient appliqués.


3) Configuration de base (mises à jour de sécurité uniquement)

Méthode rapide (recommandée pour débuter)

Utilisez l’outil interactif de configuration :

sudo dpkg-reconfigure -plow unattended-upgrades

Sélectionnez Yes (Oui) pour activer les mises à jour automatiques de sécurité.

Cela crée automatiquement le fichier /etc/apt/apt.conf.d/20auto-upgrades avec le contenu suivant :

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Vérification

cat /etc/apt/apt.conf.d/20auto-upgrades

Vous devriez voir :

  • Update-Package-Lists "1" : Met à jour la liste des paquets quotidiennement
  • Unattended-Upgrade "1" : Active les mises à jour automatiques

4) Configuration avancée

Le fichier principal de configuration est /etc/apt/apt.conf.d/50unattended-upgrades.

Ouvrez-le pour personnaliser les options :

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

a) Choisir les sources de mise à jour

Par défaut, seules les mises à jour de sécurité sont activées. Voici les lignes importantes (décommentez selon vos besoins) :

Ubuntu

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";           // Mises à jour normales (déconseillé)
    "${distro_id}:${distro_codename}-security";  // Mises à jour de sécurité (recommandé)
    "${distro_id}ESMApps:${distro_codename}-apps-security"; // ESM (Ubuntu Pro)
    "${distro_id}ESM:${distro_codename}-infra-security";     // ESM (Ubuntu Pro)
//  "${distro_id}:${distro_codename}-updates";   // Mises à jour recommandées
//  "${distro_id}:${distro_codename}-proposed";  // Paquets en test (NE PAS ACTIVER)
//  "${distro_id}:${distro_codename}-backports"; // Backports (NE PAS ACTIVER)
};

Debian

Unattended-Upgrade::Origins-Pattern {
    "origin=Debian,codename=${distro_codename},label=Debian";
    "origin=Debian,codename=${distro_codename},label=Debian-Security"; // Sécurité
    "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; // Ancien format
//  "origin=Debian,codename=${distro_codename}-updates"; // Mises à jour recommandées
};

Recommandation : Laissez uniquement les lignes avec -security activées (sans // devant).

b) Mettre automatiquement à jour tous les paquets (optionnel)

Si vous souhaitez aussi appliquer les mises à jour non-sécurité (déconseillé en production), décommentez la ligne :

// "${distro_id}:${distro_codename}-updates";

Enlevez le // :

"${distro_id}:${distro_codename}-updates";

c) Exclure certains paquets (blacklist)

Si vous voulez éviter la mise à jour automatique de certains paquets (ex: kernel, bases de données) :

Unattended-Upgrade::Package-Blacklist {
    "linux-image-*";    // Noyau Linux (nécessite un redémarrage)
    "mysql-server*";    // Serveur MySQL
    "postgresql*";      // PostgreSQL
    "nginx";            // Nginx
};

Note : Les wildcards (*) sont supportés.

d) Redémarrage automatique (avec précaution)

Certaines mises à jour (kernel, libc, systemd) nécessitent un redémarrage. Par défaut, le système ne redémarre pas automatiquement.

Pour activer le redémarrage automatique :

Unattended-Upgrade::Automatic-Reboot "true";

Pour limiter le redémarrage à une plage horaire (ex: 3h du matin) :

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

Recommandation : Activez cela uniquement si vous gérez des serveurs non-critiques ou si vous avez une redondance. Pour les serveurs en production, préférez un redémarrage planifié manuel.

e) Supprimer les paquets obsolètes et dépendances inutilisées

Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

Cela équivaut à exécuter apt autoremove après chaque mise à jour.

f) Notifications par email

Pour recevoir un email après chaque mise à jour :

Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::MailReport "on-change"; // Options: always, only-on-error, on-change

Prérequis : Installez un agent de messagerie (ex: postfix, sendmail, msmtp) :

sudo apt install mailutils postfix

Lors de l’installation de postfix, choisissez Internet Site et entrez votre nom de domaine.

Testez l’envoi d’email :

echo "Test" | mail -s "Test email" admin@example.com

5) Configuration de la fréquence des mises à jour

Le fichier /etc/apt/apt.conf.d/20auto-upgrades contrôle la périodicité.

Ouvrez-le :

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

Exemple de configuration :

APT::Periodic::Update-Package-Lists "1";       // Mise à jour de la liste des paquets (tous les 1 jour)
APT::Periodic::Download-Upgradeable-Packages "1"; // Télécharger les paquets en avance
APT::Periodic::Unattended-Upgrade "1";         // Appliquer les mises à jour (tous les 1 jour)
APT::Periodic::AutocleanInterval "7";          // Nettoyer les paquets obsolètes (tous les 7 jours)

Options disponibles :

  • "0" : Désactivé
  • "1" : Tous les jours
  • "7" : Tous les 7 jours

Recommandation : Laissez "1" pour les mises à jour de sécurité (quotidiennes).


6) Activer et démarrer le service

Méthode 1 : Via systemd (Ubuntu 18.04+, Debian 10+)

# Activer le service au démarrage
sudo systemctl enable unattended-upgrades

# Démarrer le service
sudo systemctl start unattended-upgrades

# Vérifier le statut
sudo systemctl status unattended-upgrades

Sortie attendue :

● unattended-upgrades.service - Unattended Upgrades Shutdown
   Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled)
   Active: active (running)

Méthode 2 : Via cron (anciennes versions)

Les anciennes versions utilisent apt-daily et apt-daily-upgrade via cron :

# Vérifier les tâches cron
ls -l /etc/cron.daily/apt-compat

Pas besoin de configuration supplémentaire si les fichiers existent.


7) Tester manuellement les mises à jour automatiques

Vous pouvez simuler une exécution pour vérifier la configuration :

Test à blanc (dry-run)

sudo unattended-upgrade --dry-run --debug

Cela affiche les paquets qui seraient mis à jour sans les installer.

Exécution réelle

sudo unattended-upgrade --debug

Sortie attendue (exemple) :

Initial blacklisted packages:
Initial whitelisted packages:
Starting unattended upgrades script
Allowed origins are: ['o=Ubuntu,a=jammy-security', ...]
Packages that will be upgraded: libssl3 openssl
...

8) Vérifier les logs des mises à jour

Les logs sont disponibles dans /var/log/unattended-upgrades/.

Voir les dernières mises à jour appliquées

sudo cat /var/log/unattended-upgrades/unattended-upgrades.log

Exemple de sortie :

2025-12-19 10:15:32,123 INFO Starting unattended upgrades script
2025-12-19 10:15:35,456 INFO Packages that will be upgraded: libssl3 openssl
2025-12-19 10:16:12,789 INFO All upgrades installed

Voir les erreurs

sudo cat /var/log/unattended-upgrades/unattended-upgrades-dpkg.log

Voir l’historique APT complet

sudo cat /var/log/apt/history.log

9) Surveiller les redémarrages nécessaires

Après certaines mises à jour (kernel, libc, systemd), un redémarrage est nécessaire.

Vérifier si un redémarrage est requis

cat /var/run/reboot-required

Si le fichier existe, un redémarrage est nécessaire. Son contenu affiche :

*** System restart required ***

Voir quels paquets nécessitent un redémarrage

cat /var/run/reboot-required.pkgs

Exemple de sortie :

linux-image-5.15.0-58-generic
libc6

Redémarrer manuellement

sudo reboot

10) Désactiver les mises à jour automatiques

Si vous souhaitez désactiver temporairement ou définitivement les mises à jour automatiques :

Méthode 1 : Via dpkg-reconfigure

sudo dpkg-reconfigure -plow unattended-upgrades

Sélectionnez No (Non).

Méthode 2 : Modifier le fichier de configuration

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

Changez les valeurs à "0" :

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

Méthode 3 : Désactiver le service

sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades

11) Configuration complète recommandée

Voici une configuration équilibrée pour un serveur de production :

/etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};

Unattended-Upgrade::Package-Blacklist {
    "linux-image-*";
    "mysql-server*";
    "postgresql*";
    "nginx";
};

Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::MinimalSteps "true";
Unattended-Upgrade::InstallOnShutdown "false";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

Unattended-Upgrade::Automatic-Reboot "false"; // Redémarrage manuel
Unattended-Upgrade::Automatic-Reboot-Time "03:00"; // Si activé : 3h du matin

Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::MailReport "on-change";

Unattended-Upgrade::SyslogEnable "true";
Unattended-Upgrade::SyslogFacility "daemon";

Cheatsheet

Installation

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades  # Config interactive

Vérification

sudo systemctl status unattended-upgrades
sudo unattended-upgrade --dry-run --debug
cat /var/log/unattended-upgrades/unattended-upgrades.log

Configuration

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades  # Config avancée
sudo nano /etc/apt/apt.conf.d/20auto-upgrades        # Fréquence

Redémarrage nécessaire ?

cat /var/run/reboot-required
cat /var/run/reboot-required.pkgs

Désactiver

sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades

Conclusion

Les mises à jour de sécurité automatiques sont essentielles pour maintenir un système Linux sécurisé sans effort manuel constant. En configurant unattended-upgrades avec les bonnes options (sécurité uniquement, blacklist des paquets critiques, notifications email), vous réduisez considérablement la surface d’attaque tout en gardant le contrôle sur les mises à jour sensibles. Surveillez les logs régulièrement et planifiez les redémarrages pour garantir un système stable et à jour.


Voir aussi