pacman (Italiano)/Package signing (Italiano) - ArchWiki

Jump to content

# pacman (Italiano)/Package signing (Italiano)

From ArchWiki
< Pacman (Italiano)

Stato della traduzioneQuesto articolo è la versione tradotta di package signing. Data dell'ultima traduzione: 2024-01-24. Se ci sono cambiamenti nella versione inglese, è possibile dare una mano a sincronizzarne la traduzione.

Il sistema di firmatura pacchetti in pacman utilizza il modello "web of trust" per assicurare che i pacchetti vengano dagli sviluppatori e non da qualcuno che si sostituisca a loro indebitamente. Gli sviluppatori dei pacchetti e i Trusted User hanno chiavi PGP individuali che utilizzano per firmare i propri pacchetti. Questo significa che loro garantiscono il contenuto del pacchetto. Anche l'utente comune possiede una PGP key unica, che viene generata quando questi configura pacman-key(8). È questa "web of trust" che collega la chiave dell'utente alle chiavi principali (master-key).

Esempi di "web of trust":

- Pacchetti personali (custom): l'utente crea da sé il proprio pacchetto e lo firma con una key personale.
- Pacchetti non ufficiali (unofficial): uno sviluppatore fa un pacchetto e lo firma. L'utente utilizza la propria key per firmare quella dello sviluppatore.
- Pacchetti ufficiali (official): uno sviluppatore fa un pacchetto e lo firma. La chiave dello sviluppatore viene convalidata dalle chiavi principali (master-key). L'utente fa poi affidamento su queste ultime per garantire gli sviluppatori.

Nota Il protocollo HKP usa la porta 11371/tcp per comunicare. Per ricevere le chiavi firmate dai server (usando pacman-key), è richiesto che questa porta sia aperta.

## Installazione

### Configurare pacman

Prima di tutto, si deve decidere che livello di controllo si desidera quando si installa un pacchetto con `pacman -S`. A determinarlo è l'opzione `SigLevel` nel file `/etc/pacman.conf`. Alcune possibilità sono anche menzionate nei commenti di quel file. Per un'esposizione più dettagliata, si rimanda alla pagina di manuale pacman.conf(5) § PACKAGE AND DATABASE SIGNATURE CHECKING. Fondamentalmente si può abilitare il controlle delle firme a livello globale o per repository. Si tenga presente che settando il `SigLevel` a livello globale (globally) nella sezione `[options]`, non sarà permesso di installare i propri pacchetti usando il comando `pacman -U`, a meno che siano firmati da una chiave fidata (ing. trusted key).

Il valore predefinito di `LocalFileSigLevel` in `pacman.conf`, invece, non richiede la firma di pacchetti creati dall'utente stesso tramite makepkg ed installati con `pacman -U`.

Nota Nonostante tutti i pacchetti ufficiali siano firmati al giorno d'oggi, il sistema di firme del database non è ancora stato completato. Dunque si dovrebbe aggiungere l'opzione `DatabaseOptional` se si usa un livello di controllo `Required`, ad esempio:

    SigLevel = Required DatabaseOptional TrustedOnly

In questo modo pacman installerà soltanto i pacchetti che sono firmati da chiavi che l'utente ha convalidato.

Per pacchetti remoti, la configurazione predefinita appoggia soltanto l'installazione di pacchetti firmati da chiavi fidate:

    /etc/pacman.conf

    SigLevel = Required DatabaseOptional

`TrustedOnly` è il parametro compilato in pacman come predefinito. La configurazione predefinita è funzionalmente identica all'utilizzo globale dell'impostazione:

    SigLevel = Required DatabaseOptional TrustedOnly

