Pacman-key: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Dings (Diskussion | Beiträge)
Henrikx (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(24 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Pacman-key ist ein neues, mit [[Pacman]] 4 verfügbares Werkzeug. Es ermöglicht dem Nutzer, die Liste vertrauenswürdiger Schlüssel zu verwalten.
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, [http://allanmcrae.com/2011/08/pacman-package-signing-1-makepkg-and-repo-add/] [http://allanmcrae.com/2011/08/pacman-package-signing-2-pacman-key/] [http://allanmcrae.com/2011/08/pacman-package-signing-3-pacman/] [http://allanmcrae.com/2011/12/pacman-package-signing-4-arch-linux/4] sowie dem englischsprachigen [https://wiki.archlinux.org/index.php/Package_Signing_Proposal_for_Pacman Wiki] und in diesem [https://bbs.archlinux.de/viewtopic.php?id=20662 Thread] im deutschen Archforum zu finden.  
Hintergrundinformationen zu diesem Thema sind in folgenden (englischen) Blogeinträgen, [http://allanmcrae.com/2011/08/pacman-package-signing-1-makepkg-and-repo-add/] [http://allanmcrae.com/2011/08/pacman-package-signing-2-pacman-key/] [http://allanmcrae.com/2011/08/pacman-package-signing-3-pacman/] [http://allanmcrae.com/2011/12/pacman-package-signing-4-arch-linux/4] sowie dem englischsprachigen [[:en:DeveloperWiki:Package_signing|Wiki]] und in diesem {{forum|20662|Thread}} im deutschen Arch-Forum zu finden.  
 


== Funktionsweise ==
== 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 [http://de.wikipedia.org/wiki/Web_of_trust "Web Of Trust"] Models.
Um sicherzustellen, dass Pakete auch wirklich von den Entwicklern stammen und nicht von jemandem, der sich als diese ausgibt, bedient sich die Paketsignierung Pacmans des {{wikipedia|Web_of_Trust|"Web Of Trust"}}-Models.
Entwickler und Trusted User besitzen individuelle PGP-Schlüssel, mit denen sie ihre Pakete signieren. Mit dieser Signatur wird der Ursprung der Pakete belegt.
Entwickler und Trusted User besitzen individuelle {{wikipedia|GNU_Privacy_Guard|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.
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.
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 PGP Schlüssel bis hin zum Paket selbst reicht.
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:
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.
*'''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.
*'''Inoffizielle Pakete:'''  Ein Entwickler hat ein Paket erstellt und signiert; Man selbst signiert mit seinem Schlüssel den Schlüssel des Entwicklers.
*'''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.
*'''Offizielle Pakete:''' Ein Entwickler hat ein Paket erstellt und signiert. Der Schlüssel des Entwicklers wurde über die Arch Linux Master Keys signiert. Die Arch Linux Master Keys werden weiterhin mit dem eigenen Schlüssel signiert und somit für vertrauenswürdig erklärt, was die Authentizität des Entwickler-Schlüssels mit einschließt.


== Setup ==
== Setup ==
Zeile 19: Zeile 18:
=== Pacman konfigurieren ===
=== Pacman konfigurieren ===


Zunächst muss man sich für die Art der Signaturprüfung entscheiden. Diese wird über die SigLevel-Option in der <code>/etc/pacman.conf</code> eingestellt.
Zunächst muss man sich für die Art der Signaturprüfung entscheiden. Diese wird über die SigLevel-Option in der Datei {{ic|/etc/pacman.conf}} eingestellt. Man hat die Möglichkeit die Option global oder für jedes Repository extra einzustellen.
In den Kommentaren werden verschiedene Möglichkeiten aufgezeigt, eine detaillierte Erklärung ist in der '''pacman.conf''' [http://www.archlinux.org/pacman/pacman.conf.5.html#_package_and_database_signature_checking man page] zu finden.
Welche Einträge gültig sind können in der in der Man-Page von '''pacman.conf''' [http://www.archlinux.org/pacman/pacman.conf.5.html#_package_and_database_signature_checking man page] nachgelesen werden.
{{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 Option <code>DatabaseOptional</code> verwendet werden, wenn man <code>Required</code> benutzt:
Standardmäßig ist in der {{ic|pacman.conf}} für jedes Repository folgende Option gesetzt:
 
SigLevel = PackageRequired
 
Pakete aus diesen Repositorys können nur installiert werden, wenn der Schlüssel signiert wurde. Weiterhin bedeutet es , dass lokal gebaute Pakete keiner Signatur bedürfen um installiert werden zu können.
 
=== Archlinux-Keyring ===


SigLevel = Required DatabaseOptional TrustedOnly
Der Weg, um an die gültigen Schlüssel zu kommen, wurde durch das Update von pacman auf 4.0.3 {{forum|21658|vereinfacht}}. Seit diesem Update wird das Paket {{paket|archlinux-keyring}} als Abhängigkeit für Pacman mit installiert.
Dadurch braucht man nur noch die Befehle


=== Schlüsselbund initialisieren ===
Pacman-Keyring erstellen:
  # pacman-key --init
  # 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 <code>/etc/pacman.d/gnupg</code> und eines individuellen und einzigartigen Master-Keys für das eigene System zu bekommen; dieser Vorgang kann eine Zeitlang dauern.


== Schlüsselbund verwalten ==
sowie
 
# pacman-key --populate archlinux
 
auszuführen. Ersterer Befehl sorgt dafür, dass ein Schlüsselbund für Pacman erstellt wird, während der Zweite dafür sorgt, dass die offiziellen Entwickler-Schlüssel in den eigenen Pacman-Schlüsselbund geladen werden. Die Schlüssel, die geladen bzw. entfernt werden, sind bei {{ic|/usr/share/pacman/keyrings/}} hinterlegt. Gleichzeitig werden die Master-Schlüssel mit dem erforderlichen Trustlevel versehen.
 
Nach jedem Paket-Update sollte der Populate (engl. für bestücken) Befehl ausgeführt werden, damit neue Schlüssel übernommen werden, bzw ungültig gewordene entfernt werden.
Den Initialisierungsbefehl braucht man nicht mehr. Er ist nur wieder nötig, wenn man den Pacman-Schlüsselring gelöscht hat.
 
=== Schlüsselbund verwalten ===
 
Schlüssel, die benötigt werden um Paketsignaturen zu verifizieren, werden von pacman-key in einem Schlüsselbund (Keyring) verwaltet. Dieser Schlüsselbund befindet sich bei {{ic|/etc/pacman.d/gnupg/}}.
 
Die offiziellen Schlüssel werden durch das Paket archlinux-keyring aktuell gehalten.
Allerdings kann es vorkommen, dass man fremde Repositorys benutzt. Und wenn die Anbieter fremder Repositorys Paketverifizierung anbieten, muss man deren Schlüssel selbst in den Schlüsselring übertragen. Wie genau das funktioniert kann weiter unten [[#Inoffizielle_Keys|nachgelesen]] werden.
 
Ein weiterer nützlicher Befehl ist:
 
# pacman-key --refresh-keys
 
Mit dieser Eingabe werden von allen Schlüsseln, die lokal vorliegen, ein Update angefordert. Damit werden unter anderem die Signaturen auf den neusten Stand gebracht.
 
Welchen Keyserver man verwendet wird in {{ic|/etc/pacman.d/gnupg/gpg.conf}} definiert. Allerdings kann man durch die {{ic|--keyserver}} Option in der Kommandozeile diese Definition (vorübergehend) außer Kraft setzen. (Andere Keyserver findet man in diesem [http://en.wikipedia.org/wiki/Key_server_(cryptographic) Wikipedia-Artikel] {{sprache|en}} aufgelistet.)
 
Für gewöhnlich sind GPG-Schlüssel zu groß (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.
 
=== Offizielle Entwickler-Keys ===
Die offiziellen Entwickler-Keys muss man in der Regel nicht mehr selbst verwalten. Trotzdem sollte man sich durchaus die Zeit nehmen und diese überprüfen. Die erste Anlaufstelle wäre die Seite [http://www.archlinux.org/master-keys/ "Master Signing Keys"], auf der alle aufgelistet werden. Weiterhin sind, als weiteres Beispiel, die Blogs der Entwickler eine Anlaufstelle um die Gültigkeit eines Keys zu überprüfen.
 
=== 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!
Befindet sich der Key auf keinem Keyserver, weil man sich nur lokal einen Key erstellt hat, um die selbst gebauten Pakete zu signieren, kann man diesen so hinzufügen:
# pacman-key -a <pubring-file>
Die Pubring-Datei kann man üblicherweise im Home-Verzeichnis des Users finden, der den Key erstellt hat: {{ic|/home/user/.gnupg/}}.


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
Nach der Überprüfung des Schlüssels muss man ihn lokal signieren und ihren Trust Level mindestens auf gering, also "marginal", setzen:
<code>/etc/pacman.d/gnupg/gpg.conf</code> definiert. Durch Verwenden der <code>--keyserver</code> Option in der Kommandozeile kann diese Definition (vorübergehend) ausser Kraft gesetzt werden. (Andere Keyserver findet man in diesem [http://en.wikipedia.org/wiki/Key_server_(cryptographic) Wikipediaartikel] aufgelistet.)
# pacman-key --lsign-key <keyid>
Der Schlüssel ist jetzt als vertrauenswürdig eingestuft.


Für gewöhnlich sind PGP-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.
Alternativ kann so vorgegangen werden, um einen Schlüssel zu signieren:


=== Master-Keys ===
  # pacman-key --edit-key <keyid>
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 [https://www.archlinux.org/master-keys 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 [http://allanmcrae.com 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 [https://www.archlinux.org/master-keys Master Signing Keys] Seite und [http://allanmcrae.com Allan McRae's Blog] abzugleichen.
  gpg> lsign
  gpg> lsign
  ...
  ...
  Primary key fingerprint: ...
  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
  Really sign? (y/N) y
  gpg> trust
  gpg> trust
Zeile 61: Zeile 89:
  gpg> q
  gpg> q
  Save changes? (y/N) y
  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:
Möchte man diese lokale Signierung wieder entfernen muss man wie folgt vorgehen:
  # pacman-key --edit-key <keyid>
  # pacman-key --edit-key <keyid>
  # (danach ist man in der gpg shell)
  gpg> uid 1
# uid 1
  gpg> delsig <keyid>
  # delsig <keyid>
  gpg> quit  
  # quit  
# (danach ist man wieder in der "normalen" shell)
  # pacman-key -d <keyid>
  # pacman-key -d <keyid>


Nur das Löschen alleine mit "pacman-key -d" reicht NICHT!
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 PGP-Key fingerprints und lädt mittels pacman <code>--recv-keys</code> 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 ==
== Problembehebung ==
=== Erzeugen zufälliger Bytes / Entropy ===
=== Erzeugen zufälliger Bytes / Entropy ===
Kommt es beim Ausführen von <code>pacman-key --init</code> zu folgender Meldung
Kommt es beim Ausführen von {{ic|pacman-key --init}} zu folgender Meldung
  gpg: Generating pacman keychain master key...
  gpg: Generating pacman keychain master key...
  Not enough random bytes available.  Please do some other work to give
  Not enough random bytes available.  Please do some other work to give
  the OS a chance to collect more entropy!
  the OS a chance to collect more entropy!
kann man z.B. durch ausführen von <code>updatedb</code> in einer anderen virtuellen Konsole, bewegen der Maus und drücken zufälliger Tasten auf dem Keyboard Abhilfe schaffen. (siehe [https://wiki.archlinux.de/title/Pacman-key#Schl.C3.BCsselbund_initialisieren 2.2])
kann man z.B. durch bewegen der Maus, drücken zufälliger Tasten auf der Tastatur oder ausführen folgender Befehle in anderen virtuellen Konsolen Abhilfe schaffen:
ls -lR / > /dev/null
find / -type f -exec cat "{}" \; > /dev/null
top


Falls man <code>pacman-key --init</code> via ssh ausführen muss, kann man zuvor das Paket [https://www.archlinux.org/packages/?name=haveged haveged] auf dem Zielrechner installieren. Anschliessend verbindet man sich per ssh mit dem Zielrechner und führt
Falls man {{ic|pacman-key --init}} via ssh ausführen muss, kann man zuvor das Paket {{paket|haveged}} auf dem Zielrechner installieren. Anschließend verbindet man sich per ssh mit dem Zielrechner und führt
  # rc.d start haveged
  # rc.d start haveged
  # pacman-key --init
  # pacman-key --init
aus. Nachdem <code>pacman-key --init</code> erfolgreich ausgeführt wurde kann man <code>haveged</code> beenden und wieder deinstallieren.
aus. Nachdem {{ic|pacman-key --init}} erfolgreich ausgeführt wurde kann man {{ic|haveged}} beenden und wieder deinstallieren.
  # rc.d stop haveged
  # rc.d stop haveged
  # pacman -Rs haveged
  # pacman -Rs haveged
Zeile 121: Zeile 119:
=== Schlüssel können nicht importiert werden ===
=== Schlüssel können nicht importiert werden ===


Manche Internetanbieter blockieren 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 <code>/etc/pacman.d/gnupg/gpg.conf</code> die Keyserver Zeile wie folgt:  
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 {{ic|/etc/pacman.d/gnupg/gpg.conf}} die Keyserver Zeile wie folgt:  
  keyserver hkp://pgp.mit.edu:11371
  keyserver hkp://pgp.mit.edu:11371


== Deaktivieren der Signaturprüfung ==
== SigLevel Optionen ==
{{achtung|Das Deaktivieren der Signaturprüfung erlaubt es Pacman, nicht vertrauenswürdige Pakete automatisch zu installieren!}}
{{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 <code>/etc/pacman.conf</code> unter [options] das Kommentarzeichen vor:
Sollte man sich nicht mit Paketsignierung befassen wollen, kann man die GPG-Signaturprüfung komplett deaktivieren. Dazu entfernt man in {{ic|/etc/pacman.conf}} unter [options] das Kommentarzeichen vor:
  [options]
  SigLevel = Optional TrustedOnly
und ersetzt die Optionen durch
  SigLevel = Never
  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.
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.


Zeile 135: Zeile 133:


* [[Pacman]]
* [[Pacman]]
* [[Grundlagen der Verschlüsselung mit GnuPG]]
* [[GnuPG]]
 
== Weblinks ==
* [http://gnupg.org/index.de.html GnuPG Website] {{sprache|de}}


{{ÜberFDL||Seite=http://wiki.archlinux.org|Name=ArchLinux.org Wiki|Original=https://wiki.archlinux.org/index.php/Pacman-key}}  
{{ÜberFDL||Seite=http://wiki.archlinux.org|Name=ArchLinux.org Wiki|Original=https://wiki.archlinux.org/index.php/Pacman-key}}  

Aktuelle Version vom 30. Juni 2017, 16:12 Uhr

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 Arch-Forum zu finden.

Funktionsweise

Um sicherzustellen, dass 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 signiert mit seinem Schlüssel den Schlüssel des Entwicklers.
  • Offizielle Pakete: Ein Entwickler hat ein Paket erstellt und signiert. Der Schlüssel des Entwicklers wurde über die Arch Linux Master Keys signiert. Die Arch Linux Master Keys werden weiterhin mit dem eigenen Schlüssel signiert und somit für vertrauenswürdig erklärt, was die Authentizität des Entwickler-Schlüssels mit einschließt.

Setup

Pacman konfigurieren

Zunächst muss man sich für die Art der Signaturprüfung entscheiden. Diese wird über die SigLevel-Option in der Datei /etc/pacman.conf eingestellt. Man hat die Möglichkeit die Option global oder für jedes Repository extra einzustellen. Welche Einträge gültig sind können in der in der Man-Page von pacman.conf man page nachgelesen werden.

Standardmäßig ist in der pacman.conf für jedes Repository folgende Option gesetzt:

SigLevel = PackageRequired

Pakete aus diesen Repositorys können nur installiert werden, wenn der Schlüssel signiert wurde. Weiterhin bedeutet es , dass lokal gebaute Pakete keiner Signatur bedürfen um installiert werden zu können.

Archlinux-Keyring

Der Weg, um an die gültigen Schlüssel zu kommen, wurde durch das Update von pacman auf 4.0.3 vereinfacht . Seit diesem Update wird das Paket archlinux-keyring als Abhängigkeit für Pacman mit installiert. Dadurch braucht man nur noch die Befehle

# pacman-key --init

sowie

# pacman-key --populate archlinux

auszuführen. Ersterer Befehl sorgt dafür, dass ein Schlüsselbund für Pacman erstellt wird, während der Zweite dafür sorgt, dass die offiziellen Entwickler-Schlüssel in den eigenen Pacman-Schlüsselbund geladen werden. Die Schlüssel, die geladen bzw. entfernt werden, sind bei /usr/share/pacman/keyrings/ hinterlegt. Gleichzeitig werden die Master-Schlüssel mit dem erforderlichen Trustlevel versehen.

Nach jedem Paket-Update sollte der Populate (engl. für bestücken) Befehl ausgeführt werden, damit neue Schlüssel übernommen werden, bzw ungültig gewordene entfernt werden. Den Initialisierungsbefehl braucht man nicht mehr. Er ist nur wieder nötig, wenn man den Pacman-Schlüsselring gelöscht hat.

Schlüsselbund verwalten

Schlüssel, die benötigt werden um Paketsignaturen zu verifizieren, werden von pacman-key in einem Schlüsselbund (Keyring) verwaltet. Dieser Schlüsselbund befindet sich bei /etc/pacman.d/gnupg/.

Die offiziellen Schlüssel werden durch das Paket archlinux-keyring aktuell gehalten. Allerdings kann es vorkommen, dass man fremde Repositorys benutzt. Und wenn die Anbieter fremder Repositorys Paketverifizierung anbieten, muss man deren Schlüssel selbst in den Schlüsselring übertragen. Wie genau das funktioniert kann weiter unten nachgelesen werden.

Ein weiterer nützlicher Befehl ist:

# pacman-key --refresh-keys

Mit dieser Eingabe werden von allen Schlüsseln, die lokal vorliegen, ein Update angefordert. Damit werden unter anderem die Signaturen auf den neusten Stand gebracht.

Welchen Keyserver man verwendet wird in /etc/pacman.d/gnupg/gpg.conf definiert. Allerdings kann man durch die --keyserver Option in der Kommandozeile diese Definition (vorübergehend) außer Kraft setzen. (Andere Keyserver findet man in diesem Wikipedia-Artikel aufgelistet.)

Für gewöhnlich sind GPG-Schlüssel zu groß (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.

Offizielle Entwickler-Keys

Die offiziellen Entwickler-Keys muss man in der Regel nicht mehr selbst verwalten. Trotzdem sollte man sich durchaus die Zeit nehmen und diese überprüfen. Die erste Anlaufstelle wäre die Seite "Master Signing Keys", auf der alle aufgelistet werden. Weiterhin sind, als weiteres Beispiel, die Blogs der Entwickler eine Anlaufstelle um die Gültigkeit eines Keys zu überprüfen.

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! Befindet sich der Key auf keinem Keyserver, weil man sich nur lokal einen Key erstellt hat, um die selbst gebauten Pakete zu signieren, kann man diesen so hinzufügen:

# pacman-key -a <pubring-file>

Die Pubring-Datei kann man üblicherweise im Home-Verzeichnis des Users finden, der den Key erstellt hat: /home/user/.gnupg/.

Nach der Überprüfung des Schlüssels muss man ihn lokal signieren und ihren Trust Level mindestens auf gering, also "marginal", setzen:

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

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

Alternativ kann so vorgegangen werden, um einen Schlüssel zu signieren:

# pacman-key --edit-key <keyid>
gpg> lsign
...
Primary key fingerprint: ...
...
Really sign? (y/N) y
gpg> trust
...
Your decision? 3
gpg> q
Save changes? (y/N) y

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

# pacman-key --edit-key <keyid>
gpg> uid 1
gpg> delsig <keyid>
gpg> quit 
# pacman-key -d <keyid>

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

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 bewegen der Maus, drücken zufälliger Tasten auf der Tastatur oder ausführen folgender Befehle in anderen virtuellen Konsolen Abhilfe schaffen:

ls -lR / > /dev/null
find / -type f -exec cat "{}" \; > /dev/null
top

Falls man pacman-key --init via ssh ausführen muss, kann man zuvor das Paket haveged auf dem Zielrechner installieren. Anschließend 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

SigLevel Optionen

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-Signaturprüfung komplett deaktivieren. Dazu entfernt man in /etc/pacman.conf unter [options] das Kommentarzeichen vor:

SigLevel = Optional TrustedOnly

und ersetzt die Optionen durch

SigLevel = Never

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

Weblinks


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.