#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