Como baixar com segurança e gpg verificar um pacote de fontes Debian?

13

Eu preciso de pacotes específicos (fonte ou binários) do Debian.

Posso baixar o pacote usando o apt-get?

Como posso adicionar o repositório Debian ao meu sources.list para que ele seja usado apenas caso a caso? Sem bagunçar meu sistema usando todo o repositório Debian?

Como posso obter a chave gpg para o repositório Debian para garantir que o pacote foi assinado pelo repositório Debian?

(Por favor, não me diga que o sistema pode falhar. Estou ciente disso e não me importo com menos, porque posso restaurar facilmente um instantâneo da VM.)

James Mitch
fonte
Parte da solução pode ser o pacote debian-archive-keyring que inclui /usr/share/keyrings/debian-archive-keyring.gpg.
James Mitch
Outra parte da solução pode ser Apt-Pinning: jaqque.sbih.org/kplug/apt-pinning.html
James Mitch
Minha resposta é esta? askubuntu.com/questions/263705/…
andol

Respostas:

14

Existem várias perguntas que responderei individualmente:

Como baixar (e não instalar) o pacote binário individual?

apt-get tem uma opção para baixar apenas o pacote:

-d  Download only - do NOT install or unpack archives

Você encontrará o pacote baixado em /var/cache/apt/archives/. Nesse caso, você terá que adicionar uma nova configuração da lista de fontes ao apt.

Como baixar o pacote de origem individual?

apt-get source <package>

ou quando você souber o local do arquivo .dsc:

dget http://http.debian.net/debian/pool/main/k/knot/knot_1.2.0~rc3-1.dsc

Ambas as abordagens verificam a assinatura nos arquivos

Como fixar o sources.list, também conhecido como não bagunço minha instalação?

Você já apontou para a página de descrição básica do APT Pinning , e gostaria apenas de acrescentar que você provavelmente deseja ler a página de manual apt_preferences, que também possui bons exemplos para realizar as coisas que você precisa. Consulte especialmente a seção 'Rastreamento estável' em EXEMPLOS, pois descreve algo muito próximo às suas necessidades:

Há um comando útil ao jogar com várias fontes e com o APT Pinning:

# apt-cache policy knot
knot:
  Installed: 1.1.3-1~bpo60+1
  Candidate: 1.2.0~rc3-1~bpo60+1
  Version table:
     1.2.0~rc3-1~bpo60+1 0
        500 http://deb.knot-dns.cz/debian/ squeeze/main amd64 Packages
 *** 1.1.3-1~bpo60+1 0
        100 /var/lib/dpkg/status
     1.0.5-1~bpo60+1 0
        500 http://ppa.sury.org/debian/ squeeze/main amd64 Packages

Isso mostra que a versão instalada é 1.1.3-1 ~ bpo60 + 1 e o candidato é 1.2.0 ~ rc3-1 ~ bpo60 + 1, que será instalado a seguir apt-get upgrade. Também há algumas versões mais antigas disponíveis em outro repositório.

Como baixar a chave do arquivo Debian?

A chave de arquivo da Debian é publicada no ftp-master . Você precisará importar a chave para o seu chaveiro gpg:

$ gpg --import archive-key-6.0.asc 
gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   9  signed:  31  trust: 0-, 0q, 0n, 0m, 0f, 9u
gpg: depth: 1  valid:  31  signed:  38  trust: 25-, 0q, 0n, 1m, 5f, 0u
gpg: depth: 2  valid:  21  signed:  31  trust: 19-, 0q, 0n, 0m, 2f, 0u
gpg: depth: 3  valid:   3  signed:  12  trust: 2-, 0q, 0n, 0m, 1f, 0u
gpg: depth: 4  valid:   1  signed:   8  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2013-09-22

Então você terá que verificar suas assinaturas:

