apt-key está obsoleto. Como adicionar chaves de assinatura do repositório OpenPGP sem ele no Debian, Ubuntu, Linux Mint, Pop!_OS, etc.

18 de janeiro de 2021

página do manual do apt-key obsoleta

Este artigo explica como adicionar com segurança chaves OpenPGP e repositórios APT de terceiros em distribuições Debian, Ubuntu e Linux baseadas neles, como Linux Mint, Pop!_OS, Elementary OS e assim por diante, para substituir o obsoleto apt-key.

Ao tentar adicionar uma chave de repositório APT usando apt-key nas distribuições Debian, Ubuntu e Linux com base nelas, você verá a seguinte mensagem: "Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)) ".

A página do manual apt-key menciona que o "uso de apt-key está obsoleto, exceto para o uso de apt-key del em scripts de mantenedor para remover chaves existentes do chaveiro principal". Além do mais, "apt-key estará disponível pela última vez no Debian 11 e Ubuntu 22.04."

A razão para esta mudança é que ao adicionar uma chave OpenPGP que é usada para assinar um repositório APT para /etc/apt/trusted.gpg ou /etc/apt/trusted.gpg.d, a chave é incondicionalmente confiável pelo APT em todos os outros repositórios configurados no sistema que não têm uma opção signed-by (veja abaixo), até mesmo os repositórios oficiais do Debian/Ubuntu. Como resultado, qualquer repositório APT não oficial que tenha sua chave de assinatura adicionada a /etc/apt/trusted.gpg ou /etc/apt/trusted.gpg.d pode substituir qualquer pacote no sistema. Portanto, essa alteração foi feita por motivos de segurança (sua segurança).

Também vale a pena notar que, embora a mensagem de depreciação apt-key diga "gerencie arquivos de chaveiro em trusted.gpg.d em vez disso", o wiki do Debian afirma o contrário. Isso porque adicionar chaves OpenPGP a /etc/apt/trusted.gpg e /etc/apt/trusted.gpg.d é igualmente inseguro, conforme mencionado acima.

Você pode continuar a usar o apt-key por enquanto, pois ele ainda funciona. No entanto, seria uma boa ideia começar a fazer a transição para usar a opção signed-by conforme explicado abaixo, especialmente se você mantiver um repositório de terceiros.

Então, qual é a maneira adequada e segura de adicionar repositórios de terceiros (não oficiais) e suas chaves de assinatura OpenPGP em distribuições Debian, Ubuntu e Linux com base neles, como Linux Mint, Pop!_OS, Elementary OS e assim por diante, para substituir o apt-key obsoleto?

1. Baixe a chave do repositório APT

De acordo com o wiki do Debian, a chave deve ser baixada por HTTPS para um local gravável apenas pelo root, por exemplo /usr/share/keyrings. O nome da chave deve conter um nome abreviado que descreve o repositório, seguido por archive-keyring. Por exemplo, se o repositório for denominado meurepositorio, o arquivo de chave deverá ser denominado meurepositorio-archive-keyring.gpg.

O arquivo de chave OpenPGP pode ser blindado com ASCII ou não. Para verificar se um arquivo de chave é protegido por ascii, baixe o arquivo de chave e execute este comando (observe que a extensão da chave pode ser .gpg, .asc, .key e provavelmente outras):

Comandos para usar no terminal

file .gpg

Se a saída desse comando for semelhante à seguinte, a chave é blindada com ascii:

Comandos para usar no terminal

repo-key.gpg: PGP public key block Public-Key (old)

Dito isto, veja como baixar e adicionar uma chave de assinatura de repositório ao seu sistema de maneira adequada e segura:

  • Para chaves OpenPGP blindadas ASCII

    Para fazer o download usando wget e adicionar tal Chave OpenPGP para o seu sistema, use:

Comandos para usar no terminal

wget -O- | gpg --dearmor | sudo tee /usr/share/keyrings/-archive-keyring.gpg

