Quero adicionar um recurso ao pam e achei que um bom ponto de partida seria baixar o libpam-modules
có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-get
não é possível encontrar a chave pública?
A versão mais recente ubuntu-keyring
e debian-keyring
os pacotes já estão instalados.
Há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 dsc
arquivo para me dizer qual chave pública usar para verificar a assinatura no dsc
arquivo.
A assinatura gpg no dsc
arquivo é 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-get
tem 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 dsc
arquivo.
Cada fonte de instalação possui um par de arquivos chamados Release
e 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 dsc
arquivo 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 dsc
arquivo poderá ser ignorada.
Aqui está como eu poderia verificar manualmente a integridade. Pelo que eu sei, apt-get source
faz a mesma validação.
- Baixe
http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release
ehttp://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg
. - 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
) - Download
http://dk.archive.ubuntu.com/ubuntu/dists/trusty/main/source/Sources.gz
- Compare hashes obtidos de
sha256sum Sources.gz
egrep main/source/Sources.gz Release
- Compare hashes obtidos de
sha256sum pam_1.1.8-1ubuntu2.dsc
ezcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc
- Valide os hashes encontrados no
dsc
arquivo: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-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 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-keyring
pacote, exportar a chave dele desse chaveiro e importar essa chave para o seu próprio chaveiro para apt
verificar se ele está assinado corretamente.