Resolvendo problemas de autenticidade de pacotes

Publicado por Antônio Vinícius Menezes Medeiros em 17/12/2011

[ Hits: 35.138 ]

Blog: https://antoniomedeiros.dev/

 


Resolvendo problemas de autenticidade de pacotes



Quantas vezes após adicionar novos repositórios ao sistema, não nos deparamos com a seguinte mensagem de erro ao atualizar a lista de pacotes disponíveis?
Linux: Resolvendo problemas de autenticidade de pacotes

Não apenas recebemos esta mensagem. Se tentarmos instalar algum pacote deste repositório, recebemos um alerta informando que os pacotes não puderam ser autenticados.

Pois bem, esta dica visa explicar porque estas mensagens aparecem quando adicionamos repositórios novos e como resolver o problema que as causa. Se aplica às distribuições Debian, Ubuntu e derivadas.

Ao instalar um pacote, o 'apt-get' verifica suas assinaturas usando o GNU Privacy Guard, conhecido abreviadamente por GnuPG ou GPG. Ele é um mecanismo de criptografia de chave pública popular no mundo do Software Livre que permite, entre outras coisas, realizar assinaturas de autenticidade em arquivos.

Estas assinaturas nos permitem detectar falsificações nos arquivos que baixamos da Internet, causadas seja por ações maliciosas ou erros na rede, de maneira análoga aos algoritmos MD5 e SHA-1 para mídias.

Antes de disponibilizar um pacote em um repositório, o mantenedor do pacote usa sua chave GPG privada para assinar seus pacotes e disponibiliza junto com eles sua chave pública na Internet.

Quando um usuário baixa um desses pacotes para o seu computador, o 'apt-get' usa a chave pública para verificar se o pacote que está sendo instalado foi realmente enviado por aquele desenvolvedor.

Estas mensagens são exibidas porque o 'apt-get' não possui a chave pública dos pacotes do repositório, e por isso não pode verificar sua autenticidade. É possível instalar pacotes sem realizar essa verificação, mas o comportamento padrão do 'apt-get' é alertar-nos sempre que não for possível realizá-la.

Vejamos alguns casos comuns onde isso acontece e como obter a chave em cada caso. Em seguida, mostrarei como desativar a autenticação dos pacotes por parâmetros na hora de chamar o 'apt-get' ou pela sua configuração, caso alguém ache mais prático proceder desta maneira.

É comum nos depararmos com erros como estes quando, por exemplo, adicionamos o repositório oficial do VirtualBox e tentamos obter sua lista de pacotes. Nesse caso, existem duas maneiras de instalar a chave.

A primeira delas é baixar a chave manualmente e usar a caixa de diálogo Canais de Software para importá-la. Usando um gerenciador de downloads, como o Wget (via terminal, execute o comando abaixo) ou o KGet (gráfico, para usuários do KDE), ou um navegador, como o Firefox, você pode baixá-la pelo link abaixo.

Quando o download terminar, abra o Synaptic, acesse o menu "Configuração" e clique em "Repositórios", em seguida acesse a aba "Autenticação" na caixa de diálogo que se abre e clique em "Importar arquivo de chave...".

Finalmente, localize o arquivo que você baixou e clique em OK. Pronto, a chave foi adicionada.

# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | apt-key add -
Linux: Resolvendo problemas de autenticidade de pacotes

Outra opção é adicionar a chave via linha de comando, usando os utilitários 'gpg' e 'apt-key'.

Os comandos são um pouco longos, mas a vantagem nesse caso é que você não precisa procurar pela chave, já que ela é baixada automaticamente pelo próprio GPG de um servidor público de chaves.

O primeiro passo é abrir um terminal e tentar recarregar a lista de pacotes dos repositórios usando o comando 'apt-get update'.

Será retornado um erro similar ao do gerenciador de atualizações, especificando o número da chave:
Reading package lists... Done
W: GPG error: http://download.virtualbox.org squeeze Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 54422A4B98AB5139

