Signen van een RPM package

By | 2 juli 2012

Signen van RPM’s met GPG key

In Satellite kunnen eigen software channels worden aangemaakt. Hiermee kunnen aangepaste of eigen RPM’s via Satellite beschikbaar gesteld worden aan de clients. Een voorwaarde is wel dat de RPM packages zijn gesigned met een GPG key en dat de public GPG key voor de clients beschikbaar is en is importeerd. Hieronder wordt beschreven hoe dit kan worden uitgevoerd.

De werkzaamheden omvatten voor een deel een aantal eenmalig uit te voeren werkzaamheden en een aantal wat steeds voor elk RPM package terugkeert. Bij het aanmaken van een channel zal naast de ID ook om de GPG fingerprint worden gevraagd. Deze kan worden opgevraagd door: gpg --fingerprint.

Eenmalige werkzaamheden

Aanmaken GPG keypair
  • Maak een nieuwe GPG key aan met: gpg --gen-key om een GPG keypair aan te maken. Kies voor type 1, een DSA and Elgamal type key. Als keysize kan voor 2048 of 1024 gekozen worden. Een key van 2048 bits is uiteraard aanbevelingswaardig.
  • Na generatie moet de public key worden geexporteerd, dat kan met: gpg --export -a {naam vande key} > {naam waarmee de key is aangemaakt}.

Stel dat de key is aangemaakt met de naam Linuxteam en de public key wordt als LINUXTEAM-GPG-KEY opgeslagen:

gpg --export -a "LinuxTeam" > LINUXTEAM-GPG-KEY

Aanpassen van ~/.rpmmacros

Opmerking: Het beschrijven van het zelf maken van RPM packages valt buiten de scope van dit onderwerp.

Om tijdens het maken of het signen van bestaande RPM packages moet de ~/.rpmmacros file worden aangepast. In onderstaand voorbeeld wordt er vanuit gegaan dat als user root RPM packages gemaakt worden en de GPG key is aangemaakt met de naam LinuxTeam:

    %_gpg_name LinuxTeam
Importeren public key

De aangemaakte GPG key moet nog worden geimporteerd. Als we de bovengenoemde voorbeelden volgen dan wordt dit gedaan met:

rpm --import LINUXTEAM-GPG-KEY

Hiermee is de basis gelegd om bestaande of te bouwen RPM packages te signen met een GPG key.

GPG key beschikbaar in Satellite

Om van de GPG key gebruik te kunnen maken in RedHat Satellite moet de exporteerde public key beschikbaar worden gesteld. Dit is ook nodig als eigen software Channels worden aangemaakt. In bovenstaand voorbeeld is de public key ge-exporteerd als LINUXTEAM-GPG-KEY, als dit voorbeeld gevolgd wordt kan met cp LINUXTEAM-GPG-KEY /var/www/html/pub de public key beschikbaar worden gesteld.

Bij het aanmaken van een software Channel in Satellite wordt dan de volgende URL ingevuld onder Security: GPG

https://satellite.example.com/pub/LINUXTEAM-GPG-KEY

Terugkerende werkzaamheden

Signen van bestaande RPM packages

Een reeds bestaand RPM package, wat nog niet gesigned is door een andere GPG key, kan worden gesigned door:

rpm --resign {rpm package name}

Bouwen van RPM packages met GPG key

Als met rpmbuild zelf een RPM package gemaakt wordt kent rpmbuild een optie om het gegenereerde RPM package direct te signen. Als de bovenstaande eenmalige werkzaamheden zijn uitgevoerd dan kan dit door:

rpmbuild -v -ba --sign --clean SPECS/nrpe.spec

Opmerking: Als rpmbuild als root aangeroepen wordt dan wordt bovenstaande opdracht in /usr/src/redhat gegeven.

Controle van een GPG signed RPM package

Controleer een RPM package met: rpm -K -v {rpm package naam} Dit geeft soortgelijke uitvoer als van het RPM package nagios-plugins-1.4.14-1 de GPG signature wordt opgevraagd. In dit voorbeeld is het RPM package correct gesigned.

rpm -K -v nagios-plugins-1.4.14-1.x86_64.rpm
nagios-plugins-1.4.14-1.x86_64.rpm:
    Header V3 DSA signature: OK, key ID ae175d8e
    Header SHA1 digest: OK (9c915a0e8aa474bcfa6d0b3280753b1e83df295f)
    MD5 digest: OK (6f9c3b94b9a0fc8b51984c8acb8d4334)
    V3 DSA signature: OK, key ID ae175d8e

De laatste regel geeft aan: Key ID ae175d8e. Dit ID is te controleren door ,code>gpg –list-keys te geven en dit ID moet dan terugkomen bij de public key waarmee het RPM package gesigned is.