Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati


Guida verificata con Ubuntu: 22.04

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

A partire dal rilascio Ubuntu 22.04 potrebbero comparire messaggi di avvertimento simili ai seguenti:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

contestualmente o in seguito all'installazione della chiave di autenticazione di un repository di terze parti, oppure quando l'installazione di programmi esterni tramite file .deb comporta l'aggiunta automatica dei loro repository.

Ciò è causato dall'utilizzo dello strumento apt-key, usato per caricare le chiavi di autenticazione dei repository di terze parti, che però è stato deprecato a favore di una procedura ritenuta più sicura.

Questa guida spiega le procedure, tramite comandi eseguiti nel terminale, per aggiungere e gestire repository e chiavi di autenticazione di terze parti, valide per Ubuntu 22.04 (ultima versione in cui sarà presente apt-key).

Tutte le procedure descritte di seguito utilizzano nomi generici quali esempio.com per il repository, esempio-keyring.gpg per la chiave, ecc.
Sostituire gli indirizzi e i nomi dei file indicati con quelli effettivi.

Queste procedure non sono necessarie con i PPA (Repository Launchpad).

Motivi del cambiamento

In conformità alla Policy di Debian, è richiesto che ogni repository di terze parti venga autenticato con una chiave di autenticazione OpenPGP, evitando quindi di usare il formato Ascii-armored, e di utilizzare per il collegamento il protocollo HTTPS (più sicuro nei confronti di attacchi MITM).

Inoltre apt-key, in aderenza alle funzionalità di apt, alloca le chiavi di autenticazione dei repository di terze parti in /etc/apt/trusted.gpg e/o /etc/apt/trusted.gpg.d. Queste posizioni però sono ritenute sempre sicure da apt. Ne consegue che un repository di terze parti può installare o aggiornare qualsiasi pacchetto, non soltanto i pacchetti contenuti nel repository stesso. Ciò comporta evidenti rischi, in quanto un repository esterno potrebbe virtualmente anche sostituire qualsiasi pacchetto presente nel sistema.

Pertanto apt-key potrebbe esporre il sistema a potenziali violazioni della sicurezza. Da qui la decisione di separare la gestione e l'allocazione delle chiavi di autenticazione.

Gestione delle chiavi

Installazione con apt-key (deprecata)

Le seguenti istruzioni vengono riportate al solo scopo di mostrare le differenze con la procedura più recente.

  • Per importare la chiave di autenticazione dei pacchetti del repository, è usata la stringa:

    wget -qO - https://esempio.com/esempio-keyring.gpg | sudo apt-key add -

    Il comando salva la chiave di autenticazione nel file /etc/apt/trusted.gpg o nella cartella /etc/apt/trusted.gpg.d.

  • Per installare il repository dei pacchetti è usata la stringa:

    echo "deb https://esempio.com/ all main" | sudo tee /etc/apt/sources.list.d/esempio.list

    Con questo comando l'indirizzo del repository viene semplicemente copiato in un file omonimo allocato nella cartella /etc/apt/sources.list.d/.

Installazione diretta del file gpg

  • Per importare la chiave di autenticazione del repository, è usata la stringa:

    wget -qO - https://esempio.com/esempio-keyring.gpg | gpg --dearmor | sudo tee /etc/apt/keyrings/esempio-keyring.gpg -

    La pipe intermedia «| gpg --dearmor |» serve per convertire una chiave di autenticazione eventualmente distribuita dal formato .asc (Ascii-armored) al formato .gpg (GNU Privacy Guard). Se la chiave è già nel formato .gpg, il comando viene ignorato. Viene infine specificata la cartella /etc/apt/keyrings/, posizione dove viene salvata la chiave.

    • La Policy Debian suggerisce di allocare le chiavi di autenticazione nella cartella /usr/share/keyrings. A partire dalla versione 2.4.0 di apt viene fornita come destinazione /etc/apt/keyrings per le chiavi gestite in locale. In alternativa possono essere scelte anche posizioni personali, come ad esempio /usr/local/share/keyrings o altre.

  • Per importare il repository dei pacchetti, è usata la stringa:

    echo "deb [signed-by=/etc/apt/keyrings/esempio-keyring.gpg] https://esempio.com/ all main" | sudo tee /etc/apt/sources.list.d/esempio.list

    dove viene aggiunta l'opzione signed-by= (racchiusa tra parentesi quadre) che serve ad indicare il percorso dove viene salvata la chiave di autenticazione del repository (selezionata nel comando precedente).

    • Se già presenti delle parentesi quadre con indicata un'altra opzione (ad esempio [arch=amd64]), aggiungere semplicemente l'opzione signed-by=/percorso/file.gpg all'interno delle parentesi esistenti, separata dall'altra opzione con uno spazio.

  • Infine, per garantire una maggiore sicurezza rispetto ad usi impropri delle chiavi, occorre assegnare la chiave di autenticazione all'utente root e limitarne i permessi di esecuzione. A tale scopo utilizzare i comandi:

    sudo chown root:root esempio-keyring.gpg
    sudo chmod 644 esempio-keyring.gpg

    Per maggiori informazioni sul sistema di proprietà, accesso ed esecuzione dei file in Ubuntu consultare questa guida.