Para adicioná-la, use o comando a seguir, especificando o número da chave fornecida pela mensagem de erro. Na verdade, para identificar a chave basta apenas os 8 dígitos finais, mas não faz diferença se você simplesmente copiar o número inteiro:

# gpg --keyserver subkeys.pgp.net --recv-keys 54422A4B98AB5139 && gpg --export --armor 54422A4B98AB5139 | apt-key add -

A saída seria:
gpg: requesting key 98AB5139 from hkp server subkeys.pgp.net
gpg: /root/.gnupg/trustdb.gpg: banco de dados de confiabilidade criado
gpg: key 98AB5139: public key "Oracle Corporation (VirtualBox archive signing key) " imported
gpg: no ultimately trusted keys found
gpg: Número total processado: 1
gpg: importados: 1
OK

O primeiro comando se encarrega de baixar a chave a partir do servidor do 'pgp.net', enquanto o segundo (separado do primeiro por "&&") faz a importação. Note que é usado um pipe ("|") para que a chave exportada pelo GPG seja lida pelo 'apt-key'.

Seja qual for a maneira escolhida de solucionar o problema, é necessário recarregar as informações sobre os pacotes disponíveis nos repositórios. Como sabemos, isso pode ser feito pelo Synaptic ou através do terminal:

# apt-get update

Em outros casos, como ao adicionar os repositórios do Debian Multimedia (no caso de usuários de Debian) ou do Medibuntu (usuários de Ubuntu), existe uma forma mais prática de adicionar a chave, que é simplesmente instalar um pacote que se encarrega de instalar a chave do repositório.

Se você utiliza Debian, experimente executar os seguintes comandos no terminal (isso também pode ser feito no Synaptic, o que esses comandos fazem é adicionar o repositório do Debian Multimedia e recarregar as listas de pacotes):

# echo "deb http://ftp.br.debian.org/debian-multimedia stable main" >> /etc/apt/sources.list
# apt-get update


Eles devem produzir a seguinte saída (que também pode ser obtida utilizando-se o Synaptic):
Reading package lists... Done
W: GPG error: http://ftp.br.debian.org stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 07DC563D1F41B907
Usar os utilitários GPG e 'apt-key' funcionam para este caso, mas podemos resolver todo o problema instalando o pacote não autenticado 'debian- multimedia-keyring' (o que também pode ser feito sem dificuldades via Synaptic):

# apt-get --yes --allow-unauthenticated install debian-multimedia-keyring

Usuários do Ubuntu podem adicionar o repositório do Medibuntu e obter sua chave de maneira análoga, executando os seguintes comandos no terminal:

# echo "deb http://packages.medibuntu.org/ oneiric free non-free" >> /etc/apt/sources.list
# apt-get update
# apt-get --yes --allow-unauthenticated install medibuntu-keyring
# apt-get update


Algumas chaves como as tratadas acima possuem datas de validade, de forma que você pode precisar atualizá-las (usando os mesmos processos descritos) a cada um ou dois anos. Você não precisa se preocupar muito com isso, pois você será avisado quando chegar a hora de atualizar alguma das chaves.

Se você decidir ignorar o processo de autenticação dos pacotes, pode responder sim toda vez que receber um alerta de instalação de pacote não autenticado, ou executar o comando 'apt-get' da seguinte maneira:

# apt-get --allow-unauthenticated install <nome_do_pacote>

Se não quiser passar esse parâmetro toda vez que for instalar um pacote não autenticado, você pode realizar a seguinte modificação na configuração do 'apt' (procure em seu sistema pelo arquivo "/etc/apt/apt.conf", se ele não existir, crie-o e adicione a linha a seguir):

APT::Get::AllowUnauthenticated 1;


Com esta modificação em sua configuração, o 'apt-get' não pedirá mais sua permissão para instalar pacotes não autenticados.

Fontes


Essa dica foi publicada originalmente no meu Blog: avmlinux.org - Resolvendo problemas de autenticidade de pacotes

Antônio Vinícius

Outras dicas deste autor

VirtualBox - Reduzindo tamanho de discos rígidos virtuais

Instalação de drivers proprietários no Kubuntu

Restaurando o GRUB após a instalação de outro sistema operacional

