Open Source im professionellen Einsatz

Prüfsummen und Signaturen

Nahezu alle Distributionen haben die Gefahr erkannt und treffen entsprechende Schutzvorkehrungen. Dabei geht es nicht nur um absichtliche Manipulationen, sondern in erster Linie darum, ein viel häufiger auftretendes Problem zu verhindern: Die Installation beschädigter Pakete, beispielsweise durch einen fehlerhaften Download.

Per Definition enthalten RPM-Pakete in ihrem Header Prüfsummen in den Formaten SHA1 und MD5 sowie Informationen über die Dateigröße. Damit kann der Admin die Integrität eines heruntergeladenen Paketes wirkungsvoll überprüfen. Eine Authentifizierung des Herausgebers ist damit jedoch noch nicht möglich, die Quelle des Paketes bleibt vorerst im Unklaren. Die Integrität eines RPMs prüft das Kommando:

$ rpm --checksig beaver-0.4.1-1.x86_64.rpm
beaver-0.4.1-1.x86_64.rpm: sha1 md5 OK

Wer sicherstellen will, dass ein Paket auch wirklich vom angegebenen Herausgeber stammt, greift auf dessen Signatur zurück – seriöse Entwickler signieren ihre Pakete. Genau wie bei E-Mail oder Dateien kommt hier das freie Kryptographiesystem GPG zum Einsatz. Der Entwickler erstellt als erstes ein GPG-Schlüsselpaar, mit dem er seine Pakete anschließend digital signiert. Das Erstellen des Schlüssels erledigt der Befehl »gpg --gen-key« (Listing 1).

Listing 1

gpg --gen-key

01 [...]
02 gpg: enabled debug flags: memstat
03 Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
04 (1) RSA und RSA (voreingestellt)
05 (2) DSA und Elgamal
06 (3) DSA (nur signieren/beglaubigen)
07 (4) RSA (nur signieren/beglaubigen)
08 Ihre Auswahl? 2
09 DSA-Schlüssel können zwischen 1024 und 3072 Bit lang sein.
10 Welche Schlüssellänge wünschen Sie? (1024)
11 Die verlangte Schlüssellänge beträgt 1024 Bit
12 Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
13 0 = Schlüssel verfällt nie
14 <n> = Schlüssel verfällt nach n Tagen
15 <n>w = Schlüssel verfällt nach n Wochen
16 <n>m = Schlüssel verfällt nach n Monaten
17 <n>y = Schlüssel verfällt nach n Jahren
18 Wie lange bleibt der Schlüssel gültig? (0) 365
19 Key verfällt am Mi 18 Apr 2012 05:37:07 CEST
20 [...]
21 gpg: Schlüssel C6B8BAFB ist als uneingeschränkt vertrauenswürdig gekennzeichnet
22 Öffentlichen und geheimen Schlüssel erzeugt und signiert.
23 [...]

Der Anwender wählt Algorithmen, Länge und Verwendungszweck des Schlüssel aus und definiert ein Verfallsdatum. Das ist wichtig, damit Keys, die verloren gehen, automatisch inaktiv werden und nicht für immer als eigentlich nicht mehr gültige Authentifizierungsquelle durchs Web geistern. GPG erstellt anschließend eine User-ID, die den Schlüssel identifizierbar macht, wofür es einige Zufallsdaten benötigt. Dazu verlangt es zufälligen Input an der Konsole oder mit der Maus, bevor es abschließend die Kerndaten des Keys ausgibt.

Den erzeugten öffentlichen Schlüssel lädt der Entwickler mit »gpg --send-key« auf einen der offiziellen Schlüsselserver hoch (Listing 2). Welchen Server er hier verwendet, spielt keine Rolle, da die Server ihre Schlüssel untereinander austauschen.

Listing 2

gpg --send-key

01 $ gpg --keyserver hkp://pgp.mit.edu --send-key C6B8BAFB
02 gpg: enabled debug flags: memstat
03 gpg: sende Schlüssel C6B8BAFB auf den hkp-Server pgp.mit.edu
04 random usage: poolsize=600 mixed=0 polls=0/0 added=0/0 outmix=0 getlvl1=0/0 getlvl2=0/0
06 secmem usage: 0/32768 bytes in 0 blocks

Die Buildumgebung

Im nächsten Schritt geht es daran, eine passende Umgebung für den Bau der RPM-Pakete durch das Kommando Rpmbuild zu schaffen. Entwickler sollten dabei ihre Pakete niemals als Root bauen, denn ein Fehler in einer ».spec« -Datei oder einem Makefile könnten böse Folgen haben. Ganz Vorsichtige legen sogar einen dezidierten Benutzer zum Paketbau an, um ihre Dateien zu schützen.

Ein »mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}« erzeugt die passende Verzeichnisstruktur. Wer davon abweichen und beispielsweise ein anderes Directory als »~/rpmbuild« verwenden möchte, muss Rpmbuild dessen Pfad übergeben. Das erledigt am Einfachsten das Makro »%_topdir« in der Datei »~/.rpmmacros« (Listing 3). Wer will, erweitert bei dieser Gelegenheit seine Konfiguration gleich um nützliche und zum Signieren notwendige Makros [2].

Listing 3

~.rpmmacros

03 %_topdir %(echo $HOME)/linux/rpmbuild
04 %packager Max Mustermann <max.mustermann@example.net>
05 %vendor Max Mustermann
06 %_signature gpg
07 %_gpg_name C6B8BAFB
08 %_hkp_keyserver http://pgp.mit.edu

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook