Scroll to navigation

SYSTEMD-CREDS(1) systemd-creds SYSTEMD-CREDS(1)

BEZEICHNUNG

systemd-creds - Dienstezugangsberechtigungen auflisten, anzeigen, ver- und entschlüsseln

ÜBERSICHT

systemd-creds [OPTIONEN…]

BESCHREIBUNG

systemd-creds ist ein Werkzeug zum Auflisten, Anzeigen, Ver- und Entschlüsseln von Unit-Zugangsberechtigungen. Zugangsberechtigungen sind binäre oder textuelle Objekte beschränkter Größe, die an Unit-Prozesse übergeben werden können. Sie werden primär zur Übergabe kryptographischer Schlüssel (sowohl öffentliche als auch private) oder Zertifikate, Benutzerkonteninformationen oder Identitätsinformationen vom Rechner an Dienste verwandt.

Zugangsberechtigungen werden in Unit-Dateien über die Einstellungen LoadCredential=, SetCredential=, LoadCredentialEncrypted= und SetCredentialEncrypted= konfiguriert, siehe systemd.exec(5) für Details.

BEFEHLE

Die folgenden Befehle werden verstanden:

list

Zeigt eine Liste von Zugangsberechtigungen an, die im aktuellen Ausführungskontext übergeben wurden. Dieser Befehl zeigt die Dateien in dem durch die Umgebungsvariable $CREDENTIALS_DIRECTORY referenzierten Verzeichnis an und ist dazu gedacht, innerhalb des Dienstekontextes ausgeführt zu werden.

Zusammen mit jedem Zugangsberechtigungsnamen wird die Größe und der Sicherheitszustand angezeigt. Letzterer ist entweder »secure« (falls die Zugangsberechtigung sich in nicht-auslagerungsfähigem Speicher befindet, d.h. »ramfs«), »weak« (falls sie sich in anderen Arten von Speicher befindet) oder »insecure« (falls sie einen Zugriffsmodus hat, der nicht 0400 ist, d.h. von irgendjemand anders außer dem Eigentümer lesbar ist).

cat Zugangsberechtigung…

Zeigt den Inhalt der angegebenen Zugangsberechtigung, die im aktuellen Ausführungskontext übergeben wurde. Akzeptiert die Namen einer oder mehrerer Zugangsberechtigungen, deren Inhalte auf die Standardausgabe geschrieben werden.

Wird dies mit --json= oder --transcode= kombiniert, dann wird die Ausgabe auf einfache Art vor der Ausgabe umgewandelt.

setup

Erstellt einen Rechnerverschlüsselungsschlüssel für Zugangsberechtigungen, falls bisher noch keiner erstellt wurde. Dies stellt sicher, dass die Datei /var/lib/systemd/credential.secret mit einem zufälligen Geheimnis initialisiert wird, falls sie noch nicht existiert. Dieser geheime Schlüssel wird zum Ver-/Entschlüsseln von Zugangsberechtigungen mit encrypt oder decrypt verwandt und nur der Benutzer root hat Zugriff darauf. Beachten Sie, dass normalerweise keine Notwendigkeit besteht, diesen Befehl explizit aufzurufen, da er implizit aufgerufen wird, wenn encrypt aufgerufen und die Verschlüsselung der Zugangsberechtigung mit dem Rechnerschlüssel ausgewählt wird.

encrypt Eingabe|- Ausgabe|-

Lädt die angegebene (unverschlüsselte Klartext-)Eingabezugangsberechtigungsdatei, verschlüsselt sie und schreibt die (verschlüsselte Chiffretext-)Version in die angegebene Ausgabezugangsberechtigungsdatei. Die entstehende Datei kann in der Einstellung LoadCredentialEncrypted= in Unit-Dateien referenziert werden oder ihr Inhalt direkt in Einstellungen SetCredentialEncrypted= verwandt werden.

Akzeptiert zwei Dateisystempfade. Der Dateinamenanteil des Ausgabepfades wird als Name in die verschlüsselte Zugangsberechtigung eingebettet, um sicherzustellen, dass verschlüsselte Zugangsberechtigungen nicht umbenannt oder für andere Zwecke wiederverwendet werden, ohne dass das bemerkt wird. Der einzubettende Zugangsberechtigungsname kann mit der Einstellung --name= außer Kraft gesetzt werden. Die Eingabe- oder Ausgabepfade können als »-« angegeben werden, die Zugangsberechtigungsdaten werden dann aus der Standardeingabe gelesen bzw. in die Standardausgabe geschrieben. Falls der Ausgabepfad als »-« angegeben wurde, kann der Zugangsberechtigungsname nicht aus dem Dateisystempfad abgeleitet werden und sollte daher explizit mit dem Schalter --name= angegeben werden.

