Como forçar o rpm e o yum a falharem se uma assinatura GPG estiver ausente ou não puder ser verificada?

5

Como posso forçar o rpm e o yum a falhar se uma assinatura GPG estiver ausente de um pacote ou não puder ser verificada devido a uma chave ausente? Para o exemplo abaixo, suponha que o RPM foi assinado, mas a chave não foi instalada.

Com o RPM, vejo um aviso, mas gostaria que isso falhasse, de modo que sou forçado a instalar manualmente a chave de assinatura.

# rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
gpg-pubkey-c105b9de-4e0fd3a3 --> gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <[email protected]>)

# rpm -ivh http://yum.example.com/company-release-el-6.noarch.rpm
Retrieving http://yum.example.com/company-release-el-6.noarch.rpm
warning: /var/tmp/rpm-tmp.3VmFk2: Header V4 RSA/SHA1 Signature, key ID 3bd6ec30: NOKEY
Preparing...                ########################################### [100%]
    1:company-release     ########################################### [100%]

Com o yum, não vejo nenhum aviso relacionado ao fato de a chave de assinatura não estar instalada.

# yum install -vy http://yum.example.com/company-release-el-6.noarch.rpm

Há sinalizadores adicionais que posso passar para esses comandos ou uma configuração que eu possa modificar para alterar o comportamento? Ou devo baixar o RPM e executar rpm --checksig antes da instalação?

    
por A J 06.02.2015 / 17:56

2 respostas

3

O ponto principal a ser entendido sobre a verificação de GPGs para pacotes é que a assinatura GPG é incorporada no pacote e as chaves GPG são armazenadas no rpmdb. Não existe uma API segura para perguntar "Que chave é o pacote X assinado com" você só pode perguntar "O pacote X está assinado com uma chave no rpmdb" e "A chave Y existe no rpmdb". Observe também que isso significa que um pacote só pode ser assinado por uma chave e que a alteração da assinatura altera os pacotes.

O Yum executa várias etapas quando faz o download de um pacote de um repositório configurado com "gpgcheck = 1" (o padrão).

  1. Depois que o primeiro pacote de um repositório é baixado, um simples "Este pacote está assinado com uma chamada gpgkey conhecida" está terminado. Se for, nada está feito. Se não é um aviso é exibido para o usuário. Isso é puramente informativo.

  2. Antes da transação começar, o yum verifica se o pacote está assinado     com um gpgkey conhecido (um já instalado no rpmdb), se for     o pacote é válido e nenhuma outra etapa é executada. Se não então     continua a # 3.

  3. O Yum faz o download de todos os arquivos fornecidos nos dados "gpgkey" para o     repositório de onde vem o pacote. Yum analisa isso, ignorando     quaisquer chaves já presentes no rpmdb. Se não houver novas chaves, yum     irá falhar.

  4. Se houver um "gpgcakey" especificado para o repositório, então yum     fará o download de todos os arquivos fornecidos nos dados "gpgcakey". Yum parses     que, ignorando todas as chaves já presentes nos repositórios gpg     chaveiro. Se não houver gpgcakeys instalado após a análise do arquivo,     yum irá falhar. Se houver novos gpgcakeys, então se eles já estiverem     importados como chaves CA para outro repo. eles são automaticamente     importado. Se esta é a primeira vez que vimos esta chave CA, o usuário     é perguntado se ele quer instalar a chave (a menos que -y seja dado). Se ele     diz que não para qualquer chave, yum falha (embora todas as chaves importadas permanecer em     o repo. chaveiro gpg).

  5. Se houver pelo menos um "gpgcakey" válido, o yum tentará fazer o download     um arquivo .asc "gpgkey". Se isso não existe, yum avança para o passo # 6     como se não houvesse gpgcakey. Se existir, então o "gpgkey"     é testado contra o "gpgcakey" e se passa é adicionado ao     rpmdb, se falhar, o yum falhará (embora todas as chaves importadas permaneçam     no rpmdb).

  6. Se houver novos gpgkeys, o usuário é perguntado se deseja     instale cada chave (a menos que -y seja fornecido). Se ele disser não para qualquer chave,     yum falha.

  7. Após a instalação de novas chaves, o yum verifica novamente o pacote     assinatura contra o gpgkeys no rpmdb. Se isso falhar, yum     falha.

por 08.02.2015 / 15:12
2

Coloque localpkg_gpgcheck=1 em /etc/yum.conf e garanta que você sempre yum para instalar o rpms.

Se você tem um rpm no sistema de arquivos local, faça

yum install <rpm-on-local-filesys>

Certifique-se de que também os define em todos os repositórios em /etc/yum.repos.d

gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/SOME-APPROVED-GPG-KEY

Como você mencionou, o melhor que você terá de instalar via rpm é um aviso e não há meios de configurá-lo para se recusar a instalar em uma chave GPG não presente.

    
por 03.09.2015 / 09:40