GnuPG/Agent: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
'''GPG-Agent''' - Hintergrundprogramm für gecachte Passwörter.
'''GPG-Agent''' - Hintergrundprogramm für gecachte Passwörter


== Beschreibung ==
== Beschreibung ==
Wie der ssh-agent (bei [[OpenSSH]]) dient der gpg-agent, der seit GnuPG 2.0.x integraler Bestandteil ist, unter anderem dazu, die Passphrase für einen konfigurierbaren Zeitraum im Arbeitsspeicher zu halten, sodass eine erneute Eingabe entfällt; gpg-agent speichert die Passphrase aber nicht nur, sondern übernimmt auch ihre Abfrage vom Anwender (über ein konfigurierbares Hilfsprogramm).
Wie der ssh-agent (bei [[OpenSSH]]) dient der gpg-agent, der seit GnuPG 2.0.x integraler Bestandteil ist, unter anderem dazu, die Passphrase für einen konfigurierbaren Zeitraum im Arbeitsspeicher zu halten, sodass eine erneute Eingabe entfällt; gpg-agent speichert die Passphrase aber nicht nur, sondern übernimmt auch ihre Abfrage vom Anwender (über ein konfigurierbares Hilfsprogramm)
* Anders als bei OpenSSH ist der gpg-agent allerdings ab Version 2 von GnuPG zwingender Bestandteil; in der künftigen Version 2.1 werden sogar alle Operationen, die private Schlüssel beinhalten, an gpg-agent ausgelagert, was es ermöglicht, die Schlüssel auf einem anderen Rechner zu speichern und nur noch indirekt zu verwenden.
* Anders als bei OpenSSH ist der gpg-agent allerdings ab Version 2 von GnuPG zwingender Bestandteil; in der künftigen Version 2.1 werden sogar alle Operationen, die private Schlüssel beinhalten, an gpg-agent ausgelagert, was es ermöglicht, die Schlüssel auf einem anderen Rechner zu speichern und nur noch indirekt zu verwenden
* Die zweite wichtige Aufgabe von gpg-agent bei GnuPG 2.0.x ist der Zugriff auf Smartcards.
* Die zweite wichtige Aufgabe von gpg-agent bei GnuPG 2.0.x ist der Zugriff auf Smartcards


Der Kontakt zu einer Instanz von gpg-agent, die nicht den Standardsocket verwendet (es können mehrere gleichzeitig laufen, was aber meist nicht sinnvoll ist), wird über eine Umgebungsvariable ermöglicht.
Der Kontakt zu einer Instanz von gpg-agent, die nicht den Standardsocket verwendet (es können mehrere gleichzeitig laufen, was aber meist nicht sinnvoll ist), wird über eine Umgebungsvariable ermöglicht
* Ein Beispiel: Über den Befehl <code>gpg-agent --daemon thunderbird</code> wird der Mailclient [[Mozilla Thunderbird|Thunderbird]] gestartet, und zwar mit der Umgebungsvariable <code>GPG_AGENT_INFO</code>.
* Ein Beispiel: Über den Befehl <code>gpg-agent --daemon thunderbird</code> wird der Mailclient [[Mozilla Thunderbird|Thunderbird]] gestartet, und zwar mit der Umgebungsvariable <code>GPG_AGENT_INFO</code>
* Diese enthält eine Zeichenkette wie <code>/tmp/gpg-xY9Q7R/S.gpg-agent:2244:1</code> (Pfad des Socket, PID von gpg-agent (wird ignoriert) und Versionsnummer des Protokolls).
* Diese enthält eine Zeichenkette wie <code>/tmp/gpg-xY9Q7R/S.gpg-agent:2244:1</code> (Pfad des Socket, PID von gpg-agent (wird ignoriert) und Versionsnummer des Protokolls)
* Hierdurch kann das Mailprogramm Kontakt mit dem jeweiligen gpg-agent aufnehmen und ihm den Umgang mit den privaten Schlüsseln (und deren Passphrase) überlassen.
* Hierdurch kann das Mailprogramm Kontakt mit dem jeweiligen gpg-agent aufnehmen und ihm den Umgang mit den privaten Schlüsseln (und deren Passphrase) überlassen