Die Zugangsberechtigungsdaten werden symmetrisch mit einem der folgenden Verschlüsselungsschlüssel verschlüsselt:

1.Einem geheimen Schlüssel, der aus dem TPM2-Chip des Systems abgeleitet wurde. Dieser Verschlüsselungsschlüssel wird nicht auf dem Rechnersystem gespeichert und die Entschlüsselung ist daher nur mit Zugriff auf den ursprünglichen TPM2-Chip möglich. Oder mit anderen Worten gesagt, eine auf diese Weise gesicherte Zugangsberechtigung kann nur auf der lokalen Maschine wieder entschlüsselt werden.

2.Ein in der Datei /var/lib/systemd/credential.secret gespeicherter geheimer Schlüssel, auf den nur der Benutzer root zugreifen kann. Dieser »Rechner«-Verschlüsselungsschlüssel wird im Dateisystem des Rechners gespeichert und daher ist die Entschlüsselung mit Zugriff auf das Dateisystem des Rechners und ausreichenden Privilegien möglich. Der Schlüssel wird bei Bedarf automatisch erstellt, kann aber auch explizit mit dem oben beschriebenen Befehl setup erstellt werden.

3.Eine Kombination der beiden vorstehenden: ein sowohl vom TPM2-Chip als auch dem Rechnerdateisystem abgeleiteter Schlüssel. Das bedeutet, dass die Entschlüsselung sowohl Zugriff auf den ursprünglichen TPM2-Chip als auch die Betriebssysteminstallation benötigt. Dies ist der Vorgabemodus für Aktionen, falls ein TPM2-Chip verfügbar ist und sich /var/lib/systemd/ auf einem dauerhaften Medium befindet.

Welcher der drei Schlüssel für Verschlüsselung verwandt werden soll, kann mit dem Schalter --with-key= konfiguriert werden. Abhängig vom Einsatzfall für die verschlüsselten Zugangsberechtigungen kann sich der Schlüssel unterscheiden. Für Zugangsberechtigungen, auf die während der anfänglichen RAM-Platte (Initrd) zugegriffen werden soll, ist die Verschlüsselung mit dem Rechnerschlüssel nicht geeignet, da von der Initrd typischerweise kein Zugriff auf den Rechnerschlüssel möglich ist. Daher sollte für solche Zugangsberechtigungen nur der TPM2-Schlüssel verwandt werden.

Verschlüsselte Zugangsberechtigungen sind immer Base64-kodiert.

Verwenden Sie decrypt (siehe unten), um die Verschlüsselungsaktion rückgängig zu machen und die entschlüsselte Klartextzugangsberechtigung aus der verschlüsselten Chiffretext-Zugangsberechtigung zu erhalten.

Die Zugangsberechtigungsdaten werden mittels AES256-GCM verschlüsselt, d.h. sowohl Vertraulichkeit als auch Integrität wird geschützt, mittels eines SHA256-Hashes als Schlüssel für einen oder beide der oben beschriebenen Schlüssel.

decrypt Eingabe|- [Ausgabe|-]

Macht den Effekt der Aktion encrypt rückgängig; lädt die angegebene (verschlüsselte Chriffre-)-Eingabedatei, entschlüsselt sie und schreibt die (entschlüsselte Klartext-)Version in die angegebene Ausgabe-Zugangsberechtigungsdatei.