Chiave di autenticazione numerica

Nel caso la chiave d'autenticazione venga fornita in forma numerica esadecimale, del tipo:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xA1B2C3D4

occorre modificare la sinossi in questo modo:

sudo gpg --no-default-keyring --keyring /etc/apt/keyrings/esempio.gpg --recv-keys --keyserver keyserver.ubuntu.com 0xA1B2C3D4

Ricordare di anteporre sempre nella nuova procedura «0x» al codice numerico esadecimale.

Chiavi aggiunte in precedenza

In caso di chiavi ottenute in precedenza e allocate in /etc/apt/trusted.gpg e/o /etc/apt/trusted.gpg.d, occorrerà spostarle nella directory prescelta (ad esempio /etc/apt/keyrings).

Si ricorda di usare una destinazione di salvataggio corretta e appropriata, diversa da /etc/apt/trusted.gpg.d, nonostante quanto indicato dai messaggi di avvertimento e nonostante il fatto che utilizzando questa directory il sistema potrebbe non notificare alcun problema.

Benché deprecato, è comunque possibile utilizzare apt-key per ottenere un elenco delle chiavi presenti. A tale scopo digitare nel terminale il comando:

sudo apt-key list

L'output restituirà una lista simile alla seguente:

/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2021-06-23 [SC] [scadenza: 2031-06-23]
      DD3C 0082 368A 9FBD E02F  1CCC 8DE1 55F2 54D7 B7A0
uid           [  sconosciuto] Esempio1 Signing Key 2021 <exemple@exemple1.com>
sub   rsa4096 2021-06-23 [E] [scadenza: 2031-06-23]

/etc/apt/trusted.gpg.d/exemple2.gpg
--------------------------------------------------------------
pub   rsa1024 2018-09-17 [SC]
      C65D 5178 4EDC 19A8 71DB  EA58 5E62 ACA3 D791 625A
uid           [  sconosciuto] Launchpad PPA for Esempio2

Per semplificare l'esempio l'output presenta solo due risultati, ma la lista dovrebbe essere parecchio più lunga.

Seguire le istruzioni descritte di seguito:

  1. Individuare una o più chiavi relative a repository di terze parti che è necessario spostare.
  2. Procedere di seguito a seconda dell'allocazione della chiave:
    • Chiave salvata nel file /etc/apt/trusted.gpg: individuare le ultime otto cifre del codice esadecimale (seconda riga delle informazioni relative alla chiave) ed esportare la chiave in un nuovo file dedicato con il comando:

      sudo apt-key export 54D7B7A0 | sudo gpg --dearmour -o /etc/apt/keyrings/esempio1.gpg

      sostituendo 54D7B7A0 con le ultime otto cifre effettive (senza lo spazio nel mezzo) e /etc/apt/keyrings/esempio1.gpg con il nome del file relativo alla chiave esportata. Quest'ultimo potrà essere attribuito dall'utente (ad esempio /etc/apt/keyrings/skype.gpg, /etc/apt/keyrings/spotify.gpg ecc.).
      Un ulteriore passaggio facoltativo è eliminare la vecchia chiave (ancora presente in /etc/apt/trusted.gpg) con il comando:

      sudo apt-key del 54D7B7A0

      sostituendo 54D7B7A0 con le otto cifre utilizzate precedentemente.

    • Chiave salvata nella directory /etc/apt/trusted.gpg.d: spostare il file relativo alla chiave nella cartella /etc/apt/keyrings.

  3. Aprire con i privilegi di amministrazione e con un editor di testo il corrispondente file, relativo al repository e presente nella directory /etc/apt/sources.list.d.

  4. Modificare il file aggiungendo l'opzione [signed-by=...] comprendente nome e percorso della chiave, come descritto nel paragrafo dedicato. Infine salvare e chiudere il file.

Esempio generico di aggiunta di un repository di terze parti

Quello che segue è un esempio pratico dell'utilizzo dei precedenti passaggi, eseguiti in sequenza.

  1. Importare la chiave di firma dei pacchetti del repository:

    wget -qO - https://esempio.com/esempio-keyring.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/esempio-keyring.gpg -
  2. Importare il repository:

    echo "deb [signed-by=/etc/apt/keyrings/esempio-keyring.gpg] https://esempio.com/ stable main" | sudo tee /etc/apt/sources.list.d/esempio.list
  3. Assicurarsi che il file /etc/apt/keyrings/esempio-keyring.gpg e i relativi permessi di esecuzione siano attribuiti all'utente root. In caso contrario modificarli con le istruzioni contenute in questa guida.

  4. Aggiornare la lista dei pacchetti.

  5. Installare il pacchetto esempio.

Terminata la procedura, sarà possibile utilizzare il repository di terze parti per installare e/o aggiornare i pacchetti desiderati, tramite le consuete modalità.

Ulteriori risorse

CategoryAmministrazione