#format wiki
#LANGUAGE it
<
>
<>
<>
<>
= 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 [[https://it.wikipedia.org/wiki/Chiave_pubblica|chiave di autenticazione]] di un [[Repository/NonUfficiali|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 [[AmministrazioneSistema/Terminale|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''').
{{{#!wiki note
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.
}}}
{{{#!wiki note
Queste procedure non sono necessarie con i [[Repository/RigaDiComando#Aggiungere_repository_launchpad|PPA (Repository Launchpad)]].
}}}
== Motivi del cambiamento ==
In conformità alla [[https://www.debian.org/doc/debian-policy/|Policy di Debian]], è richiesto che ogni repository di terze parti venga autenticato con una chiave di autenticazione [[https://it.wikipedia.org/wiki/OpenPGP|OpenPGP]], evitando quindi di usare il formato [[https://en.wikipedia.org/wiki/Talk%3AASCII_armor|Ascii-armored]], e di utilizzare per il collegamento il protocollo [[https://it.wikipedia.org/wiki/HTTPS|HTTPS]] (più sicuro nei confronti di attacchi [[https://it.wikipedia.org/wiki/Attacco_man_in_the_middle|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) ==
{{{#!wiki important
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` ([[https://en.wikipedia.org/wiki/Talk%3AASCII_armor|Ascii-armored]]) al formato `.gpg` ([[https://it.wikipedia.org/wiki/GNU_Privacy_Guard|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.
{{{#!wiki note
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).
{{{#!wiki note
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 [[AmministrazioneSistema/PermessiFile|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 [[#import|directory prescelta]] (ad esempio `/etc/apt/keyrings`).
{{{#!wiki important
Si ricorda di usare una destinazione di salvataggio corretta e appropriata, diversa da `/etc/apt/trusted.gpg.d`, nonostante quanto indicato dai [[#intro|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 [[AmministrazioneSistema/Terminale|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
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
}}}
{{{#!wiki note
Per semplificare l'esempio l'output presenta solo due risultati, ma la lista dovrebbe essere parecchio più lunga.
}}}
Seguire le istruzioni descritte di seguito:
0. Individuare una o più chiavi relative a repository di terze parti che è necessario spostare.
0. 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`:''' [[AmministrazioneSistema/ComandiBase#mv|spostare]] il file relativo alla chiave nella cartella `/etc/apt/keyrings`.
0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il corrispondente file, relativo al repository e presente nella directory `/etc/apt/sources.list.d`.
0. Modificare il file aggiungendo l'opzione `[signed-by=...]` comprendente nome e percorso della chiave, come descritto nel [[#import|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.
0. 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 -
}}}
0. Importare il [[Repository|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
}}}
0. Assicurarsi che il file `/etc/apt/keyrings/esempio-keyring.gpg` e i relativi [[AmministrazioneSistema/PermessiFile#Visualizzare_i_permessi|permessi di esecuzione]] siano attribuiti all'utente root. In caso contrario modificarli con le istruzioni contenute in [[Repository/GestioneRepositoryTerzeParti#Installazione_diretta_del_file_gpg|questa guida]].
0. [[AmministrazioneSistema/InstallareProgrammi/Apt#Aggiornamento_del_sistema|Aggiornare la lista dei pacchetti]].
0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://esempio|esempio]].
Terminata la procedura, sarà possibile utilizzare il repository di terze parti per [[AmministrazioneSistema/InstallareProgrammi|installare]] e/o [[AmministrazioneSistema/Aggiornamenti|aggiornare]] i pacchetti desiderati, tramite le consuete modalità.
= Ulteriori risorse =
* [[https://wiki.debian.org/DebianRepository/UseThirdParty|Wiki di Debian sui repository di terze parti]] (in inglese)
* [[http://manpages.ubuntu.com/manpages/jammy/it/man8/apt-key.8.html|Pagina man apt-key]] (Ubuntu 22.04)
* [[https://manpages.debian.org/unstable/apt/apt-key.8.en.html|Pagina man apt-key]] (Debian Unstable)
* [[AmministrazioneSistema/InstallareProgrammi/Apt|Guida apt]]
CategoryAmministrazione