Akzeptiert einen oder zwei Dateisystempfade. Der Dateinamenanteil des Eingabepfads wird mit dem in der verschlüsselten Datei eingebetteten Zugangsberechtigungsnamen verglichen. Falls diese nicht übereinstimmen, schlägt die Entschlüsselung fehl. Dies erfolgt, um sicherzustellen, dass verschlüsselte Zugangsberechtigungsdaten nicht für andere Zwecke umgewidmet werden, ohne dass dies erkannt wird. Der mit dem eingebetteten Zugangsberechtigungsnamen zu vergleichende Zugangsberechtigungsname kann mit dem Schalter --name= außer Kraft gesetzt werden. Falls der Eingabepfad als »-« angegeben wurde, wird die verschlüsselte Zugangsberechtigung von der Standardeingabe gelesen. Falls nur ein Pfad angegeben ist oder der Ausgabepfad als »-« angegeben wurde, wird die entschlüsselte Zugangsberechtigung auf die Standardausgabe geschrieben. In diesem Modus kann der eingebettete Name in der Zugangsberechtigung nicht aus dem Pfad abgeleitet werden und sollte explizit mit --name= angegeben werden.

Entschlüsseln von Zugangsberechtigungen benötigt Zugriff auf den ursprünglichen TPM2-Chipsatz und/oder den Zugangsberechtigungs-Rechnerschlüssel, siehe oben. Informationen darüber, welche Schlüssel benötigt werden, sind in den verschlüsselten Zugangsberechtigungsdaten eingebettet und die Entschlüsselung ist daher vollständig automatisiert.

-h, --help

Zeigt einen kurzen Hilfetext an und beendet das Programm.

--version

Zeigt eine kurze Versionszeichenkette an und beendet das Programm.

OPTIONEN

--system

Agiert auf den Zugangsberechtigungen für das System als Ganzes anstatt denen, die im aktuellen Ausführungskontext übergeben wurden, wenn dies zusammen mit den Befehlen list und cat angegeben wird. Dies ist in Container-Umgebungen nützlich, bei denen Zugangsberechtigungen von dem Container-Verwalter übergeben werden können.

--transcode=

Wandelt die Ausgabe für die Anzeige um, wenn dies zusammen mit den Befehlen cat oder decrypt angegeben wird. Akzeptiert entweder »base64«, »unbase64«, »hex« oder »unhex« als Argument, um die Zugangsdaten mit Base64 oder einer Reihe von hexadezimalen Werten zu (de)kodieren.

Beachten Sie, dass dies beim Befehl encrypt keine Auswirkung hat, da die verschlüsselten Zugangsberechtigungen bedingungslos in Base64 kodiert sind.

--newline=

Steuert, ob ein abschließendes Zeilenumbruchszeichen am Ende hinzugefügt wird, falls dies nicht bereits sowieso der Fall ist, wenn dies zusammen mit den Befehlen cat oder decrypt angegeben wird. Akzeptiert entweder »auto«, »yes« oder »no«. Der Vorgabemodus »auto« wird der Ausgabe nur ein einzelnes Zeilenumbruchzeichen anhängen, wenn die Zugangsberechtigungsdaten auf ein TTY geschrieben werden.

--pretty, -p

Steuert, ob die verschlüsselten Zugangsberechtigungen als Einstellung SetCredentialEncrypted= angezeigt werden sollen, die dann direkt in eine Unit-Datei kopiert werden kann, wenn dies zusammen mit dem Befehl encrypt angegeben wird.

--name=Name

Steuert den Namen der Zugangsberechtigung, der in die verschlüsselten Zugangsberechtigungsdaten eingebettet werden soll, wenn dies zusammen mit dem Befehl encrypt angegeben wird. Falls nicht angegeben, wird der Name automatisch aus der Dateinamenkomponente des angegebenen Ausgabepfades ausgewählt. Falls als leere Zeichenkette angegeben, wird kein Zugangsberechtigungsname in der verschlüsselten Zugangsberechtigung eingebettet und bei der Entschlüsselung der Zugangsberechtigung erfolgt keine Überprüfung des Zugangsberechtigungsnamens.

Steuert den Zugangsberechtigungsnamen, der zum Validieren des in der verschlüsselten Zugangsberechtigung eingebetteten Zugangsberechtigungsnamens verwandt werden soll, wenn dies zusammen mit dem Befehl decrypt angegeben wird. Falls nicht angegeben, wird der Name automatisch aus der Dateinamenkomponente des angegebenen Eingabepfades ausgewählt. Falls kein Zugangsberechtigungsname in der verschlüsselten Zugangsberechtigungsdatei eingebettet ist (d.h. beim Verschlüsseln wurde --name= mit einer leeren Zeichenkette verwandt), hat der angegebene Name keine Wirkung, da keine Validierung des Zugangsberechtigungsnamens erfolgt.