Bei den meisten unixoiden Desktopumgebungen wird der gpg-agent gleich beim Start aktiviert.
Bei den meisten unixoiden Desktopumgebungen wird der gpg-agent gleich beim Start aktiviert
* Dadurch, dass das Startscript der Desktopumgebung diese Umgebungsvariable exportiert, haben alle Programme Zugriff darauf.
* Dadurch, dass das Startscript der Desktopumgebung diese Umgebungsvariable exportiert, haben alle Programme Zugriff darauf
* Wenn gpg-agent nicht läuft (oder nicht gefunden wird), wird es von gpg, gpgsm und gpgconf automatisch gestartet.
* Wenn gpg-agent nicht läuft (oder nicht gefunden wird), wird es von gpg, gpgsm und gpgconf automatisch gestartet
* Zugriff auf einen laufenden gpg-agent kann man in der Konsole über das Programm ''gpg-connect-agent'' bekommen.
* Zugriff auf einen laufenden gpg-agent kann man in der Konsole über das Programm ''gpg-connect-agent'' bekommen
* Mit dem Server kann man dann über das textbasierte Assuan-Protokoll kommunizieren.
* Mit dem Server kann man dann über das textbasierte Assuan-Protokoll kommunizieren
* Man kann gpg-agent daher auch unabhängig von OpenPGP und OpenSSH zur Verwaltung von Passphrasen für eigene Programme nutzen. Über die Konfigurationsdatei gpg-agent.conf wird u.&nbsp;a.
* Man kann gpg-agent daher auch unabhängig von OpenPGP und OpenSSH zur Verwaltung von Passphrasen für eigene Programme nutzen. Über die Konfigurationsdatei gpg-agent.conf wird u.&nbsp;a
* festgelegt, über welchen Zeitraum eine Passphrase gecacht wird.
* festgelegt, über welchen Zeitraum eine Passphrase gecacht wird


Man kann nicht direkt abfragen, welche Einträge gpg-agent gerade speichert, aber man kann testen, ob ein konkreter Eintrag vorhanden ist (und sich den auch anzeigen lassen).
Man kann nicht direkt abfragen, welche Einträge gpg-agent gerade speichert, aber man kann testen, ob ein konkreter Eintrag vorhanden ist (und sich den auch anzeigen lassen)
* GnuPG legt die Passphrase eines Schlüssels unter dessen Fingerprint ab (ggf.
* GnuPG legt die Passphrase eines Schlüssels unter dessen Fingerprint ab (ggf
* dem des betroffenen Unterschlüssels):
* dem des betroffenen Unterschlüssels):


Zeile 27: Zeile 27:
  OK
  OK


Ebenso kann man eine Passphrase setzen, sodass sie nicht vom Anwender abgefragt werden muss (etwa bei automatisierten Prozessen).
Ebenso kann man eine Passphrase setzen, sodass sie nicht vom Anwender abgefragt werden muss (etwa bei automatisierten Prozessen)
* Dafür gibt es sogar eine eigene Anwendung: gpg-preset-passphrase.
* Dafür gibt es sogar eine eigene Anwendung: gpg-preset-passphrase


Mit gpg-connect-agent kann man auch auf einfache Weise testen, ob gpg-agent überhaupt läuft (bzw.&nbsp;so läuft, dass es unmittelbar verwendet werden kann):
Mit gpg-connect-agent kann man auch auf einfache Weise testen, ob gpg-agent überhaupt läuft (bzw.&nbsp;so läuft, dass es unmittelbar verwendet werden kann):
Zeile 36: Zeile 36:


; Funktion
; Funktion
*Das automatisch von GnuPG für die Eingabe und das Cachen von Passwörtern verwendet wird.
*Das automatisch von GnuPG für die Eingabe und das Cachen von Passwörtern verwendet wird
*Speichert das Passwort in einem Cache und fragt nur nach festlegbaren Zeitintervallen erneut danach.
*Speichert das Passwort in einem Cache und fragt nur nach festlegbaren Zeitintervallen erneut danach


== Installation ==
== Installation ==
Zeile 48: Zeile 48:
!Option !! Beschreibung
!Option !! Beschreibung
|-
|-
| --daemon || Normaler Aufruf, um den Dämon zu starten.
| --daemon || Normaler Aufruf, um den Dämon zu starten
|-
|-
| --ignore-cache-for-signing || Erzwingt eine erneute Passworteingabe, um andere Schlüssel zu signieren.
| --ignore-cache-for-signing || Erzwingt eine erneute Passworteingabe, um andere Schlüssel zu signieren
|-
|-
| --default-cache-ttl n || Setzt die Zeit, wie lange ein Passwort im Cache bleibt, auf n Sekunden. Standard ist 600.
| --default-cache-ttl n || Setzt die Zeit, wie lange ein Passwort im Cache bleibt, auf n Sekunden. Standard ist 600
|-
|-
| --max-cache-ttl n || Setzt die maximale Zeit, wie lange ein Passwort im Cache bleibt, auf n Sekunden. Standard ist 7200 (2 Stunden).
| --max-cache-ttl n || Setzt die maximale Zeit, wie lange ein Passwort im Cache bleibt, auf n Sekunden. Standard ist 7200 (2 Stunden)
|-
|-
| --pinentry-program filename || Setzt explizit das Passworteingabeprogramm auf filename.
| --pinentry-program filename || Setzt explizit das Passworteingabeprogramm auf filename
|}
|}



Version vom 18. Februar 2024, 13:10 Uhr

GPG-Agent - Hintergrundprogramm für gecachte Passwörter

Beschreibung

