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

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

Quero adicionar um recurso ao pam e achei que um bom ponto de partida seria baixar o libpam-modulescódigo-fonte. No download, noto este aviso:gpgv: Can't check signature: public key not found

Qual é o método oficial para verificar a integridade dos pacotes fonte, quando apt-getnão é possível encontrar a chave pública?

A versão mais recente ubuntu-keyringe debian-keyringos pacotes já estão instalados.

caminhospara encontrar a chave pública correspondente e instalá-la. No entanto, isso por si só não fornece integridade, porque na verdade é confiar no conteúdo do dscarquivo para me dizer qual chave pública usar para verificar a assinatura no dscarquivo.

A assinatura gpg no dscarquivo é uma parte crítica da verificação de integridade? Poderia um man in the middle ou um rouge mirror servir uma versão maliciosa do arquivo onde o aviso do gpg é a única indicação de que algo ruim está acontecendo? Ou apt-gettem outros meios de validar a integridade?

Onde encontraria documentação oficial sobre o modelo de segurança? Idealmente, eu gostaria de entender o caminho de confiança completo desde a imagem de instalação até o pacote fonte 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

Responder1

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

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

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

Aqui está como eu poderia verificar manualmente a integridade. Pelo que eu sei, apt-get sourcefaz a mesma validação.

  1. Baixe http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Releasee 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. Downloadhttp://dk.archive.ubuntu.com/ubuntu/dists/trusty/main/source/Sources.gz
  4. Compare hashes obtidos de sha256sum Sources.gzegrep main/source/Sources.gz Release
  5. Compare hashes obtidos de sha256sum pam_1.1.8-1ubuntu2.dscezcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc
  6. Valide os hashes encontrados no dscarquivo:cat pam_1.1.8-1ubuntu2.dsc | sed -e 's/^ //;s/ [1-9][0-9]* / /' | sha256sum -c

Responder2

A razão pela qual você vê esse aviso é porque os pacotes fonte 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-keyringapenas fornece o chaveiro do repositório final ( debian-keyringna verdade também fornece as chaves públicas de todos os seus mantenedores), aptnã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 da pessoa que fez a última alteração em um pacote e verifique a impressão digital da chave a partir daí.

Neste caso, a última pessoa a alterar o pacote foi Stéphane Graber, e acontece que a chave dele está in debian-keyring(especificamente, in /usr/share/keyrings/debian-maintainers.gpg). Você pode instalar o debian-keyringpacote, exportar a chave dele desse chaveiro e importar essa chave para o seu próprio chaveiro para aptverificar se ele está assinado corretamente.

informação relacionada