Ícones na Área de Trabalho do KDE 4

Reduzindo o tamanho dos executáveis gerados pelo Lazarus (via IDE)

Leitura recomendada

Comandos do smbclient

Comprometendo a integridade de um arquivo

CentOS - Acessando pasta compartilhada do Windows

Comandos básicos de rede 2

Os comandos basename e dirname

  

Comentários
[1] Comentário enviado por removido em 18/12/2011 - 12:54h

Diferente do Ubuntu, cuja identificação das chaves basta o comando:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys NÚMERO DA CHAVE

No Debian, mesmo sendo simples com o comando que indica:

# gpg --keyserver subkeys.pgp.net --recv-keys NÚMERO DA CHAVE && gpg --export --armor NÚMERO DA CHAVE | apt-key add -

Se for um PPA do Ubuntu que queira instalar no Debian, pode ser instalada a chave com o comando para o Ubuntu que descrevi acima.
Já fiz isto, comprovado!


Estava mesmo faltando uma dica como esta.
Ótimo trabalho!

[2] Comentário enviado por vinyanalista em 19/12/2011 - 09:24h

Olá, izaias, obrigado pela contribuição e pelo elogio.

Estive pesquisando sobre o que você comentou e descobri que esse mesmo comando que você forneceu pode ser utilizado também no Debian. Aliás, descobri também que o Debian também possui seu próprio servidor de chaves (http://keyring.debian.org/), assim como esse do Ubuntu que você utiliza. Eu consegui baixar a chave do repositório do VirtualBox no servidor do Ubuntu, mas não no do Debian. O subkeys.pgp.net deve ser o mais completo dos três, pois não parece estar vinculado especificamente a nenhuma distribuição.

Outra coisa que descobri é que também é possível baixar a chave pelo link fornecido usando o apt-key (tanto no Debian quanto no Ubuntu), como em:

# apt-key adv --fetch-keys http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc

Postei uma versão atualizada dessa dica no meu blog, na qual citei seu comentário: http://www.avmlinux.org/blog/2011/12/16/resolvendo-problemas-de-autenticidade-de-pacotes

Abraço a todos e até a próxima!

[3] Comentário enviado por removido em 19/12/2011 - 11:53h

"O subkeys.pgp.net deve ser o mais completo dos três. . ."

Exatamente, só não usei ele no Ubuntu. Somente no Debian mesmo.
Ainda faço um teste.

Um abraço.

[4] Comentário enviado por ucastrobr em 16/05/2012 - 19:06h


sudo apt-get upadte retornou o erro
W: Erro GPG: http://packages.medibuntu.org precise InRelease: As assinaturas a seguir não puderam ser verificadas devido à chave pública não estar disponível: NO_PUBKEY 2EBC26B60C5A2783

Daí executei o comando :

gpg --keyserver subkeys.pgp.net --recv-keys 2EBC26B60C5A2783 && gpg --export --armor 2EBC26B60C5A2783 | apt-key add -


gpg: requisitando chave 0C5A2783 de servidor hkp - subkeys.pgp.net
gpgkeys: key 2EBC26B60C5A2783 not found on keyserver
gpg: nenhum dado OpenPGP válido encontrado.
gpg: Número total processado: 0


Não funcionou daí executei os comandos abaixo

sudo apt-get install add-apt-key

Tive que entrar como root para o útimo comando

sudo su -
add-apt-key 2EBC26B60C5A2783


root@ucastrobr-desktop:~# add-apt-key 2EBC26B60C5A2783
gpg: requisitando chave 0C5A2783 de servidor hkp - subkeys.pgp.net
gpg: chave 0C5A2783: chave pública "Medibuntu Packaging Team <admin@lists.medibuntu.org>" importada
gpg: ultimamente não encontradas chaves confiáveis
gpg: Número total processado: 1
gpg: importados: 1
OK

PERFECT WINS!!!

[5] Comentário enviado por rafamss em 23/10/2013 - 23:26h

Fiz conforme o izaias falou e funcionou corretamente no ubuntu 13.04 x_64.

TKS!!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts