Gestione dei pacchetti con apt
Modulo 4: Software e aggiornamenti · Tempo di lettura: 10 minuti
Obiettivo della lezione: Dopo questa lezione Lei sarà in grado di installare, aggiornare e rimuovere software con apt, di vedere da dove proviene un pacchetto e di riconoscere quali aggiornamenti sono aggiornamenti di sicurezza.
Concetti chiave: pacchetto, sorgente dei pacchetti (repository), sources.list, file .sources (deb822), signed-by, apt update, apt upgrade, apt full-upgrade, remove, purge, autoremove, apt-cache policy, sorgente di sicurezza, dnf
Perché un gestore di pacchetti?
Su Windows si scarica un programma di installazione da un sito web. Su un server Linux non lo si fa quasi mai. Il software arriva sotto forma di pacchetto da una sorgente dei pacchetti (repository): un server della distribuzione con migliaia di programmi, tutti compilati e testati per la Sua versione di Debian o Ubuntu. Il programma che scarica, installa e aggiorna questi pacchetti si chiama gestore di pacchetti. Su Debian e Ubuntu è apt (che si appoggia a dpkg), su AlmaLinux e Rocky Linux è dnf.
Questo offre tre grandi vantaggi:
- Un solo comando aggiorna tutto. Il server web, il server SSH, le librerie e il kernel provengono dalla stessa sorgente. Non deve controllare sul sito di ogni programma se è uscita una nuova versione.
- La provenienza è verificata. Ogni sorgente dei pacchetti è firmata con una chiave. apt rifiuta i pacchetti la cui firma non è corretta.
- Le dipendenze vengono gestite. Se nginx ha bisogno di una libreria, apt la installa automaticamente e in seguito la rimuove di nuovo.
Le sorgenti dei pacchetti: da dove arriva il software?
Le sorgenti usate da apt sono indicate in /etc/apt/. Per molto tempo si trattava di un unico file sources.list con righe come:
deb http://deb.debian.org/debian bookworm mainUbuntu 24.04 e versioni successive, le immagini cloud di Debian e un numero crescente di nuove installazioni usano il più recente formato deb822: file separati con estensione .sources in /etc/apt/sources.list.d/. Un vecchio sources.list si può convertire con sudo apt modernize-sources (apt 3, Debian 13). Ad esempio su Debian 13:
anna@web1:~$ cat /etc/apt/sources.list.d/debian.sources
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian-security
Suites: trixie-security
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpgSi legge così: la suite è la versione (trixie è Debian 13; noble è Ubuntu 24.04), il component è una parte della sorgente (main su Debian; main, universe, restricted e multiverse su Ubuntu) e Signed-By indica con quale chiave deve essere firmata la sorgente. Quest'ultimo punto è importante: una chiave appartiene a una sola sorgente, non a tutte contemporaneamente. Se in seguito aggiunge una sorgente di un produttore (Docker, Caddy, PostgreSQL), questa riceve un proprio file di chiave e una propria riga Signed-By (lezione 9.2).
La sorgente con -security nel nome è la sorgente di sicurezza. Da lì arrivano gli aggiornamenti di sicurezza, di solito lo stesso giorno in cui una vulnerabilità diventa nota. Su Ubuntu questa suite si chiama noble-security (o con il nome della Sua versione).
Se usa ancora il vecchio sources.list, tutto continua a funzionare normalmente. Eviti però di indicare la stessa sorgente in entrambi i formati, altrimenti apt segnala righe duplicate.
update, upgrade e full-upgrade
La differenza tra questi tre concetti è la prima trappola per chi inizia.
| Comando | Che cosa fa |
|---|---|
apt update | Scarica l'elenco dei pacchetti e delle versioni presenti nelle sorgenti. Non installa nulla. |
apt upgrade | Aggiorna i pacchetti installati alla versione più recente presente in quell'elenco. Non rimuove mai nulla. Un aggiornamento che richiederebbe la rimozione di un altro pacchetto viene saltato. |
apt full-upgrade | Fa lo stesso, ma può anche rimuovere pacchetti o installarne di nuovi se necessario. Serve per un upgrade di release (lezione 4.3) e talvolta per un nuovo kernel. |
Quindi sempre prima update, poi upgrade:
anna@web1:~$ sudo apt update
Hit:1 http://deb.debian.org/debian trixie InRelease
Get:2 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
...
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
anna@web1:~$ apt list --upgradable
Listing... Done
libssl3t64/trixie-security 3.5.1-1+deb13u1 amd64 [upgradable from: 3.5.1-1]
openssh-server/trixie-security 1:10.0p1-7+deb13u1 amd64 [upgradable from: 1:10.0p1-7]
tzdata/trixie-updates 2026b-0+deb13u1 all [upgradable from: 2026a-0+deb13u1](I numeri di versione qui sopra sono un esempio.) Dopo il nome è indicata la suite da cui proviene la nuova versione. Tutto ciò che riporta -security è un aggiornamento di sicurezza: va installato il prima possibile. -updates sono altri aggiornamenti stabili, come nuovi dati sui fusi orari.
Poi:
anna@web1:~$ sudo apt upgradeapt mostra che cosa cambia e chiede conferma. Legga quell'elenco. Se compare "The following packages will be REMOVED" (i pacchetti seguenti verranno rimossi), sta succedendo qualcosa di particolare ed è bene capire prima il perché.
Installare, rimuovere e fare pulizia
anna@web1:~$ sudo apt install nginx
anna@web1:~$ sudo apt remove nginx # programma rimosso, la configurazione in /etc resta
anna@web1:~$ sudo apt purge nginx # programma e configurazione rimossi
anna@web1:~$ sudo apt autoremove # rimuovere ciò che non serve più a nessunoLa differenza tra remove e purge è utile: se vuole togliere qualcosa temporaneamente e reinstallarlo in seguito con le stesse impostazioni, usi remove. Se vuole davvero ripartire da zero, purge.
Cercare e ottenere più informazioni:
anna@web1:~$ apt search fail2ban
anna@web1:~$ apt show fail2ban
anna@web1:~$ apt-cache policy openssh-server
openssh-server:
Installed: 1:10.0p1-7
Candidate: 1:10.0p1-7+deb13u1
Version table:
1:10.0p1-7+deb13u1 500
500 http://deb.debian.org/debian-security trixie-security/main amd64 Packages
*** 1:10.0p1-7 500
500 http://deb.debian.org/debian trixie/main amd64 Packagesapt-cache policy è il comando da usare quando vuole sapere da dove proviene un pacchetto e quale versione sceglierà apt. Il *** si trova accanto alla versione installata, Candidate è ciò che installerebbe un upgrade.
Versioni di Debian e versione di un programma
Una lamentela frequente: "Debian contiene una vecchia versione di nginx." È vero ed è voluto. Debian e Ubuntu congelano le versioni al momento della pubblicazione di una release e in seguito aggiungono solo correzioni di sicurezza e riparazioni gravi, senza nuove funzionalità. Per questo un pacchetto con un numero di versione "vecchio" può comunque contenere tutte le correzioni di sicurezza recenti: sono state riportate (backport) nella vecchia versione. Lo si riconosce dal suffisso, come +deb13u1 o ubuntu0.1.
Non confronti quindi mai soltanto il numero di versione con il sito del produttore per valutare se è vulnerabile. Consulti gli avvisi di sicurezza della Sua distribuzione: il Debian Security Tracker (security-tracker.debian.org) e gli Ubuntu Security Notices (ubuntu.com/security/notices) indicano per ogni vulnerabilità se la Sua versione è stata corretta.
Alcune regole per un server tranquillo
- Installi solo ciò che Le serve. Ogni pacchetto è codice da aggiornare e talvolta un servizio in ascolto (lezione 5.1).
- Meglio dalla distribuzione che da un sito web. Un programma compilato da Lei o scaricato come file singolo non viene aggiornato da
apt upgrade. In quel caso deve seguire Lei stesso gli avvisi di sicurezza. - Una sorgente aggiuntiva solo dal produttore stesso, con una propria chiave e
Signed-By. Non aggiunga mai una chiave "valida per tutto" e mai una sorgente di un sito sconosciuto (lezione 4.3). - Legga ciò che chiede apt. Durante un upgrade apt può chiederLe se vuole sostituire un file di configurazione modificato con la nuova versione del produttore. Se non sa che cosa vi ha cambiato, scelga "keep the local version" (mantenere la versione locale, l'opzione predefinita) e in seguito controlli la differenza con
diff: la nuova versione si trova accanto come.dpkg-dist.
Su AlmaLinux e Rocky Linux
Lì il gestore di pacchetti si chiama dnf e i pacchetti sono .rpm. I comandi somigliano a quelli di apt: dnf check-update (l'elenco), dnf upgrade (aggiornare, update e upgrade in uno), dnf install, dnf remove, dnf info. Le sorgenti si trovano in /etc/yum.repos.d/*.repo. Molto software aggiuntivo (come fail2ban) proviene dalla sorgente separata EPEL, che va prima attivata con dnf install epel-release. Per mostrare solo gli aggiornamenti di sicurezza si usa dnf updateinfo list --security.
In pratica: la schermata del VPS
Presso WebOké, e presso la maggior parte degli altri fornitori, l'installazione del Suo VPS configura già correttamente le sorgenti standard della distribuzione. Di solito non deve modificare nulla. Aggiorni il server subito dopo il primo accesso con apt update e apt upgrade (lezione 1.2) e, prima di modifiche importanti, crei uno snapshot nel pannello del Suo fornitore.
Riepilogo
- Su Debian e Ubuntu il software proviene da sorgenti dei pacchetti firmate; apt scarica, installa, aggiorna e fa pulizia.
apt updatescarica solo l'elenco;apt upgradeaggiorna senza rimuovere;apt full-upgradepuò anche rimuovere.- Gli aggiornamenti di sicurezza provengono dalla suite con
-securitynel nome;apt list --upgradableeapt-cache policymostrano da dove proviene una versione. - Un vecchio numero di versione con
+deb13u1oubuntu0.xpuò contenere tutte le correzioni (backport): consulti gli avvisi di sicurezza della Sua distribuzione. - Una sorgente aggiuntiva solo dal produttore stesso, con una propria chiave in
Signed-By.
Quiz
Esercizio
Esercizio Z4.1: Quali aggiornamenti sono aggiornamenti di sicurezza? Il file di esempio apt-upgradable.txt contiene l'output di apt list --upgradable e apt-cache policy di un server Debian 13. Risponda: quali pacchetti provengono dalla sorgente di sicurezza, quale pacchetto proviene dalla sorgente di un produttore anziché da Debian, quale versione di openssh-server è attualmente installata e quale pacchetto è un normale aggiornamento stabile senza motivi di sicurezza? Il programma confronta le risposte con la soluzione fissa. Se ha già un server proprio, esegua gli stessi comandi e osservi che cosa vede.
Per approfondire
- Proteggere il suo VPS: i primi cinque minuti
- Primi passi con il suo VPS
- Manuale dell'amministratore Debian, capitolo 6 (apt): https://debian-handbook.info/browse/stable/apt.html
- Pagina di manuale
sources.list(5)(formato deb822): https://manpages.debian.org/trixie/apt/sources.list.5.en.html - Debian Security Tracker: https://security-tracker.debian.org/tracker/
