Pacman-key

Aus wiki.archlinux.de
Zur Navigation springen Zur Suche springen

20040916-achtung.jpg Dieser Artikel wurde als veraltet markiert, und sollte kontrolliert, und gegebenfalls korrigiert bzw. aktualisiert werden.


Pacman-key ist ein neues, mit Pacman 4 verfügbares Werkzeug. Es ermöglicht dem Nutzer, die Liste vertrauenswürdiger Schlüssel zu verwalten. Hintergrundinformationen zu diesem Thema sind in folgenden (englischen) Blogeinträgen, [1] [2] [3] [4] sowie dem englischsprachigen Wiki und in diesem Thread im deutschen Archforum zu finden.


Funktionsweise

Um sicherzustellen das Pakete auch wirklich von den Entwicklern stammen und nicht von jemandem, der sich als diese ausgibt, bedient sich die Paketsignierung Pacmans des "Web Of Trust" Models. Entwickler und Trusted User besitzen individuelle GPG-Schlüssel, mit denen sie ihre Pakete signieren. Mit dieser Signatur wird der Ursprung der Pakete belegt. Der Nutzer verfügt demgegenüber ebenfalls über ein Schlüsselunikat, welches beim Setup von pacman-key erstellt wird.

Schlüssel können auch dazu benutzt werden, andere Schlüssel zu signieren, was bedeutet, dass der Besitzer des zum Signieren verwendeten Schlüssels für die Authentizität des signierten Schlüssels garantiert. Um ein Paket als vertrauenswürdig einstufen zu können, wird eine Kette von Signaturen benötigt, die vom eigenen GPG Schlüssel bis hin zum Paket selbst reicht. Durch die Arch-Schlüssel-Struktur kann dies auf drei Arten geschehen:

  • Custom Pakete: Man hat das Paket persönlich erstellt und es mit dem eigenen Schlüssel signiert.
  • Inoffizielle Pakete: Ein Entwickler hat ein Paket erstellt und signiert; Man selbst hat es mit seinem eigenen Schlüssel signiert.
  • Offizielle Pakete: Ein Entwickler hat ein Paket erstellt und signiert. Der Schlüssel des Entwicklers wurde mit einem Arch Linux Master Key signiert. Der Arch Linux Master Key wurde mit dem eigenen Schlüssel signiert und somit für vertrauenswürdig erklärt, um die Authentizität des Entwickler Schlüssels zu garantieren.

Setup

Pacman konfigurieren

Zunächst muss man sich für die Art der Signaturprüfung entscheiden. Diese wird über die SigLevel-Option in der /etc/pacman.conf eingestellt. In den Kommentaren werden verschiedene Möglichkeiten aufgezeigt, eine detaillierte Erklärung ist in der pacman.conf man page zu finden.

Achtung: Die TrustAll Option ist für debugging Zwecke vorgesehen und ermöglicht es, nicht verifizierte Schlüssel als vertrauenswürdig einzustufen. Für alle offiziellen Repositorien sollte man TrustedOnly verwenden!

Da die Datenbanksignierung bislang (Stand: Dezember 2011) noch nicht implementiert wurde, muss die Option DatabaseOptional verwendet werden, wenn man Required benutzt:

SigLevel = Required DatabaseOptional TrustedOnly

Schlüsselbund initialisieren

Pacman-Keyring erstellen:

# pacman-key --init

Das Programm erwartet dann Eingaben (wie Cursor-Bewegungen, updatedb auf einem anderen Terminal usw.), um genügend Zufallsdaten für die Generierung eines neuen Keyrings in /etc/pacman.d/gnupg und eines individuellen und einzigartigen Master-Keys für das eigene System zu bekommen; dieser Vorgang kann eine Zeitlang dauern.

Schlüsselbund verwalten