O que tudo neste comando significa/significa :

  • wget baixa a chave de https://example.com/key/repo-key.gpg e envia a chave para stdout (-O-). Substitua o URL aqui pelo URL da chave que você deseja baixar e adicionar ao seu sistema
  • gpg --dearmor: o comando gpg é a ferramenta de criptografia e assinatura OpenPGP; sua opção --dearmor descompacta a entrada de uma armadura OpenPGP ASCII
  • sudo tee /usr/share/keyrings/<meurepositorio>-archive-keyring.gpg: como superusuário (sudo), leia a entrada padrão, que neste caso é a saída fornecida por gpg --dearmor, e grave-a no arquivo /usr/share/keyrings/<meurepositorio>-archive-keyring.gpg. Substitua o nome <meurepositorio> por um nome descritivo para a chave do repositório que você está adicionando

Por exemplo, para adicionar o repositório APT do aplicativo Signal, você usaria:

Comandos para usar no terminal

wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/signal-archive-keyring.gpg

Ou para usar o comando fornecido como exemplo no wiki do Debian (você precisa executá-lo como root, por exemplo, após executar sudo -i; ele usa curl em vez de wget para baixar a chave):

Comandos para usar no terminal

curl | gpg --dearmor > /usr/share/keyrings/-archive-keyring.gpg

Exemplo de uso deste comando para adicionar o repositório Signal APT:

Comandos para usar no terminal

curl https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > /usr/share/keyrings/signal-archive-keyring.gpg

  • Para chaves OpenPGP não blindadas com ASCII

Baixe a chave OpenPGP usando wget e adicione-a ao seu sistema usando:

Comandos para usar no terminal

wget -O- | sudo tee /usr/share/keyrings/

Ou para usar o comando fornecido como exemplo no wiki do Debian (você precisa executá-lo como root, por exemplo, após executar sudo -i):

Comandos para usar no terminal

wget -O /usr/share/keyrings/

Eu não adicionei um exemplo aqui porque não consegui encontrar um repositório de terceiros que usa uma chave OpenPGP não blindada com ASCII.

  • Para importar chaves OpenPGP diretamente de um servidor de chaves para um arquivo em /usr/share/keyrings:

Comandos para usar no terminal

sudo gpg --no-default-keyring --keyring /usr/share/keyrings/-archive-keyring.gpg --keyserver --recv-keys

Em vez de hkp://keyserver.ubuntu.com:80, você pode usar algum outro servidor de chaves, se desejar.

Exemplo no qual importaremos a chave OpenPGP do Linux Uprising Shutter PPA para /usr/share/keyrings/linux-uprising-shutter-archive-keyring.gpg (a impressão digital pode ser obtida clicando no link verde "Detalhes técnicos sobre este PPA" na página do PPA - está em "Adicionando este PPA para o seu sistema "):

Comandos para usar no terminal

sudo gpg --no-default-keyring --keyring /usr/share/keyrings/linux-uprising-shutter-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 1CC3D16E460A94EE17FE581CEA8CACC073C3DB2A

2. Adicione a entrada sources.list do repositório

As entradas sources.list do repositório de terceiros devem ser adicionadas no diretório /etc/apt/sources.list.d, e não diretamente no arquivo /etc/apt/sources.list.

Anteriormente, um arquivo sources.list do diretório /etc/apt/sources.list.d seria assim:

Comandos para usar no terminal

deb https://repository.example.com/debian/ stable main

No entanto, para poder usar a chave adicionada na etapa 1, a entrada sources.list deve agora ter esta aparência (/etc/apt/sources.list.d/<meurepositorio.list>):

Comandos para usar no terminal

deb [signed-by=/usr/share/keyrings/-archive-keyring.gpg]

É importante observar aqui que se você também deseja adicionar a opção arch=amd64 junto com signed-by, é necessário separar as duas opções por um espaço, assim:

Comandos para usar no terminal

deb [arch=amd64 signed-by=/usr/share/keyrings/-archive-keyring.gpg]