$ gpg --list-sig 473041FA
pub   4096R/473041FA 2010-08-27 [expires: 2018-03-05]
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig 3        473041FA 2010-08-27  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig          7E7B8AC9 2010-08-27  Joerg Jaspert <[email protected]>
sig     P    B12525C4 2010-08-27  [User ID not found]
sig          D0EC0723 2010-08-27  [User ID not found]
sig          8AEA8FEE 2010-08-27  [User ID not found]
sig          A3AE44A4 2010-08-28  [User ID not found]
sig          00D8CD16 2010-08-28  Alexander Reichle-Schmehl <[email protected]>
sig          CD15A883 2010-08-28  [User ID not found]
sig          672C8B12 2010-08-28  [User ID not found]
sig 2        C4CF8EC3 2010-08-28  [User ID not found]
sig 2        D628A5CA 2010-08-28  [User ID not found]

E rastreie as chaves GPG individuais para os desenvolvedores do Debian, rastreando-as manualmente ou verificando no projeto PGP Key Statistics . E a menos que exista uma cadeia da sua chave PGP / GPG para o repositório de chaves da Debian, você terá que dar um salto de fé em algum ponto do tempo.

Como baixar e verificar pacotes individuais manualmente

Portanto, a outra abordagem é mais complicada, porque os pacotes deb não são assinados individualmente, mas apenas o Releasearquivo é assinado. Assim, você precisará baixar e verificar a assinatura Releasee os Packagesarquivos junto com o pacote individual.

Vou adicionar um exemplo que será mais claro.

Imagine que você deseja baixar o pacote Debian para Knot DNS a partir do PPA oficial do Ubuntu, preciso na arquitetura amd64.

Você precisará clicar nos diretórios e encontrar estes arquivos:

wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release.gpg
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/main/binary-amd64/Packages
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/pool/main/k/knot/knot_1.2.0~rc3-1~precise+1_amd64.deb

O próximo passo seria verificar a assinatura no Releasearquivo:

$ gpg --verify Release.gpg Release
gpg: Signature made Fri 01 Mar 2013 07:14:38 PM CET using RSA key ID F9C59A45
gpg: Good signature from "Launchpad Datové schránky"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 5246 3488 670E 69A0 9200  7C24 F233 1238 F9C5 9A45

Obviamente, você precisará verificar a chave de outras formas (como a chave dos mantenedores Debian / Ubuntu, verificando-a na barra de ativação, etc, etc ...)

Depois de verificar a assinatura correta no Releasearquivo, você pode ir para a próxima etapa - verificando o arquivo Packages.

sha256sum Packages
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad  Packages
$ grep c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Release
 c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad             3379 main/binary-amd64/Packages

Como você pode ver, a assinatura pode ser encontrada no Releasearquivo assinado , portanto, verificamos a integridade do Packagesarquivo computando e comparando sua impressão digital SHA-256.

O último passo é semelhante. Você precisa calcular e comparar a impressão digital do pacote individual:

$ sha1sum knot_1.2.0~rc3-1~precise+1_amd64.deb 
8b34078e9bfef7aa818b2f926a28838b0ede9f43  knot_1.2.0~rc3-1~precise+1_amd64.deb
$ grep -A 13 "Package: knot$" Packages | grep "^SHA1: "
SHA1: 8b34078e9bfef7aa818b2f926a28838b0ede9f43

Neste ponto, encadeamos o pacote com segurança ao Releasearquivo assinado . Portanto, se você acredita na assinatura do Releasearquivo, pode ter certeza de que o pacote foi baixado intacto.

Você pode ler mais no artigo Secure APT no Debian Wiki.

oerdnj
fonte
Você poderia explicar por que o gpgcomando não precisa de privilégios de root? É suposto ser uma ferramenta administrativa.
Sopalajo de Arrierez
1
@SopalajodeArrierez Não é uma ferramenta administrativa; você pode ler mais sobre o GnuPG aqui: gnupg.org
oerdnj