Pourquoi automatiser les patches de sécurité
Le cycle de vie d'une vulnérabilité est court. Entre la publication d'un CVE critique et les premières tentatives d'exploitation massives, la fenêtre se compte désormais en heures. Pour une agence qui administre dix, vingt ou cinquante VPS, attendre une intervention humaine planifiée chaque semaine revient à offrir plusieurs jours d'exposition sur chaque machine.
La réglementation renforce cette exigence. Le Cyber Resilience Act européen impose aux opérateurs de produits connectés de démontrer une politique de correctifs documentée et appliquée. Pour les agences qui hébergent des applications clients, l'absence de traçabilité des mises à jour peut engager leur responsabilité contractuelle en cas d'incident.
L'argument technique est simple : la majorité des compromissions de serveurs Linux exploitent des vulnérabilités pour lesquelles un patch est disponible depuis plus de 30 jours. L'outil unattended-upgrades, inclus dans les dépôts Debian et Ubuntu, installe automatiquement les correctifs de sécurité issus des dépôts officiels — sans toucher aux mises à jour de version majeure ni aux paquets que vous avez explicitement exclus.
Bénéfices concrets pour les agences qui gèrent un parc client
- Délai de correction réduit : les patches de sécurité sont appliqués dans les heures qui suivent leur publication dans les dépôts stables, sans ticket de maintenance.
- Traçabilité automatique : chaque installation est enregistrée dans
/var/log/unattended-upgrades/, consultable à tout moment pour un audit ou un rapport client. - Périmètre contrôlé : seules les mises à jour estampillées
securitysont appliquées par défaut — les montées de version restent sous contrôle manuel. - Charge opérationnelle allégée : un parc de 50 VPS n'exige plus 50 connexions SSH hebdomadaires pour
apt upgrade. - Conformité documentable : la politique est définie dans un fichier de configuration versionnable, reproductible par Ansible ou tout outil de gestion de configuration.
- Notifications ciblées : les erreurs d'installation ou les redémarrages requis peuvent déclencher un courriel, sans noyer l'équipe dans les rapports de routine.
Comment fonctionne unattended-upgrades
unattended-upgrades est un démon Debian/Ubuntu qui s'exécute via un timer systemd (ou cron sur les systèmes plus anciens). Il interroge les dépôts APT configurés, filtre les paquets selon les origines autorisées définies dans sa configuration, puis installe les mises à jour sans interaction utilisateur.
La logique de filtrage repose sur les Release files APT. Chaque dépôt expose des métadonnées (Origin, Suite, Codename) que unattended-upgrades compare à sa liste blanche. Par défaut sur Ubuntu, seules les origines ${distro_id}:${distro_codename}-security sont activées — ce qui correspond exactement aux archives de sécurité officielles Canonical, sans inclure les mises à jour de backports ni les paquets tiers.
Le processus se déroule en trois phases : mise à jour du cache APT (apt-get update), résolution des dépendances pour les paquets éligibles, installation avec journalisation détaillée. En cas d'erreur (conflit de dépendance, paquet verrouillé, espace disque insuffisant), l'installation s'arrête et une notification peut être émise selon la configuration. L'intégrité du système n'est jamais compromise : unattended-upgrades ne force pas la résolution de conflits.
Prérequis
La configuration décrite dans cet article s'applique à Debian 11/12 et Ubuntu 22.04/24.04 LTS. Les systèmes plus anciens (Debian 10, Ubuntu 20.04) sont compatibles mais leur support amont approche de sa fin — une migration est recommandée avant d'investir dans leur configuration.
Accès requis : connexion SSH avec droits root ou compte sudo. Aucune dépendance externe n'est nécessaire pour le fonctionnement de base ; la configuration SMTP est optionnelle et n'intervient que pour les notifications par courriel.
Si vous gérez votre parc depuis Ansible, les étapes décrites ci-dessous peuvent être reproduites directement dans un rôle dédié — la structure des fichiers de configuration est stable entre les versions majeures de Debian et Ubuntu.
Installer et configurer unattended-upgrades
Installer le paquet
Sur Debian et Ubuntu, le paquet est disponible dans les dépôts standards :
apt-get update apt-get install -y unattended-upgrades apt-listchangesLe paquet
apt-listchangesest optionnel mais recommandé : il permet d'inclure le résumé des changements dans les notifications par courriel.Configurer les origines autorisées
Éditez
/etc/apt/apt.conf.d/50unattended-upgrades. La sectionUnattended-Upgrade::Allowed-Originscontrôle quels dépôts sont éligibles. Sur Ubuntu 22.04, la configuration minimale recommandée :Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; "${distro_id}ESMApps:${distro_codename}-apps-security"; "${distro_id}ESM:${distro_codename}-infra-security"; };Sur Debian 12, remplacez par :
Unattended-Upgrade::Allowed-Origins { "Debian:${distro_codename}-security"; };Pour exclure des paquets sensibles (par exemple un noyau personnalisé ou une version épinglée de PHP) :
Unattended-Upgrade::Package-Blacklist { "linux-image"; "php8.2-fpm"; };Activer le timer périodique
Le fichier
/etc/apt/apt.conf.d/20auto-upgradescommande la fréquence d'exécution. Créez-le ou vérifiez son contenu :APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; APT::Periodic::AutocleanInterval "7";La valeur
"1"signifie une exécution quotidienne. Sur Ubuntu, le serviceapt-daily-upgrade.timerest activé automatiquement après cette configuration. Vérifiez son état :systemctl status apt-daily-upgrade.timerVérifier les logs
Les journaux d'installation sont écrits dans
/var/log/unattended-upgrades/. Le fichier principal :tail -50 /var/log/unattended-upgrades/unattended-upgrades.logUne ligne de succès ressemble à :
2026-09-25 04:12:31,847 INFO Packages that will be upgraded: libssl3 openssl 2026-09-25 04:12:45,021 INFO Package libssl3 upgraded to 3.0.2-0ubuntu1.17En cas d'échec, le fichier
unattended-upgrades-dpkg.logconserve la sortie complète dedpkgpour diagnostic.Tester l'exécution à la demande
Pour déclencher une exécution immédiate sans attendre le timer et vérifier que la configuration est opérationnelle :
unattended-upgrade --dry-run --debug 2>&1 | head -60L'option
--dry-runsimule l'installation sans rien modifier. Retirez-la pour une exécution réelle :unattended-upgrade -vSi la sortie affiche
No packages found that can be upgraded unattended, le système est à jour ou aucun paquet éligible n'attend d'installation — c'est le résultat attendu sur un serveur récemment provisionné.
Configurer les notifications par courriel
Les notifications courriel permettent à l'équipe de recevoir une alerte lorsqu'une mise à jour échoue ou lorsqu'un redémarrage est requis. Elles n'envoient rien en cas de succès silencieux — ce qui évite de saturer la boîte de réception avec des rapports quotidiens.
Dans /etc/apt/apt.conf.d/50unattended-upgrades, activez l'option :
Unattended-Upgrade::Mail "[email protected]";
Unattended-Upgrade::MailReport "only-on-error";La valeur only-on-error (recommandée) n'envoie un courriel qu'en cas d'erreur. La valeur on-change envoie un courriel à chaque installation. La valeur always envoie un courriel même quand rien n'est installé — à éviter sur un parc de plusieurs dizaines de machines.
Pour que l'envoi fonctionne, le serveur doit disposer d'un MTA local capable de relayer les courriels. Sur un VPS minimal, postfix en mode satellite est l'option la plus légère :
apt-get install -y postfix
# Choisir "Satellite system" dans le wizard
# Renseigner le relais SMTP de votre fournisseur ou de votre infrastructureAlternativement, msmtp peut servir de relais vers un service transactionnel (Mailgun, Postmark, SendGrid) sans installer un MTA complet.
Surveiller les redémarrages requis avec needrestart
Certains patches de sécurité — en particulier ceux du noyau, de la libc ou d'OpenSSL — nécessitent un redémarrage pour être pleinement actifs. L'outil needrestart détecte les services et processus qui utilisent encore les anciennes versions en mémoire.
Installez-le avec :
apt-get install -y needrestartAprès chaque mise à jour, needrestart liste les services à redémarrer. En mode automatique ($nrconf{restart} = 'a'; dans /etc/needrestart/needrestart.conf), il redémarre les services concernés sans intervention. Pour les noyaux, il ne redémarre jamais la machine automatiquement sans configuration explicite — c'est le comportement attendu sur un VPS de production.
Combinez needrestart avec les notifications unattended-upgrades : un courriel indiquant qu'un redémarrage est requis permet à l'équipe de planifier l'intervention au bon moment, sans urgence mais sans laisser traîner.
Reboot automatique pour les patches noyau
Le redémarrage automatique après un patch noyau est la décision la plus délicate dans une politique de mises à jour. Il garantit que le correctif est actif immédiatement, mais il interrompt les services en cours — ce qui peut être inacceptable pour certaines charges de travail.
Dans /etc/apt/apt.conf.d/50unattended-upgrades, les options concernées :
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";Automatic-Reboot-Time planifie le redémarrage à une heure creuse. Automatic-Reboot-WithUsers "false" empêche le redémarrage si une session utilisateur est ouverte — utile pour les machines de développement, moins pertinent sur un serveur de production sans connexion interactive permanente.
Précautions indispensables avant d'activer cette option :
- Vérifiez que vos services se relancent automatiquement au démarrage (systemctl is-enabled <service>).
- Testez le temps de redémarrage complet sur un serveur de staging avant de déployer en production.
- Si votre application nécessite un ordre de démarrage précis (base de données avant applicatif), documentez et testez ce scénario.
- Pour un parc multi-VPS, échelonnez les horaires de redémarrage — voir la section suivante.
Mises à jour manuelles vs automatiques : comparatif
Faites défiler le tableau
| Critère | Mise à jour manuelle | Mise à jour automatique (unattended-upgrades) |
|---|---|---|
| Délai d'application | Dépend du planning d'astreinte — souvent 3 à 7 jours | Quelques heures après publication dans les dépôts stables |
| Traçabilité | Dépend de la rigueur des notes de maintenance | Log horodaté automatique dans `/var/log/unattended-upgrades/` |
| Risque de régression | Contrôlé : chaque mise à jour est validée avant application | Faible sur les patches de sécurité stables, écarté par la liste noire |
| Charge opérationnelle | Élevée sur un parc de plus de 5 VPS | Négligeable une fois la configuration déployée |
| Patches noyau actifs | Immédiat si redémarrage planifié | Nécessite la configuration du reboot automatique ou une intervention manuelle |
| Couverture CVE critique | Insuffisante si le cycle est hebdomadaire | Optimale — les patches sont appliqués dans la fenêtre la plus étroite possible |
| Conformité documentable | Difficile à prouver sans outillage supplémentaire | Fichiers de log et configuration versionnables, auditables |
Déployer et gérer unattended-upgrades sur un parc multi-VPS
La configuration décrite jusqu'ici s'applique à un seul serveur. Pour un parc de dizaines de VPS clients, la reproductibilité et la coordination deviennent des enjeux à part entière.
Automatiser avec Ansible
Un rôle Ansible simple suffit à déployer la configuration sur l'ensemble du parc en quelques minutes. Stockez les fichiers 50unattended-upgrades et 20auto-upgrades dans templates/ et rendez les options de reboot configurables par variable d'inventaire :
- name: Déployer unattended-upgrades
hosts: vps_clients
become: true
tasks:
- name: Installer unattended-upgrades
apt:
name: [unattended-upgrades, apt-listchanges]
state: present
update_cache: true
- name: Déployer la configuration
template:
src: 50unattended-upgrades.j2
dest: /etc/apt/apt.conf.d/50unattended-upgrades
owner: root
mode: '0644'
- name: Déployer apt-periodic
copy:
src: 20auto-upgrades
dest: /etc/apt/apt.conf.d/20auto-upgrades
owner: root
mode: '0644'Échelonner les redémarrages
Si le reboot automatique est activé, ne configurez pas la même heure sur tous vos serveurs. Un redémarrage simultané de 30 VPS peut générer une charge de reconnexion inhabituelle sur votre infrastructure et compliquer le diagnostic en cas de problème. Distribuez les horaires sur une plage de deux heures (02:00 à 04:00) en utilisant une variable Ansible par groupe ou par serveur.
Tester sur staging avant le parc de production
Pour les configurations qui activent le reboot automatique ou qui modifient la liste noire des paquets, validez d'abord sur un serveur de staging représentatif. Un VPS 99 DH/mois dédié aux tests de configuration évite de propager une erreur de configuration à l'ensemble du parc.
Centraliser les alertes
Plutôt que de recevoir des courriels individuels de chaque serveur, configurez un alias courriel qui agrège les alertes dans un canal de supervision unique. Si votre infrastructure utilise déjà un agrégateur de logs (Loki, OpenSearch), les fichiers de log unattended-upgrades peuvent y être acheminés via un agent léger pour une vue centralisée du parc.
Pour aller plus loin sur la sécurisation de vos VPS, consultez notre checklist de durcissement Linux et notre comparatif CrowdSec vs Fail2ban. Si vous gérez également des applications self-hosted, la routine de correctifs pour applications self-hosted complète cette approche avec les couches applicatives.