Como exemplo, para adicionar o repositório Signal ao seu sistema Debian/Ubuntu, crie um arquivo (como root; por exemplo, para abrir o editor de texto da linha de comando Nano com este arquivo: sudo nano /etc/apt/sources.list.d/signal.list) chamado signal.list em /etc/apt/sources.list.d com o seguinte conteúdo (assumindo que você ' já baixei a chave conforme explicado acima, como /usr/share/keyrings/signal-archive-keyring.gpg):

Comandos para usar no terminal

deb [arch=amd64 signed-by=/usr/share/keyrings/signal-archive-keyring.gpg] https://updates.signal.org/desktop/apt xenial main

Lembre-se de executar sudo apt update após adicionar uma nova chave de assinatura e repositório, para atualizar as fontes de software.

Você também pode adicionar o repositório no formato de arquivo Deb822, mas para tentar não complicar ainda mais as coisas, não vou explicar isso aqui. Você pode ler sobre isso no wiki do Debian.

Como remover uma chave OpenPGP já existente adicionada ao chaveiro confiável do APT (/etc/apt/trusted.gpg ou /etc/apt/trusted.gpg.d)

Ao adicionar chaves OpenGPG conforme explicado acima, você desejará remover a mesma chave de /etc/apt/trusted.gpg ou /etc/apt/trusted.gpg.d, caso a tenha adicionado anteriormente. Sem fazer isso, não há benefício de segurança adicional.

Remover as chaves OpenPGP existentes do diretório /etc/apt/trusted.gpg.d deve ser muito fácil. Isso ocorre porque o nome do arquivo da chave deve ser bem descritivo. Por exemplo, o nome de arquivo da chave gpg do repositório Tor deste diretório em meu sistema é deb.torproject.org-keyring.gpg

Portanto, para se livrar das chaves já existentes adicionadas ao /etc/apt/trusted.gpg.d, tudo o que você precisa fazer é remover os arquivos da chave. Você precisa fazer isso como root, então abra o gerenciador de arquivos de sua escolha como root, usando admin:// (por exemplo, para abrir um local como root no Nautilus, pressione Ctrl + L para que possa digitar na barra de endereço e digite admin:///etc/apt/trusted.gpg.d) ou remova-os da linha de comando, usando:

Comandos para usar no terminal

sudo rm /etc/apt/trusted.gpg.d/

  • As instruções abaixo também funcionam para remover chaves do diretório /etc/apt/trusted.gpg.d. *

Quanto a remover as chaves gpg APT armazenadas em /etc/apt/trusted.gpg, as coisas são um pouco mais complicadas. Use o seguinte comando para listar todas as chaves APT OpenPGP importadas em /etc/apt/trusted.gpg e /etc/apt/trusted.gpg.d:

Comandos para usar no terminal

apt-key list

As chaves armazenadas em /etc/apt/trusted.gpg devem ser listadas no topo, seguidas pelas chaves do diretório /etc/apt/trusted.gpg.d. Você precisará inspecionar a chave uid para descobrir a chave que deseja remover. Normalmente, o uid deve mostrar a empresa ou usuário que assinou a chave, seguido do endereço de e-mail.

As chaves de /etc/apt/trusted.gpg são listadas pela lista apt-key como esta (exemplo):

pub   rsa4096 2016-04-22 [SC]      B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECFuid           [ unknown] Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>sub   rsa4096 2016-04-22 [E]

O ID da chave são os últimos 8 caracteres da impressão digital da chave GPG (portanto, neste exemplo, é 2980AECF).

Para excluir uma chave (de /etc/apt/trusted.gpg ou /etc/apt/trusted.gpg.d), agora você pode usar:

Comandos para usar no terminal

sudo apt-key del

Por exemplo, para excluir a chave do exemplo acima, você usaria:

Comandos para usar no terminal

sudo apt-key del 2980AECF

Referências:

Obrigado a u/ZebNemeth pela sugestão!

Propaganda
Propaganda