Como posso saber com qual chave GPG um pacote RPM foi assinado?

26

A assinatura criptográfica de um RPM pode ser verificada com o rpm -Kcomando Isso retorna uma sequência que contém gpg(ou pgp) e termina OKse a assinatura estiver no banco de dados do RPM e for válida.

Se o pacote não for assinado, mas as somas de verificação forem válidas, você ainda receberá OK, mas não gpg.

Se o pacote estiver assinado, mas a chave estiver faltando no banco de dados RPM, você receberá (GPG)(letras maiúsculas) e NOT OKAY, seguido por (MISSING KEYS: GPG#deadbeef).

Isso é útil se eu quiser descobrir qual chave devo encontrar para instalar para que a instalação do meu pacote funcione.

Mas e se eu quiser verificar qual das várias chaves no meu chaveiro RPM foi usada para assinar um determinado pacote?

mattdm
fonte

Respostas:

12
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE} %{SIGPGP:pgpsig} %{SIGGPG:pgpsig}\n'
Philip Durbin
fonte
Funciona apenas se você já instalou o pacote, a solução abaixo da Brightlancer permite verificar uma assinatura antes da instalação
Thomas
3
Isso funciona muito bem, mesmo para um pacote desinstalado, se você substituir -apor -p packagename.rpm.
Larsks
26

Há um campo Assinatura listado via rpm -qpi package.rpm, por exemplo:

[vagrant@vm-one ~]$ rpm -qpi puppet-3.7.4-1.el6.noarch.rpm
Name        : puppet
Version     : 3.7.4
Release     : 1.el6
Architecture: noarch
Install Date: (not installed)
Group       : System Environment/Base
Size        : 6532300
License     : ASL 2.0
Signature   : RSA/SHA512, Tue 27 Jan 2015 11:17:18 PM UTC, Key ID 1054b7a24bd6ec30
Source RPM  : puppet-3.7.4-1.el6.src.rpm
Build Date  : Mon 26 Jan 2015 11:48:15 PM UTC
Build Host  : tahoe.delivery.puppetlabs.net
Relocations : (not relocatable)
Vendor      : Puppet Labs
URL         : http://puppetlabs.com
Summary     : A network tool for managing many disparate systems
Description :
Puppet lets you centrally manage every important aspect of your system using a
cross-platform specification language that manages all the separate elements
normally aggregated in different files, like users, cron jobs, and hosts,
along with obviously discrete elements like packages, services, and files.
brilhante
fonte
8

Para descobrir qual chave GPG no seu banco de dados RPM assinou um rpm específico, faça o seguinte:

Liste todas as chaves GPG no seu banco de dados RPM:

$ rpm -qa gpg-pubkey*
...
...
gpg-pubkey-b1275ea3-546d1808
...
...

Primeiro, verifique se o rpm em questão está assinado com uma chave no seu RPM DB:

$ rpm -K hp/mlnx-en-utils-2.2-1.0.7.0.g0055740.rhel6u4.x86_64.rpm
hp/mlnx-en-utils-2.2-1.0.7.0.g0055740.rhel6u4.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

Você está procurando o OK no final, e não 'NOT OK (MISSING KEYS'), o que significa que foi assinado, mas por uma chave que não está no seu RPM DB.

Certo, então o rpm que estamos verificando foi assinado por uma chave em nosso RPM DB.

E, em seguida, obtenha o ID da chave com o qual o rpm foi assinado:

$ rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} %{SIGPGP:pgpsig} %{SIGGPG:pgpsig}\n' -p hp/mlnx-en-utils-2.2-1.0.7.0.g0055740.rhel6u4.x86_64.rpm
mlnx-en-utils-2.2-1.0.7.0.g0055740.rhel6u4 RSA/SHA1, Tue Apr 14 12:34:51 2015, Key ID fadd8d64b1275ea3 (none)

Agora você pode ver se os últimos 8 caracteres do ID da chave (ou seja, b1275ea3 de fadd8d64b1275ea3) correspondem a qualquer um dos 8 caracteres após gpg-pubkey- desde o primeiro comando. E neste caso, ele faz!

E então você tem a chave em questão, assim como:

$ rpm -qi gpg-pubkey-b1275ea3-546d1808

ver, neste exemplo, que foi a chave da HP que assinou essa rpm.

Espero que isto ajude. Levei um tempo para descobrir. :-)

Seekoei
fonte
5

Emita less <rpm file>e verifique a Signatureentrada, por exemplo:

[vagrant@vm-one ~]$ less artifactory-3.5.3.rpm
Name        : artifactory
Version     : 3.5.3
Release     : 30172
Architecture: noarch
Install Date: (not installed)
Group       : Development/Tools
Size        : 42286184
License     : LGPL
Signature   : (none)
Source RPM  : artifactory-3.5.3-30172.src.rpm
Build Date  : Thu 19 Mar 2015 04:47:04 PM UTC
Build Host  : artbuild2.jfrog.local
Relocations : (not relocatable)
Vendor      : JFrog Ltd.
URL         : http://www.jfrog.org
Summary     : Binary Repository Manager
Description :
The best binary repository manager around.
-rwxrwxr-x    1 root    root                     7891 Mar 19 16:47 /etc/init.d/artifactory
drwxr-xr-x    2 artifactartifact                    0 Mar 19 16:47 /etc/opt/jfrog/artifactory
-rwxrwx---    1 artifactartifact                 9855 Mar 19 16:47 /etc/opt/jfrog/artifactory/artifactory.config.xml
-rwxrwx---    1 artifactartifact                11172 Mar 19 16:47 /etc/opt/jfrog/artifactory/artifactory.system.properties
-rwxrwx---    1 artifactartifact                  457 Mar 19 16:47 /etc/opt/jfrog/artifactory/default
-rwxrwx---    1 artifactartifact                 6858 Mar 19 16:47 /etc/opt/jfrog/artifactory/logback.xml
-rwxrwx---    1 artifactartifact                 5470 Mar 19 16:47 /etc/opt/jfrog/artifactory/mimetypes.xml
drwxrwxr-x    2 root    root                        0 Mar 19 16:47 /opt/jfrog
drwxrwxr-x    2 root    root                        0 Mar 19 16:47 /opt/jfrog/artifactory/bin
-rwxrwxr-x    1 root    root                   103424 Mar 19 16:47 /opt/jfrog/artifactory/bin/artifactory-service.exe
-rwxrwxr-x    1 root    root                     1366 Mar 19 16:47 /opt/jfrog/artifactory/bin/artifactory.bat
-rwxrwxr-x    1 root    root                      457 Mar 19 16:47 /opt/jfrog/artifactory/bin/artifactory.default
artifactory-3.5.3.rpm
Sirex
fonte