Aggiornamenti automatici di Linux: configurare unattended-upgrades e dnf-automatic per gli aggiornamenti dei server Linux
Livello: Esperto
Tempo stimato: ~30 minuti
Obiettivo: Configurare aggiornamenti automatici di Linux scalabili e senza downtime con unattended-upgrades e dnf-automatic, seguendo i principi dell'Infrastructure as Code.
Introduzione
L'applicazione manuale delle patch sui server è un collo di bottiglia critico nella gestione di qualsiasi ambiente di produzione: senza automazione, mantenere in modo affidabile centinaia di nodi sicuri e aggiornati sarebbe molto difficile. Un'applicazione vulnerabile può essere compromessa in pochi minuti e la maggior parte degli exploit sfrutta vulnerabilità note e non ancora corrette. È necessario applicare tempestivamente gli aggiornamenti di sicurezza (patch critiche rilasciate per correggere vulnerabilità note nel software) per evitare violazioni della sicurezza. In questa guida configureremo gli aggiornamenti automatici di Linux su un server Linux utilizzando unattended-upgrades e dnf-automatic. Questo approccio standardizza gli aggiornamenti dei server Linux.
Cosa sono unattended-upgrades e dnf-automatic?
unattended-upgrades è un'utility di Debian/Ubuntu che automatizza l'installazione degli aggiornamenti di sicurezza e di altri aggiornamenti dei pacchetti.
dnf-automatic è un componente che fornisce aggiornamenti automatizzati per i sistemi RHEL/CentOS/Fedora.
Queste utility consentono di eseguire in modo trasparente in background gli aggiornamenti automatici (il processo di recupero e installazione degli aggiornamenti senza intervento umano). Di norma vengono eseguite ogni giorno tramite un timer systemd (un'unità systemd che controlla la pianificazione delle attività, in sostituzione dei tradizionali job di cron).
Prerequisiti
Prima di iniziare, assicurarsi che siano soddisfatte le seguenti condizioni:
- Sistema operativo: Ubuntu 20.04/22.04/24.04 LTS, Debian 12/13 o RHEL/AlmaLinux 9/10
- Accesso: accesso sudo o root al server
- Requisiti di rete: accesso HTTPS in uscita ai repository dei pacchetti (archive.ubuntu.com, security.debian.org, repo.almalinux.org)
- Conoscenze richieste: conoscenza approfondita di amministrazione di sistema, systemd e dei fondamenti della gestione delle patch (il processo di distribuzione e applicazione degli aggiornamenti software), nonché della gestione delle patch su Linux.
Passaggio 1: Configurare gli aggiornamenti automatici di Linux con unattended-upgrades
Per i sistemi che utilizzano APT (Advanced Package Tool) (il sistema di gestione dei pacchetti di base delle distribuzioni derivate da Debian), usiamo unattended-upgrades. Questo strumento si integra perfettamente nella vostra strategia di gestione delle patch su Linux.
1.1 Installare il pacchetto
Per prima cosa, verificare e installare il pacchetto necessario dal repository dei pacchetti (una posizione di archiviazione centralizzata da cui vengono recuperati e installati i pacchetti software).
Eseguire il comando seguente:
sudo apt update && sudo apt install unattended-upgrades -y
Dovrebbe comparire un output che conferma l'installazione. In questo modo il sistema è pronto per gli aggiornamenti automatici con APT.
1.2 Configurare le origini consentite
La configurazione principale si trova in /etc/apt/apt.conf.d/50unattended-upgrades. Modificheremo la configurazione in modo da installare solo gli aggiornamenti di sicurezza. Ciò riduce al minimo il rischio di modifiche incompatibili durante gli aggiornamenti automatici dei pacchetti.
Prima di apportare modifiche, è buona prassi creare un backup del file di configurazione originale:
sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak
Aprire il file di configurazione:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Sostituire interamente il contenuto del blocco Allowed-Origins e aggiungere i nomi indicati al blocco Package-Blacklist:
Per Ubuntu:
Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; };
Per Debian:
Unattended-Upgrade::Origins-Pattern { "origin=Debian,codename=${distro_codename},label=Debian-Security"; "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; };
Quindi configurare la blacklist dei pacchetti e il comportamento del riavvio:
Unattended-Upgrade::Package-Blacklist { "^nginx$"; "^mysql-server$"; "^mariadb-server$"; "postgresql*"; "docker*"; }; Unattended-Upgrade::Automatic-Reboot "false";
La Package-Blacklist utilizza espressioni regolari. Una voce come "nginx" corrisponde anche a nginx-common, nginx-extras, ecc. Per indicare solo il pacchetto esatto, usare ancore regex come "^nginx$".
Questa impostazione limita gli aggiornamenti automatici con APT alle sole patch di sicurezza ed esclude i pacchetti critici dall'aggiornamento automatico, riducendo il rischio di interruzioni del servizio e mantenendo al tempo stesso l'automazione delle patch di sicurezza.
Gli aggiornamenti di kernel, libc e di altri pacchetti di basso livello possono comunque richiedere un riavvio. Negli ambienti di produzione, mantenere disattivati i riavvii automatici, a meno che le finestre di manutenzione non siano garantite tramite orchestrazione.
1.3 Abilitare gli aggiornamenti automatici
Creare il file auto-upgrades per attivare il timer systemd di APT.
Aprire il file:
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
Incollare al suo interno quanto segue:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; APT::Periodic::AutocleanInterval "7";
Questa configurazione indica al sistema di:
Update-Package-Lists "1"- aggiornare ogni giorno gli elenchi dei pacchetti.Unattended-Upgrade "1"- eseguire automaticamente gli aggiornamenti automatici con APT.AutocleanInterval "7"- pulire la cache dei pacchetti ogni 7 giorni.
Passaggio 2: Configurare dnf-automatic per gli aggiornamenti dei server Linux
Per i sistemi che utilizzano DNF (Dandified YUM) (il gestore di pacchetti di nuova generazione per le distribuzioni basate su RHEL), dnf-automatic offre una solida automazione degli aggiornamenti con DNF.
2.1 Installare il pacchetto
Installare lo strumento di automazione dal repository dei pacchetti.
Eseguire il comando seguente:
sudo dnf install dnf-automatic -y
Dovrebbe comparire un output che conferma la corretta installazione del pacchetto per l'automazione degli aggiornamenti con DNF.
2.2 Configurare i criteri di aggiornamento
La configurazione principale si trova in /etc/dnf/automatic.conf. Configurare lo strumento in modo che scarichi e applichi solo gli aggiornamenti di sicurezza.
Prima di apportare modifiche, eseguire il backup del file di configurazione e verificare se per la propria distribuzione sono disponibili avvisi di sicurezza (security advisory):
sudo cp /etc/dnf/automatic.conf /etc/dnf/automatic.conf.bak sudo dnf updateinfo summary sudo dnf updateinfo list security
Aprire il file di configurazione:
sudo nano /etc/dnf/automatic.conf
Modificare i seguenti parametri:
[commands] upgrade_type = security random_sleep = 3600 download_updates = yes apply_updates = yes [emitters] emit_via = stdio
Questa configurazione indica al sistema di:
upgrade_type = security- considerare esclusivamente le patch di sicurezza.random_sleep = 3600- randomizzare l'esecuzione fino a 1 ora, distribuendo il carico nei deployment Infrastructure as Code su larga scala per evitare picchi sui repository e guasti a cascata simultanei.download_updateseapply_updates- scaricare e installare automaticamente gli aggiornamenti di sicurezza.
upgrade_type = security dipende dai metadati di sicurezza del repository. Se gli avvisi di sicurezza mancano (cosa tipica in una nuova installazione di AlmaLinux 10), con questa impostazione dnf-automatic potrebbe non applicare alcun aggiornamento. Verificare il supporto del repository prima di affidarsi in produzione ai soli aggiornamenti di sicurezza. In alternativa, per i sistemi di produzione, si può valutare upgrade_type = security-severity:Critical oppure default-security.
2.3 Abilitare il timer systemd
Attivare il timer per pianificare l'automazione degli aggiornamenti con DNF.
Eseguire il comando seguente:
sudo systemctl enable --now dnf-automatic.timer
Dovrebbe comparire un output che indica che il timer è abilitato e avviato. In questo modo si attivano gli aggiornamenti automatici dei pacchetti pianificati per il sistema.
Passaggio 3: Verificare la configurazione
Dopo aver scritto la configurazione, è opportuno verificarla.
3.1 Verifica su Debian/Ubuntu
Eseguire una simulazione (dry run) per convalidare la configurazione. Il flag -d (o --dry-run) esegue unattended-upgrades in modalità debug: nulla viene effettivamente modificato:
sudo unattended-upgrades --dry-run --debug
Il flag --dry-run produce informazioni diagnostiche ma non modifica alcun file. Verificare che non vi siano pacchetti della blacklist in coda.
In produzione i log contano più delle simulazioni. Verificare che il timer e il servizio siano attivi:
systemctl list-timers | grep apt systemctl status apt-daily-upgrade.service --no-pager
Controllare poi l'output recente del log per confermare l'attività di aggiornamento. Su un sistema appena configurato il log potrebbe essere vuoto. Per un controllo immediato, eseguire: sudo unattended-upgrade -v.
sudo tail -n 50 /var/log/unattended-upgrades/unattended-upgrades.log
3.2 Verificare il timer su RHEL/AlmaLinux
Controllare lo stato del timer:
systemctl list-timers | grep dnf-automatic
Output previsto:
Wed 2026-05-27 06:23:13 EEST 16h left - - dnf-automatic.timer dnf-automatic.service
Se il timer è presente nell'elenco, gli aggiornamenti sono pianificati correttamente.
3.3 Verificare la necessità di un riavvio
Gli aggiornamenti di kernel e libc rientrano nella coda di sicurezza (ad esempio, su Debian linux-image-amd64 fa parte degli aggiornamenti di sicurezza). Poiché è impostato Automatic-Reboot=false, è necessario verificare manualmente se serve un riavvio.
Per Debian/Ubuntu:
test -f /var/run/reboot-required && cat /var/run/reboot-required.pkgs
Per AlmaLinux/RHEL:
sudo dnf needs-restarting -r
3.4 Esecuzione forzata per la verifica
Il risultato potrebbe non essere visibile finché il timer non scatta. Per eseguire manualmente il processo di aggiornamento a scopo di verifica:
Per Debian/Ubuntu:
sudo unattended-upgrade -v
Per AlmaLinux/RHEL:
sudo dnf-automatic
Passaggio 4: Configurazione avanzata (livello esperto)
Per soddisfare requisiti di livello esperto, è possibile estendere la configurazione con notifiche e una pianificazione più granulare.
4.1 Notifiche via e-mail
Per ricevere report sugli aggiornamenti:
Per Debian/Ubuntu:
In /etc/apt/apt.conf.d/50unattended-upgrades, rimuovere il commento e modificare:
Unattended-Upgrade::Mail "<YOUR_EMAIL>"; Unattended-Upgrade::MailReport "on-change";
Per AlmaLinux/RHEL:
In /etc/dnf/automatic.conf, configurare la sezione [email] e cambiare l'emitter:
[emitters] emit_via = email [email] email_from = [email protected] email_to = <YOUR_EMAIL> email_host = localhost
4.2 Timer avanzati di dnf-automatic
dnf-automatic offre più timer che consentono di separare le fasi di download e di installazione, garantendo un maggiore controllo in produzione:
- dnf-automatic.timer: il timer predefinito (scarica e, se configurato, installa).
- dnf-automatic-notifyonly.timer: verifica solo la presenza di aggiornamenti e invia una notifica.
- dnf-automatic-download.timer: scarica gli aggiornamenti ma non li installa.
- dnf-automatic-install.timer: scarica e installa automaticamente gli aggiornamenti (sovrascrive l'impostazione
apply_updatesdella configurazione).
Utilizzare il timer più adatto ai criteri di manutenzione del proprio cluster.
Rollback
Per annullare tutto quanto fatto, è sufficiente rimuovere gli strumenti e le configurazioni.
Debian/Ubuntu:
sudo apt purge unattended-upgrades -y sudo rm -rf /etc/apt/apt.conf.d/20auto-upgrades /var/log/unattended-upgrades/ /var/run/reboot-required* sudo mv /etc/apt/apt.conf.d/50unattended-upgrades.bak /etc/apt/apt.conf.d/50unattended-upgrades
RHEL/AlmaLinux:
sudo systemctl disable --now dnf-automatic.timer sudo mv /etc/dnf/automatic.conf.bak /etc/dnf/automatic.conf sudo dnf remove dnf-automatic -y
La rimozione di questi strumenti disattiverà gli aggiornamenti automatici per l'intero sistema, lasciando i server vulnerabili se non vengono aggiornati manualmente.
Conclusione
Ecco fatto. Un sistema configurato correttamente con unattended-upgrades o dnf-automatic, verificato con una simulazione, e il lavoro è concluso. Grazie a questa automazione delle patch di sicurezza, gli aggiornamenti automatici di Linux vengono applicati senza intoppi, il carico di manutenzione resta contenuto e gli aggiornamenti dei server Linux diventano prevedibili anziché reattivi. Negli ambienti più grandi, combinare questa configurazione con Infrastructure as Code e rollout graduali per evitare di aggiornare tutti i nodi contemporaneamente.
Versione del documento: 1.0
Ultimo aggiornamento: maggio 2026
Responsabile: Team di documentazione tecnica