Einbetten des Zugangsberechtigungsnamens in der verschlüsselten Zugangsberechtigung erfolgt, um gegen die Wiederverwendung von Zugangsberechtigungen für andere als die ursprünglich geplanten Zwecke zu schützen, wobei angenommen wird, dass der Name der Zugangsberechtigung sorgfältig gewählt wird, um seinen geplanten Zweck zu kodieren.

--timestamp=Zeitstempel

Steuert den in die verschlüsselte Zugangsberechtigung einzubettenden Zeitstempel, wenn dies zusammen mit dem Befehl encrypt angegeben wird. Standardmäßig die aktuelle Zeit. Akzeptiert einen Zeitstempel in dem in systemd.time(5) beschriebenen Format.

Steuert den Zeitstempel, der zum Validieren des »not-after«-Zeitstempels verwandt werden soll, der mit --not-after= während der Verschlüsselung konfiguriert wurde, wenn dies zusammen mit dem Befehl decrypt angegeben wird. Falls nicht angegeben, ist die Vorgabe die aktuelle Systemzeit.

--not-after=Zeitstempel

Steuert die Zeit, ab der die Zugangsberechtigung nicht mehr verwandt werden soll, wenn dies zusammen mit dem Befehl encrypt angegeben wird. Dies bettet den angegebenen Zeitstempel in die verschlüsselten Zugangsberechtigungen ein. Während der Entschlüsselung wird der Zeitstempel gegen die aktuelle Systemzeit geprüft und falls der Zeitstempel in der Vergangenheit liegt, wird die Entschlüsselung fehlschlagen. Standardmäßig wird kein solcher Zeitstempel gesetzt. Akzeptiert einen Zeitstempel in dem in systemd.time(5) beschriebenen Format.

--with-key=, -H, -T

Steuert den zu verwendenden Verschlüsselungsschlüssel, wenn dies zusammen mit dem Befehl encrypt angegeben wird. Akzeptiert entweder »host«, »tpm2«, »host+tpm2« oder »auto«. Siehe oben für Details über die drei Schlüsseltypen. Falls auf »auto« gesetzt (die Vorgabe), wird der TPM2-Schlüssel verwandt, falls ein TPM2-Gerät gefunden und die Ausführung nicht in einem Container ist. Der Rechnerschlüssel wird verwandt, falls /var/lib/systemd/ auf einem dauerhaften Medium ist. Dies bedeutet, dass auf typischen Systemen die Verschlüsselung standardmäßig sowohl an den TPM2-Chip als auch die Betriebssysteminstallation gebunden ist und beide verfügbar sein müssen, um die Zugangsberechtigung wieder zu entschlüsseln. Falls »auto« ausgewählt ist und weder ein TPM2 verfügbar ist (oder die Ausführung in einem Container stattfindet) noch /var/lib/systemd/ auf dauerhaftem Medium vorhanden ist, wird die Verschlüsselung fehlschlagen.

Der Schalter -H ist eine Abkürzung für --with-key=host. Entsprechend ist -T eine Abkürzung für -with-key=tpm2.

Bei der Verschlüsselung von Zugangsberechtigungen, die in der anfänglichen RAM-Platte (Initrd) verwandt werden sollen, bei der /var/lib/systemd/ typischerweise nicht verfügbar ist, sollte sichergestellt werden, dass der Modus --with-key=tpm2 verwandt wird, um die Anbindung an das Rechnergeheimnis auszuschalten.

Dieser Schalter hat beim Befehl decrypt keine Auswirkung, da Informationen über den für die Entschlüsselung zu verwendenden Schlüssel bereits in der verschlüsselten Zugangsberechtigung enthalten sind.

--tpm2-device=PFAD

Steuert das zu verwendende TPM2-Gerät. Erwartet einen Geräteknotenpfad, der sich auf einen TPM2-Chip bezieht (z.B. /dev/tpmrm0). Alternativ kann der besondere Wert »auto« angegeben werden, um den Geräteknoten eines geeigneten TPM2-Gerätes automatisch zu bestimmen (von denen es genau einen geben darf). Der besondere Wert »list« kann zum Aufzählen aller derzeit ermittelten geeigneten TPM2-Geräte verwandt werden.

--tpm2-pcrs= [PCR…]

