Qual é o método oficial para verificar a integridade de um pacote fonte?

3

Eu quero adicionar um recurso ao pam e descobri que um bom ponto de partida era fazer o download da libpam-modules source. No download, percebo esse aviso: gpgv: Can't check signature: public key not found

Qual é o método oficial para verificar a integridade dos pacotes de código-fonte, quando apt-get não pode encontrar a chave pública?

A versão mais recente dos pacotes ubuntu-keyring e debian-keyring já está instalada.

Existem maneiras de encontrar a chave pública correspondente e instalá-la. No entanto, isso por si só não fornece integridade, porque, na verdade, está confiando no conteúdo do arquivo dsc para me informar qual chave pública deve ser usada para verificar a assinatura no arquivo dsc .

A assinatura gpg no arquivo dsc é uma parte essencial da verificação de integridade? Poderia um homem no meio ou um espelho rouge servir uma versão maliciosa do arquivo em que o aviso do gpg é a única indicação de que algo ruim está acontecendo? Ou apt-get tem outros meios de validar a integridade?

Onde eu encontraria documentação oficial sobre o modelo de segurança? Idealmente, gostaria de entender o caminho de confiança completo da imagem de instalação para o pacote de origem que estou baixando.

A saída completa do download foi esta:

$ apt-get source libpam-modules
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Picking 'pam' as source package instead of 'libpam-modules'
NOTICE: 'pam' packaging is maintained in the 'Bzr' version control system at:
https://code.launchpad.net/~ubuntu-core-dev/pam/ubuntu
Please use:
bzr branch https://code.launchpad.net/~ubuntu-core-dev/pam/ubuntu
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 2,043 kB of source archives.
Get:1 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (dsc) [2,510 B]
Get:2 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (tar) [1,893 kB]
Get:3 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (diff) [147 kB]
Fetched 2,043 kB in 6s (316 kB/s)                                              
gpgv: Signature made Fri 31 Jan 2014 11:12:23 PM CET using RSA key ID 64792D67
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./pam_1.1.8-1ubuntu2.dsc
    
por kasperd 10.08.2014 / 20:57

2 respostas

3

A integridade do pacote fonte pode ser verificada sem validar a assinatura gpg no arquivo dsc .

Cada fonte de instalação tem um par de arquivos chamados Release e Release.gpg . Esses dois arquivos são a raiz de uma árvore de hash, que pode ser usada para validar a integridade de tudo no arquivo. A assinatura gpg em Release é a única que precisa ser verificada.

A assinatura no arquivo dsc pode ter um propósito importante antes que o arquivo seja colocado em um repositório e assinado indiretamente por meio de Release.gpg . Quando o arquivo estiver no repositório, a assinatura no arquivo dsc poderá ser ignorada.

Veja como eu posso verificar manualmente a integridade. Tanto quanto eu posso dizer, apt-get source faz a mesma validação.

  1. Fazer o download de http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release e http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg .
  2. Verifique a assinatura usando gpg --keyring /etc/apt/trusted.gpg --verify Release.gpg Release (a chave pública também pode ser encontrada em /usr/share/keyrings/ubuntu-archive-keyring.gpg )
  3. Download http://dk.archive.ubuntu.com/ubuntu/dists/trusty/main/source/Sources.gz
  4. Compare os hashes obtidos de sha256sum Sources.gz e grep main/source/Sources.gz Release
  5. Compare os hashes obtidos de sha256sum pam_1.1.8-1ubuntu2.dsc e zcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc
  6. Validar hashes encontrados no arquivo dsc : cat pam_1.1.8-1ubuntu2.dsc | sed -e 's/^ //;s/ [1-9][0-9]* / /' | sha256sum -c
por kasperd 11.08.2014 / 16:54
1

O motivo pelo qual você vê esse aviso é porque os pacotes de origem são assinados pela própria chave do desenvolvedor, enquanto os pacotes binários que você obtém do repositório são assinados pela chave de assinatura do repositório. Como ubuntu-keyring apenas fornece o chaveiro do repositório final ( debian-keyring na verdade também fornece as chaves públicas de todos os seus mantenedores), apt não consegue encontrar a chave e considera o pacote não autenticado.

Portanto, a solução aqui é importar a chave de um servidor de chaves. Você também pode procurar o pacote fonte no Launchpad ( pam é aqui ), clique no endereço de e-mail do pessoa que fez a última alteração de um pacote e verifique a impressão digital da chave de lá.

Neste caso, a última pessoa a alterar o pacote foi Stéphane Graber, e acontece que sua chave está em debian-keyring (especificamente, em /usr/share/keyrings/debian-maintainers.gpg ). Você pode instalar o pacote debian-keyring , exportar sua chave desse chaveiro e importá-la em seu próprio chaveiro para que apt possa verificar se está devidamente assinado.

    
por saiarcot895 10.08.2014 / 22:01