Capítulo 4. Tópicos avançados
Esta seção cobre tópicos que estão além do escopo do tutorial introdutório, mas que são úteis em embalagens RPM do mundo real.
4.1. Assinatura de pacotes
Os pacotes são assinados para garantir que nenhum terceiro possa alterar seu conteúdo. Um usuário pode adicionar uma camada adicional de segurança usando o protocolo HTTPS ao fazer o download do pacote.
Há três maneiras de assinar um pacote:
Para poder assinar um pacote, você precisa criar uma chave GNU Privacy Guard (GPG), conforme descrito em Seção 4.1.1, “Criando uma chave GPG”.
4.1.1. Criando uma chave GPG
Procedimento
Gerar um par de chaves GNU Privacy Guard (GPG):
# gpg --gen-key
Confirmar e ver a chave gerada:
# gpg --list-keys
Exportar a chave pública:
# gpg - export -a '<Key_name>' > RPM-GPG-KEY-pmanager
NotaInclua o nome real que você selecionou para a chave em vez de <Key_name>.
Importar a chave pública exportada para um banco de dados RPM:
# rpm --importar RPM-GPG-KEY-pmanager
4.1.2. Acrescentar uma assinatura a um pacote já existente
Esta seção descreve o caso mais usual quando um pacote é construído sem uma assinatura. A assinatura é adicionada imediatamente antes do lançamento do pacote.
Para adicionar uma assinatura a um pacote, use a opção --addsign
fornecida pelo pacote rpm-sign
.
Ter mais de uma assinatura permite registrar o caminho de propriedade do pacote desde o construtor do pacote até o usuário final.
Procedimento
Adicione uma assinatura a um pacote:
$ rpm --blather-addsign-7.9-1.x86_64.rpm
NotaVocê deve inserir a senha para desbloquear a chave secreta para a assinatura.
4.1.3. Verificação das assinaturas de um pacote com múltiplas assinaturas
Procedimento
Para verificar as assinaturas de um pacote com múltiplas assinaturas, execute o seguinte:
$ rpm --checksig blather-7.9-1.x86_64.rpm blather-7.9-1.x86_64.rpm: size pgp pgp md5 OK
As duas cordas
pgp
na saída do comandorpm --checksig
mostram que o pacote foi assinado duas vezes.
4.1.4. Um exemplo prático de como adicionar uma assinatura a um pacote já existente
Esta seção descreve um exemplo de situação em que adicionar uma assinatura a um pacote já existente pode ser útil.
Uma divisão de uma empresa cria um pacote e o assina com a chave da divisão. A sede da empresa então verifica a assinatura do pacote e adiciona a assinatura corporativa ao pacote, declarando que o pacote assinado é autêntico.
Com duas assinaturas, a embalagem chega a um varejista. O varejista verifica as assinaturas e, se corresponderem, adiciona também sua assinatura.
O pacote agora chega a uma empresa que quer implantar o pacote. Após verificar cada assinatura no pacote, eles sabem que se trata de uma cópia autêntica. Dependendo dos controles internos da empresa implantadora, eles podem optar por adicionar sua própria assinatura, para informar seus funcionários que o pacote recebeu sua aprovação corporativa
4.1.5. Substituindo a assinatura em um pacote já existente
Este procedimento descreve como mudar a chave pública sem ter que reconstruir cada pacote.
Procedimento
Para mudar a chave pública, execute o seguinte:
$ rpm --reinscrição blather-7.9-1.x86_64.rpm
NotaVocê deve inserir a senha para desbloquear a chave secreta para a assinatura.
A opção --resign
também permite alterar a chave pública para vários pacotes, como mostrado no procedimento a seguir.
Procedimento
Para mudar a chave pública para vários pacotes, execute:
$ rpm - resignar b*.rpm
NotaVocê deve inserir a senha para desbloquear a chave secreta para a assinatura.
4.1.6. Assinatura de um pacote no momento da construção
Procedimento
Construa o pacote com o comando
rpmbuild
:R$ rpmbuild blather-7.9.spec
Assine o pacote com o comando
rpmsign
usando a opção--addsign
:$ rpmsign --addsign blather-7.9-1.x86_64.rpm
- Opcionalmente, verificar a assinatura de um pacote:
$ rpm --checksig blather-7.9-1.x86_64.rpm blather-7.9-1.x86_64.rpm: size pgp md5 OK
Ao construir e assinar vários pacotes, use a seguinte sintaxe para evitar a entrada da senha Pretty Good Privacy (PGP) várias vezes.
$ rpmbuild -ba --sign b*.spec
Observe que você deve digitar a senha para desbloquear a chave secreta para a assinatura.