La funzionalità appena descritta può anche essere realizzata a livello dei repositori specificando quanto segue (più in basso, in `pacman.conf`:

    [core]
    SigLevel = PackageRequired
    Include = /etc/pacman.d/mirrorlist

Questo introduce esplicitamente la convalida delle firme per i pacchetti nel repositore, ma non richiede che il database stesso sia firmato. Usando `Optional` in questo punto negherebbe l'impostazione globale di `Required` per questo repositore.

Attenzione L'opzione `SigLevel` `TrustAll` esiste per uno scopo di debugging. Essa rende molto facile convalidare key che non sono state verificate. L'utente dovrebbe usare l'opzione `TrustedOnly` per tutti i repository ufficiali.

### Inizializzare il portachiavi

Per inizializzare il portachiavi di pacman, usare il comando:

    # pacman-key --init

## Gestire il portachiavi

### Verificare le cinque chiavi principali o master-key

L'installazione iniziale delle chiavi è ottenuta usando

    # pacman-key --populate archlinux

È opportuno prendersi del tempo per verificare le Chiavi principali quando vengono mostrate, in quanto sono usate per co-firmare (e convalidare) tutte le altre chiavi degli sviluppatori.

Le chiavi PGP di solito sono troppo grandi (2048 bit o più) perché le persone possano lavorarci, quindi di solito sono spezzate per creare una fingerprint a 40 cifre esadecimali, che possono essere usate per controllare a mano che le due chiavi siano le medesime. Le ultime otto cifre sono note come "key ID" (versione corta) e rappresentano una sorta di "nome" della key. Le ultime sedici cifre del fingerprint corrispondono all'ID lungo.

### Aggiungere le chiavi degli sviluppatori

Le chiavi degli sviluppatori ufficiali e dei Trusted User vengono firmate dalle master-key, quindi all'utente non sarà necessario usare pacman-key per firmarle in locale. Nel caso in cui pacman incontri una key e non la riconosca, domanderà all'utente se desidera scaricarla dal `keyserver` impostato in `/etc/pacman.d/gnupg/gpg.conf` (o usasndo l'opzione `--keyserver` da riga di comando). Wikipedia mette a disposizione una lista di keyserver.

Una volta che la chiave di uno sviluppatore è stata scaricata, non sarà necessario farlo una seconda volta: quella key verrà usata per verificare ogni pacchetto da lui firmato.

Nota Il pacchetto archlinux-keyring (una dipendenza di pacman) contiene le ultime chiavi.

E' possibile aggiornarle manualmente eseguendo:

    # pacman-key --refresh-keys

Facendo `--refresh-keys`, anche la propria chiave locale sarà controllata sul keyserver remoto, e si riceverà una notifica sul fatto che non è stata trovata. Non è nulla di cui preoccuparsi.

### Aggiungere chiavi non ufficiali

È possibile utilizzare questo metodo per aggiungere la propria key al keyring di pacman, o quando si abilita un repository firmato non ufficiale.

Nota Potrebbe essere necessario eseguire `dirmngr` come root: si veda #gpg: keyserver receive failed: No dirmngr.

Prima di tutto, ci si deve procurare l'ID dal proprietario della key, quindi si deve aggiungere la chiave al keyring.

- Se la chiave si trova su un keyserver, la si importi con:

      # pacman-key -r <keyid>

- Se invece viene fornito un link ad un keyfile, lo si scarichi e si esegua:

      # pacman-key --add /percorso/al/keyfile

Assicurarsi di verificare il fingerprint, come si farebbe per una chiave principale, o con ogni altra chiave che si stia per convalidare:

    $ pacman-key -f keyid

Sarà quindi necessario firmare localmente la chiave appena importata:

    # pacman-key --lsign-key keyid

In questo modo si permetterà alla chiave di firmare i pacchetti.

### Debugging con gpg

È possibile accedere al keyring di pacman direttamente tramite gpg. Esempio:

    # gpg --homedir /etc/pacman.d/gnupg --list-keys

## Consigli e trucchi

### Aggiornare spesso il sistema

Aggiornare spesso nel modo descritto in pacman (Italiano)#Aggiornamento dei pacchetti è il modo migliore di evitare errori di firma. Se dovesse comunque accadere di non aggiornare il sistema in un intervallo di tempo prolungato, si consiglia di sincronizzare manualmente il database dei pacchetti e di aggiornare il pacchetto archlinux-keyring prima di effettuare l'aggiornamento del sistema:

    # pacman -Sy archlinux-keyring && pacman -Su

Questo comando non è considerato un aggiornamento parziale dato che sincronizza il database dei pacchetti ed aggiorna prima il portachiavi. Ambo le operazioni vanno eseguite prima di aggiornare il sistema in modo da essere sicuri di potere convalidare correttamente le firme di tutti i pacchetti da aggiornare.

Nota Il 2022-07-29, `archlinux-keyring-wkd-sync.service` ed il systemd timer associato sono stati creati ed abilitaticome predefinito, risolvendo problemi del tipo `signature from "Some Developer <developer_email@archlinux.org>" is marginal trust` (per esempio BBS#278332) senza bisogno di intervenzione da parte dell'utente, tramite la procura delle nuove firme di chiavi già fidate una volta a settimana.

### Aggiornare regolarmente l'ora del sistema

Quando l'ora del sistema non è giusta, la firma delle chiavi può essere considerata scaduta (o invalida) e la convalida delle firme fallisce. Si sincronizzi l'ora regolarmente utilizzando il Network Time Protocol daemon.

## Risoluzione dei problemi

### Errori del tipo "Invalid signature"

pacman-key dipende dall'orario di sistema. Se è impostato in maniera errata, si avrà il seguente errore:

    error: PackageName: signature from "User <email@archlinux.org>" is invalid
    error: failed to commit transaction (invalid or corrupted package (PGP signature))
    Errors occured, no packages were upgraded.

Se si utilizza ntpd, si corregga l'orario del sistema dando i comandi

    # ntpd -qg
    # hwclock -w

Si possono anche impiegare altri client NTP (vedere time synchronization).

Qualora la correzione dell'ora non dovesse risolvere il problema, si provi uno dei seguenti metodi.

#### Rimuovere pacchetti dalla cache

Alcuni pacchetti potrebbero essere corrotti o non firmati, provocando questo problema. Rimuovere tutti i pacchetti coinvolti dalla cache dando

    # rm /var/cache/pacman/pkg/nome_pacchetto

in modo tale da riscaricare il pacchetto. Si può anche ripulire l'intera cache.

#### Ripristinare tutte le chiavi

Si possono rimuovere tutte le chiavi installate rimuovendo la directory `/etc/pacman.d/gnupg` (da root) e dando nuovamente il comando `pacman-key --init` seguito da `pacman-key --populate` per riaggiungere le chiavi predefinite.

#### Disabilitare la convalida della firma

Attenzione Procedere con cautela. Disabilitare la firma dei pacchetti permetterà a pacman di installare pacchetti non fidati.

Se non ci si preoccupa della firma dei pacchetti si può disabilitare completamente la convalida delle firme OpenPGP. Si modifichi `/etc/pacman.conf` per aggiungere le seguenti righe sotto `[options]`:

    SigLevel = Never
    #LocalFileSigLevel = Optional
    #RemoteFileSigLevel = Required

Si rimuovere tutte le impostazioni del tipo `SigLevel` a livello di repositore (per esempio aggiungendo il prefisso `#` a capo della riga) perché sostituiscono le impostazioni globali. Questo risulterà nella non-convalida delle firme, comportamento prima di pacman 4. Se si imposta questo sistema non vi è bisogno di istituire un portachiavi con pacman-key. Queste impostazioni possono essere cambiate in seguite se si dovesse decidere di riabilitare la convalida dei pacchetti.

### Impossibile importare le chiavi

Questo problema può essere causato da:

- Pacchetto archlinux-keyring non aggiornato
- Data incorretta
- Il proprio ISP blocca le porte per l'importazione delle chiavi PGP
- La propria cache di pacman contiene copie di pacchetti non firmati creati con tentativi precedenti
- `dirmngr` non è stato configurato correttamente

Si potrebbe essere impossibilitati a portare a termine un aggiornamento se il proprio pacchetto archlinux-keyring non è aggiornato. Si provi ad aggiornare il sistema.

Se quanto sopra non funziona e la data è corretta si possono provare i seguenti metodi.

#### Aggiornare il sistema

Si tenti di aggiornare il sistema e si verifichi se così facendo, il problema risulta risolto.

#### Cambio di keyserver

Se si sospetta che ci sia qualcosa che non va con il keyserver, se ne provi un altro.

Una possibilità è il server Ubuntu. Per impostare questo, si modifichi il file `/etc/pacman.d/gnupg/gpg.conf…` e si modifichi la riga `keyserver` in:

    keyserver hkp://keyserver.ubuntu.com

Un'altro keyserver è quello MIT, che fornisce una porta alternativa. Per farlo, si modifichi `/etc/pacman.d/gnupg/gpg.conf` e si cambi la riga keyserver in:

    keyserver hkp://pgp.mit.edu:11371

Se anche quanto sopra non è d'aiuto, si utilizzi il keyserver kjsl, che fornisce il servizio attraverso la porta 80 (HTTP).

    keyserver hkp://keyserver.kjsl.com:80

Se si è disabilitato IPv6, gpg non funzionerà se verrà specificato un indirizzo IPv6. Utilizzare quindi un keyserver IPv4 come:

    keyserver hkp://ipv4.pool.sks-keyservers.net:11371

Qualora ci si fosse dimenticati di avviare `pacman-key --populate archlinux` si potrebbero avere degli errori tentando di importare le chiavi.

#### Ripulire la cache dei pacchetti

Se nessuno dei metodi di cui sopra funziona, è possibile che la propria cache di pacman, situata in `/var/cache/pacman/pkg/`, contenga copie di pacchetti non firmati creati con tentativi precedenti. Si provi ad eliminare la cache manualmente o eseguendo:

    # pacman -Sc

Questo comando elimina dalla cache tutti i pacchetti non installati.

#### Rimuovere pacchetti non aggiornati

Se gli stessi pacchetti continuano a fallire l'installazione o l'aggiornamento e si è certi di aver eseguito il procedimento d'installazione di pacman-key in maniera corretta, si provi a rimuovere questi pacchetti con `rm /var/cache/pacman/pkg/pacchettocattivo*`. In questo modo saranno riscaricati dal processo di aggiornamento.

Questa potrebbe essere la soluzione anche qualora si stia ricevendo un messaggio come `error: linux: signature from "Some Person <Some.Person@example.com>" is invalid` o simili quando si sta aggiornando (es. si potrebbe non essere vittima di un attacco MITM, dopo di tutto: semplicemente il pacchetto scaricato potrebbe essere corroto).

### Affidabilità dubbia della firma

Talvolta quando si esegue `pacman -Syu` si può incontrare questo errore:

    error: package-name: signature from "packager" is unknown trust

Questo accade perché la chiave della persona (`packager`) che ha compilato il pacchetto (`package-name`) non è presente e/o non è marchiata come fidata nel database gpg locale di pacman-key. Pacman sembrerebbe non essere sempre in grado di verificare se la chiave è stata ricevuta e risulta come fidata prima di proseguire. Questo potrebbe anche darsi nel caso in cui una chiave sia scaduta dopo essere stata aggiunta al portachiavi personale.

Questa situazione può essere evitata:

- Si aggiorni manualmente il portachiavi tramite il pacchetto archlinux-keyring prima di aggiornare il sistema intero, oppure
- si aggiornino le chiavi con `pacman-key --refresh-keys`, oppure
- Si ripristino tutte le chiavi, oppure
- Si firmi manualmente con una chiave locale (sconsigliato), oppure
- Si imposti temporaneamente `SigLevel` to `TrustAll` (sconsigliato).

Le ultime due operazioni violano la catena di fiducia e vanno usate con cautela.

### Aggiornamento chiavi via proxy

Un bug in gnupg impedisce di aggiornare le chiavi tramite proxy (https://bugs.g10code.com/gnupg/issue1786[link interrotto 2020-08-04]).

Per aggirare il problema, è possibile procedere come segue:

Modificare `/etc/hosts`:

    /etc/hosts

    127.0.0.1 pool.sks-keyservers.net

Creare un tunnel con socat. Il programma dovrà rimanere in ascolto sulla porta TCP 80, quindi sarà necessario eseguirlo da root:

    # socat TCP-LISTEN:80,reuseaddr,fork PROXY:localhost:pool.sks-keyservers.net:80,proxyport=3128

Aggiornare le chiavi:

    # pacman-key --refresh-keys

Annullare le modifiche apportate quando il proxy non è più necessario.

### gpg: keyserver receive failed: No dirmngr

Si veda FS#42798. Si esegua:

    # dirmngr < /dev/null

## Fonti aggiuntive

- Firma dei pacchetti di Pacman – 1: Makepkg e Aggiunta Repo
- Firma dei pacchetti di Pacman – 2: Pacman-key
- Firma dei pacchetti di Pacman – 3: Pacman
- Firma dei pacchetti di Pacman – 4: Arch Linux

Category:

- Package management (Italiano)

pacman (Italiano)/Package signing (Italiano)
Add topic