Schlüssel, die benötigt werden um Paketsignaturen zu verifizieren, werden von pacman-key in einem Schlüsselbund (Keyring) verwaltet. Wird ein Schlüssel benötigt, der sich noch nicht an dem Schlüsselbund befindet, rufen pacman und pacman-key diesen von einem Keyserver ab. Der zu verwendende Keyserver wird in /etc/pacman.d/gnupg/gpg.conf definiert. Durch Verwenden der --keyserver Option in der Kommandozeile kann diese Definition (vorübergehend) ausser Kraft gesetzt werden. (Andere Keyserver findet man in diesem Wikipediaartikel aufgelistet.)

Für gewöhnlich sind GPG-Schlüssel zu gross (2048 bits oder mehr) als das Menschen mit ihnen arbeiten könnten. Deshalb werden sie zerlegt, um einen 40 Hexadezimalzeichen langen Fingerprint zu erstellen. Die letzten acht Stellen, die sog. Key-ID, werden als "Name" für den Key verwandt. Der längere Fingerprint wird benutzt, um händisch zwei Schlüssel auf Gleichheit zu überprüfen.

Master-Keys

Zum Signieren der Schlüssel der Entwickler und Trusted User gibt es fünf Arch Linux Master Keys. Diese Schlüssel sollte man im eigenen Schlüsselbund haben. Die Key-IDs der Schlüssel findet man auf der Master Signing Keys Seite. Installation:

# pacman-key -r <keyid> <keyid> <keyid> <keyid> <keyid>

Man wird die Schlüssel auf dem eigenen Rechner signieren und ihren Trust Level mindestens auf gering, also "marginal", setzen müssen.

# pacman-key --edit-key <keyid> <keyid> <keyid> <keyid> <keyid>

Bevor man jedoch einen Schlüssel signiert, oder ihm vertraut, sollte man seinen Fingerprint abgleichen. Am besten tut man dies indem man Allan McRae ein Bier spendiert und ihn persönlich nach seinem Public Key Fingerprint fragt. Es ist einigermassen sicher, den Fingerprint mit anderen Listen, wie der auf der Master Signing Keys Seite und Allan McRae's Blog abzugleichen.

gpg> lsign
...
Primary key fingerprint: ...
...
Really sign? (y/N)

Offizielle Entwickler-Keys

Die offiziellen Entwickler- und Trusted User Keys werden mit den Master-Keys signiert, also braucht man sie nicht selbst mit pacman-key zu signieren. Jedes Mal wenn Pacman auf einen Schlüssel trifft, den er nicht kennt, fragt er nach, ob man den Schlüssel vom Keyserver herunterladen möchte. Man braucht einen Entwickler-Key nur einmalig herunterzuladen. Er kann dann dazu verwendet werden, jedes andere Paket dieses Entwicklers auf Echtheit zu überprüfen. Stimmen die Fingerprints überein, kann man sie signieren. Man muss jedem Master-Key mindestens den Trust Level "marginal" zuweisen.

Really sign? (y/N) y
gpg> trust
...
Your decision? 3
gpg> q
Save changes? (y/N) y

Diese Prozedur wiederholt sich für jeden einzelnen Master-Key.

Inoffizielle Keys

Möchte man seinem Schlüsselbund inoffizielle Keys zufügen, muss man dies manuell tun. Als erstes braucht man die ID des Schlüsselbesitzers. Mit

# pacman-key -r <keyid>

lädt man diese ID von einem Keyserver herunter. Es ist unbedingt daran zu denken, den Fingerprint zu prüfen, so wie man es mit einem Master-Key oder jedem anderen zu signierenden Schlüssel auch täte! Nach der Überprüfung des Schlüssels muss man ihn lokal signieren:

# pacman-key --lsign-key <keyid>

Der Schlüssel ist jetzt als vertrauenswürdig eingestuft.

Möchte man diese lokale Signierung wieder entfernen muss man wie folgt vorgehen:

# pacman-key --edit-key <keyid>
# (danach ist man in der gpg shell)
# uid 1
# delsig <keyid>
# quit 
# (danach ist man wieder in der "normalen" shell)
# pacman-key -d <keyid>

Nur das Löschen alleine mit "pacman-key -d" reicht NICHT!

Schlüssel automatisiert hinzufügen

Master-Keys