Konfiguriert die TPM2-PCRs (Plattformkonfigurationsregister), in die der Verschlüsselungsschlüssel gebunden werden soll. Akzeptiert eine durch »+« getrennte Liste von numerischen PCR-Indices im Bereich 0…23. Falls nicht benutzt, ist die Vorgabe nur PCR 7. Falls eine leere Liste angegeben ist, wird der Verschlüsselungsschlüssel an überhaupt kein PCR gebunden. Für Details über die verfügbaren PCRs siehe die Dokumentation des Schalters mit dem gleichen Namen in systemd-cryptenroll(1).

--no-pager

Leitet die Ausgabe nicht an ein Textanzeigeprogramm weiter.

--no-legend

Gibt die Legende nicht aus, d.h. die Spaltenköpfe und die Fußzeile mit Hinweisen.

--json=MODUS

Zeigt die Ausgabe als JSON formatiert. Erwartet entweder »short« (für die kürzest mögliche Ausgabe ohne unnötigen Leerraum oder Zeilenumbrüche), »pretty« (für eine schönere Version der gleichen Ausgabe, mit Einzügen und Zeilenumbrüchen) oder »off« (um die standardmäßig aktivierte JSON-Ausgabe auszuschalten).

EXIT-STATUS

Bei Erfolg wird 0 zurückgeliefert.

BEISPIELE

Beispiel 1. Verschlüsselt ein Passwort zur Verwendung als Zugangsberechtigung

Die folgende Befehlszeile verschlüsselt das angegebene Passwort »hunter2« und schreibt das Ergebnis in eine Datei password.cred.

# echo -n hunter2 | systemd-creds encrypt - password.cred

Dies entschlüsselt die Datei password.cred wieder und legt damit das eigentliche Passwort offen:

# systemd-creds decrypt password.cred
hunter2

Beispiel 2. Verschlüsselt ein Passwort und nimmt es in eine Unit-Datei auf

Die folgende Befehlszeile bittet den Benutzer um ein Passwort und erstellt daraus eine SetCredentialEncrypted=-Zeile für eine Zugangsberechtigung namens »mysql-password«, geeignet für die Aufnahme in eine Unit-Datei.

# systemd-ask-password -n | systemd-creds encrypt --name=mysql-password -p - -
🔐 Password: ****
SetCredentialEncrypted=mysql-password: \

k6iUCUh0RJCQyvL8k8q1UyAAAAABAAAADAAAABAAAAASfFsBoPLIm/dlDoGAAAAAAAAAA \
NAAAAAgAAAAAH4AILIOZ3w6rTzYsBy9G7liaCAd4i+Kpvs8mAgArzwuKxd0ABDjgSeO5k \
mKQc58zM94ZffyRmuNeX1lVHE+9e2YD87KfRFNoDLS7F3YmCb347gCiSk2an9egZ7Y0Xs \
700Kr6heqQswQEemNEc62k9RJnEl2q7SbcEYguegnPQUATgAIAAsAAAASACA/B90W7E+6 \
yAR9NgiIJvxr9bpElztwzB5lUJAxtMBHIgAQACCaSV9DradOZz4EvO/LSaRyRSq2Hj0ym \
gVJk/dVzE8Uxj8H3RbsT7rIBH02CIgm/Gv1ukSXO3DMHmVQkDG0wEciyageTfrVEer8z5 \
9cUQfM5ynSaV2UjeUWEHuz4fwDsXGLB9eELXLztzUU9nsAyLvs3ZRR+eEK/A==

Die erstellte Zeile kann 1:1 in eine Unit-Datei eingefügt werden und wird sicherstellen, dass das erlangte Passwort in der Zugangsberechtigungsdatei $CREDENTIALS_DIRECTORY/mysql-password für den gestarteten Dienst zur Verfügung gestellt wird.

Unter Verwendung der Unit-Datei-Ergänzungslogik kann dies zur sicheren Übergabe einer Passwort-Zugangsberechtigung an eine Unit verwandt werden. Eine ähnliche, umfassende Gruppe an Befehlen zum Einfügen eines Passworts in einen Dienst xyz.service:

# mkdir -p /etc/systemd/system/xyz.service.d
# systemd-ask-password -n | systemd-creds encrypt --name=mysql-password -p - - > /etc/systemd/system/xyz.service.d/50-password.conf
# systemctl daemon-reload
# systemctl restart xyz.service

SIEHE AUCH

systemd(1), systemd.exec(5)

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.

systemd 250