rss logo

Debian : configuration des mises à jour automatiques

Debian Logo

Lorsqu’on doit gérer plusieurs serveurs Debian (comme moi 💪), il peut être difficile de les maintenir tous à jour. Cela implique de se connecter sur chaque serveur individuellement, d’exécuter quelques commandes, et parfois de redémarrer le système selon les mises à jour appliquées. Pour automatiser ce processus, on peut utiliser l’outil unattended-upgrades. Dans cet article, je vais vous montrer comment utiliser cet outil pour garder un système Debian à jour, et comment le configurer pour envoyer une notification par e-mail à la fin d’une mise à jour.

Prérequis

  • Commencez par vérifier que le paquet unattended-upgrades est installé :
root@host:~# apt update && apt install unattended-upgrades

Configuration

Selon la sensibilité de nos serveurs, on peut les configurer pour qu’ils redémarrent automatiquement, n’installent que les mises à jour de sécurité, etc. Personnellement, je choisis d’installer toutes les mises à jour et de redémarrer le système si nécessaire.

  • Éditez le fichier /etc/apt/apt.conf.d/50unattended-upgrades :
Unattended-Upgrade::Origins-Pattern {
	// Les mises à jour recommandées sont des modifications de logiciels, mais pas des mises à jour qui affecteront la sécurité de votre système. Elles tendent à corriger des bogues et des problèmes gênants.
        "origin=Debian,codename=${distro_codename}-updates";
	// Les mises à jour "proposed" sont des mises à jour qui attendent d'être placées dans la file d'attente des mises à jour recommandées après avoir été testées. Il se peut qu'elles ne soient jamais recommandées ou qu'elles soient remplacées par une mise à jour plus récente.
	// Elles sont déconseillées dans un environnement de production
        //"origin=Debian,codename=${distro_codename}-proposed-updates";
        "origin=Debian,codename=${distro_codename},label=Debian";
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
        "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
};
[…]
// Permettre au système de redémarrer automatiquement si nécessaire
Unattended-Upgrade::Automatic-Reboot "true";
[…]
// Si le redémarrage automatique est activé et nécessaire, le redémarrage s'effectue à l'heure
// spécifiée au lieu de redémarrer immédiatement.
// Paramètre par défaut : "now"
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
  • Créez ou modifiez le fichier /etc/apt/apt.conf.d/20auto-upgrades pour activer les mises à jour automatiques :
// Exécuter "apt-get update" automatiquement tous les n-jours (0=désactivé)
APT::Periodic::Update-Package-Lists "1";

// Exécuter le script "unattended-upgrade"
// tous les n-jours (0=désactivé)
// Nécessite le paquet "unattended-upgrades", écrira
// log dans /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";
  • Exécutez une vérification en mode debug pour vous assurer que tout fonctionne correctement :
root@host:~# unattended-upgrade -d --dry-run

Modifier les horaires de téléchargement et de mise à jour

Par défaut, les mises à jour sont programmées deux fois par jour, à 6 h et à 18 h, et les installations ont lieu à 6 h. Il est possible de modifier ces réglages en éditant deux fichiers de minuterie systemd.

Modifier la planification des téléchargements

  • Éditez le fichier /etc/systemd/system/timers.target.wants/apt-daily.timer et remplacez l’heure existante par celle de votre choix :
[Unit]
Description=Daily apt download activities

[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

Modifier la planification des mises à jour

  • Éditez le fichier /etc/systemd/system/timers.target.wants/apt-daily-upgrade.timer et remplacez l’heure existante par celle souhaitée :
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target

Appliquer les modifications

  • Exécutez les commandes suivantes pour prendre les changements en compte :
root@host:~# systemctl daemon-reload && systemctl restart apt-daily-upgrade.timer && systemctl restart apt-daily.timer

Configurer les alertes par e-mail

Il peut être utile de recevoir des rapports par e-mail pour s’assurer que les mises à jour ont bien été appliquées, et pour savoir quand un serveur a redémarré après l’installation des derniers correctifs. Pour cela, il faut au minimum configurer un client SMTP. Dans cet article, je vais montrer comment configurer msmtp.

  • Installez le paquet msmtp et appliquez des droits d’accès restreints au fichier /etc/msmtprc :
root@host:~# apt update && apt install msmtp
root@host:~# chmod 600 /etc/msmtprc
  • Modifiez le fichier /etc/msmtprc et adaptez-le à votre serveur de messagerie. Par exemple, voici ma configuration :
    • Serveur mail : mail.std.rocks
    • Protocole : smtps / TCP 465
    • Identifiant : srv1@std.rocks
    • Mot de passe : MyWeakPassword
account STD
#Mail Server : 
host mail.std.rocks
port 465
from srv1@std.rocks
#LOGIN / PASSWORD 
user srv1@std.rocks
password MyWeakPassword

auth on
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_certcheck off
logfile /var/log/msmtp

account default : STD
  • Définissez msmtp comme programme par défaut pour sendmail :
root@host:~# ln -fs /usr/bin/msmtp /usr/sbin/sendmail
  • Modifiez le fichier /etc/apt/apt.conf.d/50unattended-upgrades pour configurer les notifications par e-mail :
// Envoyer un courriel à cette adresse pour signaler des problèmes ou des paquets qui ont été mis à jour
Unattended-Upgrade::Mail "srv1-unattended@std.rocks";
[…]
// Remplacer la valeur "on-change" par "always" et lancer unattended-upgrade -d pour tester que le rapport par courriel fonctionne
Unattended-Upgrade::MailReport "on-change";
// Optionnel : Paramétrer le champ From dans le courriel qui sera envoyé
Unattended-Upgrade::Sender "srv1@std.rocks";