Wie der ssh-agent (bei OpenSSH) dient der gpg-agent, der seit GnuPG 2.0.x integraler Bestandteil ist, unter anderem dazu, die Passphrase für einen konfigurierbaren Zeitraum im Arbeitsspeicher zu halten, sodass eine erneute Eingabe entfällt; gpg-agent speichert die Passphrase aber nicht nur, sondern übernimmt auch ihre Abfrage vom Anwender (über ein konfigurierbares Hilfsprogramm)

  • Anders als bei OpenSSH ist der gpg-agent allerdings ab Version 2 von GnuPG zwingender Bestandteil; in der künftigen Version 2.1 werden sogar alle Operationen, die private Schlüssel beinhalten, an gpg-agent ausgelagert, was es ermöglicht, die Schlüssel auf einem anderen Rechner zu speichern und nur noch indirekt zu verwenden
  • Die zweite wichtige Aufgabe von gpg-agent bei GnuPG 2.0.x ist der Zugriff auf Smartcards

Der Kontakt zu einer Instanz von gpg-agent, die nicht den Standardsocket verwendet (es können mehrere gleichzeitig laufen, was aber meist nicht sinnvoll ist), wird über eine Umgebungsvariable ermöglicht

  • Ein Beispiel: Über den Befehl gpg-agent --daemon thunderbird wird der Mailclient Thunderbird gestartet, und zwar mit der Umgebungsvariable GPG_AGENT_INFO
  • Diese enthält eine Zeichenkette wie /tmp/gpg-xY9Q7R/S.gpg-agent:2244:1 (Pfad des Socket, PID von gpg-agent (wird ignoriert) und Versionsnummer des Protokolls)
  • Hierdurch kann das Mailprogramm Kontakt mit dem jeweiligen gpg-agent aufnehmen und ihm den Umgang mit den privaten Schlüsseln (und deren Passphrase) überlassen

Bei den meisten unixoiden Desktopumgebungen wird der gpg-agent gleich beim Start aktiviert

  • Dadurch, dass das Startscript der Desktopumgebung diese Umgebungsvariable exportiert, haben alle Programme Zugriff darauf
  • Wenn gpg-agent nicht läuft (oder nicht gefunden wird), wird es von gpg, gpgsm und gpgconf automatisch gestartet
  • Zugriff auf einen laufenden gpg-agent kann man in der Konsole über das Programm gpg-connect-agent bekommen
  • Mit dem Server kann man dann über das textbasierte Assuan-Protokoll kommunizieren
  • Man kann gpg-agent daher auch unabhängig von OpenPGP und OpenSSH zur Verwaltung von Passphrasen für eigene Programme nutzen. Über die Konfigurationsdatei gpg-agent.conf wird u. a
  • festgelegt, über welchen Zeitraum eine Passphrase gecacht wird

Man kann nicht direkt abfragen, welche Einträge gpg-agent gerade speichert, aber man kann testen, ob ein konkreter Eintrag vorhanden ist (und sich den auch anzeigen lassen)

  • GnuPG legt die Passphrase eines Schlüssels unter dessen Fingerprint ab (ggf
  • dem des betroffenen Unterschlüssels):
> gpg-connect-agent "GET_PASSPHRASE --data --no-ask 4F7E9F723D197D667842AE115F048E6F0E4B4494 t1 t2 t3" /bye
D fubar
OK

Ebenso kann man eine Passphrase setzen, sodass sie nicht vom Anwender abgefragt werden muss (etwa bei automatisierten Prozessen)

  • Dafür gibt es sogar eine eigene Anwendung: gpg-preset-passphrase

Mit gpg-connect-agent kann man auch auf einfache Weise testen, ob gpg-agent überhaupt läuft (bzw. so läuft, dass es unmittelbar verwendet werden kann):

# gpg-connect-agent /bye
gpg-connect-agent: can't connect to the agent: IPC "connect" Aufruf fehlgeschlagen
Funktion
  • Das automatisch von GnuPG für die Eingabe und das Cachen von Passwörtern verwendet wird
  • Speichert das Passwort in einem Cache und fragt nur nach festlegbaren Zeitintervallen erneut danach

Installation

Wichtig ist außerdem, dass man noch ein Passworteingabeprogramm,z. B. pinentry-curses für die jeweilige Desktop-Umgebung benötigt

# apt install gnupg-agent pinentry-curses

Syntax

Optionen

Option Beschreibung
--daemon Normaler Aufruf, um den Dämon zu starten
--ignore-cache-for-signing Erzwingt eine erneute Passworteingabe, um andere Schlüssel zu signieren
--default-cache-ttl n Setzt die Zeit, wie lange ein Passwort im Cache bleibt, auf n Sekunden. Standard ist 600
--max-cache-ttl n Setzt die maximale Zeit, wie lange ein Passwort im Cache bleibt, auf n Sekunden. Standard ist 7200 (2 Stunden)
--pinentry-program filename Setzt explizit das Passworteingabeprogramm auf filename

Parameter

Umgebungsvariablen

Exit-Status

Anwendung

Fehlerbehebung

Konfiguration

Dateien

Anhang

Siehe auch


Sicherheit

Dokumentation

RFC
Man-Pages

Links

Projekt
Weblinks
  1. https://wiki.ubuntuusers.de/GPG-Agent/
  2. https://wiki.ubuntuusers.de/GnuPG/