Aggiornamenti automatici Linux: unattended-upgrades e dnf-automatic | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

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";

Info

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.

Warning

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_updates e apply_updates - scaricare e installare automaticamente gli aggiornamenti di sicurezza.

Info

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

Info

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_updates della 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

Warning

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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA