Pacman-key
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 [5] 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. Paket Entwickler und Trusted User besitzen individuelle PGP Schlüssel mit denen sie ihre Pakete signieren. Mit dieser Signatur wird die Originität der Pakete belegt. Man selbst verfügt 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, die vom eigenen PGP Schlüssel, bis hin zum Paket selbst reicht, benötigt. Durch die Arch Schlüssel Struktur kann die 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 erstell 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 http://www.archlinux.org/pacman/pacman.conf.5.html#_package_and_database_signature_checking 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 ofiziellen Repositorien sollte man TrustedOnly verwenden!
Da die Datenbanksignierung bislang (Stand: Dezember 2011) noch nicht implementiert wurde, muss die DatabaseOptional option verwendet werden, wenn man Required benutzt:
SigLevel = Required DatabaseOptional TrustedOnly
Schlüsselbund initialisieren
Pacman Keyring erstellen:
# pacman-key --init
Dies erstellt einen neuen keyring in /etc/pacman.d/gnupg und generiert einen individuellen und einzigartigen master key für das eigene System.
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 commandozeile kann diese Definition (vorübergehend) ausser Kraft gesetzt werden. (Andere Keyserver findet man im Wikiartikel aufgelistet.)
Für gewöhnlich sind PGP Schlüssel zu gross (2048 bits oder mehr) um als Mensch mit ihnen arbeiten zu können, also werden sie zerlegt um einen 40 Hexadezimalzeichen langen fingerprint zu erstellen. Die letzten acht Stellen, die 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 "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 http://allanmcrae.com 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 Allans blog http://allanmcrae.com.
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 brauch 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 und er kann dazu verwendet werden, jedweges anderes 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
Dieses Prozedere wiederholt sich für jeden einzelnen Master Key
Inoffizielle Keys
Möchte man seinem Schlüsselbund inoffizielle Keys zufügen, muss man dies händisch tun. Als erstes braucht man die ID des Schlüsselbesitzers. Mit
# pacman-key -r <keyid>
lädt man diese ID von einem Keyserver herunter. Unbedingt daran denken, den Fingerprint zu prüfen, so wie man es mit einem Masterkey oder jedem anderen zu signierenden Schlüssel auch täte! Nach dem Überprüfen des Schlüssels, muss man ihn lokal signieren:
# pacman-key --lsign-key <keyid>
Der Schlüssel ist jetzt als vertrauenswürdig eingestuft.
Schlüssel automatisiert hinzufügen
Dieser Abschnitt stellt Skripten 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 Skripten 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 PGP 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
Schlüssel können nicht importiert werden
Manche Internetanbieter blockiern die Ports, die PGP 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 PGP Signatur Prüfung komplett deaktivieren. Dazu entfernt man in /etc/pacman.conf unter [options] das Kommentarzeichen vor:
SigLevel = Never
Dadurch deaktiviert man die Signaturprüfung, 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 zu einem späteren Zeitpunkt wieder zu aktivieren.