Dieser Abschnitt stellt Skripts zur Verfügung, mit deren Hilfe Schlüssel automatisch heruntergeladen werden können. Um zu vermeiden, dass man einem bösartigen Key vertraut, sollte man diese Skripts mit Vorsicht und gesundem Menschenverstand benutzen.

Achtung: Dieses Skript wird automatisch jedem Key vertrauen, den man herunterlädt. Deswegen sollte man die Fingerprints prüfen, BEVOR man pacman verwendet.

Mit Rootrechten auszuführen:

for key in FFF979E7 CDFD6BB0 4C7EA887 6AC6A4C2 824B18E8; do
   pacman-key --recv-keys $key
   pacman-key --lsign-key $key
   printf 'trust\n3\nquit\n' | gpg --homedir /etc/pacman.d/gnupg/ \
          --no-permission-warning --command-fd 0 --edit-key $key
done

Entwickler- und Trusted User-Keys

Achtung: Mit diesem Skript sollten Keys nur heruntergeladen werden, wenn man TrustedOnly verwendet!

Das Skript verwendet curl, um die Entwicklerseite herunterzuladen. Es extrahiert die GPG-Key fingerprints und lädt mittels pacman --recv-keys vom pgp.mit.edu keyserver die Schlüssel herunter um sie zu pacman key store hinzuzufügen. Als Root ausführen, oder dem pacman-key Kommando ein sudo voranstellen:

curl https://www.archlinux.org/{developers,trustedusers}/ |
awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |
xargs pacman-key --recv-keys

Problembehebung

Erzeugen zufälliger Bytes / Entropy

Kommt es beim Ausführen von pacman-key --init zu folgender Meldung

gpg: Generating pacman keychain master key...
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy!

kann man z.B. durch ausführen von updatedb in einer anderen virtuellen Konsole, bewegen der Maus und drücken zufälliger Tasten auf dem Keyboard Abhilfe schaffen. (siehe 2.2)

Falls man pacman-key --init via ssh ausführen muss, kann man zuvor das Paket haveged auf dem Zielrechner installieren. Anschliessend verbindet man sich per ssh mit dem Zielrechner und führt

# rc.d start haveged
# pacman-key --init

aus. Nachdem pacman-key --init erfolgreich ausgeführt wurde kann man haveged beenden und wieder deinstallieren.

# rc.d stop haveged
# pacman -Rs haveged

Schlüssel können nicht importiert werden

Manche Internetanbieter blockieren die Ports, die GPG verwendet um Keys zu importieren. Ein Weg dieses Problem zu umgehen, wäre einen MIT Keyserver zu benutzen, der alternative Ports anbietet. Dazu ändert man in /etc/pacman.d/gnupg/gpg.conf die Keyserver Zeile wie folgt:

keyserver hkp://pgp.mit.edu:11371

Deaktivieren der Signaturprüfung

Achtung: Das Deaktivieren der Signaturprüfung erlaubt es Pacman, nicht vertrauenswürdige Pakete automatisch zu installieren!

Sollte man sich nicht mit Paketsignierung befassen wollen, kann man die GPG-Signatur-Prüfung komplett deaktivieren. Dazu entfernt man in /etc/pacman.conf unter [options] das Kommentarzeichen vor:

[options]
SigLevel = Never

Zusätzlich sollten alle anderen SigLevels in der pacman.conf auskommentiert werden. Dadurch deaktiviert man die Signaturprüfung, so wie es in Pacman vor Version 4 der Fall war. Entscheidet man sich, dies zu tun, braucht man keinen Schlüsselbund mit pacman-key zu erstellen. Es ist immer möglich, die Option der Signaturprüfung zu einem späteren Zeitpunkt wieder zu aktivieren.

Siehe auch


Dieser Artikel (oder Teile davon) steht unter GNU FDL (GNU Freie Dokumentationslizenz) und ist eine Übersetzung aus dem ArchLinux.org Wiki. Am Original-Artikel kann jeder Korrekturen und Ergänzungen vornehmen. Im ArchLinux.org Wiki ist eine Liste der Autoren verfügbar.