Scroll to navigation

KEYRINGS(7) Linux-Programmierhandbuch KEYRINGS(7)

BEZEICHNUNG

keyrings - Kernel-interne Schlüsselverwaltungs- und -beibehaltungseinrichtung

BESCHREIBUNG

Die Linux-Schlüsselverwaltungseinrichtung ist der primäre Zugang für verschiedene Kernelkomponenten, um Sicherheitsdaten, Authentifizierungsschlüssel, Verschlüsselungsschlüssel und andere Daten im Kernel beizubehalten oder zwischenzuspeichern.

Es werden Systemaufrufschnittstellen bereitgestellt, so dass Programme aus dem Anwendungsraum diese Objekte verwalten können und die Einrichtung auch für eigene Zwecke verwenden können; siehe add_key(2), request_key(2) und keyctl(2).

Eine Bibliothek und einige Hilfswerkzeuge im Benutzerraum werden bereitgestellt, um Zugriff auf die Einrichtung zu erlauben. Siehe keyctl(1), keyctl(3) und keyutils(7) für weitere Informationen.

Schlüssel

Ein Schlüssel hat die folgenden Attribute:

Dies ist ein eindeutiger, ganzzahliger Aufhänger, über den bei Systemaufrufen der Schlüssel referenziert wird. Die Seriennummer wird manchmal synonym als Schlüssel-ID bezeichnet. In Programmen wird die Seriennummer durch den Typ key_serial_t repräsentiert.
Ein Schlüsseltyp definiert, welche Arten an Daten im Schlüssel gehalten werden können, wie der vorgeschlagene Inhalt des Schlüssels ausgewertet und wie die Nutzlast verwandt wird.
Es gibt eine Reihe von universellen Typen, sowie einige spezialisierte Typen, definiert durch bestimmte Kernelkomponenten.
Die Schlüsselbeschreibung ist eine darstellbare Zeichenkette, die als Suchausdruck für den Schlüssel (im Zusammenspiel mit dem Schlüsseltyp) sowie als Anzeigename verwandt wird. Während des Suchens kann die Beschreibung teilweise oder exakt übereinstimmen.
Die Nutzlast ist der eigentliche Inhalt eines Schlüssels. Dieser wird normalerweise gesetzt, wenn ein Schlüssel erzeugt wird, aber es ist möglich, dass der Kernel im Benutzerraum anfragt, um die Instanziierung eines Schlüssels abzuschließen, falls der Schlüssel dem Kernel bei der Anfrage noch nicht bekannt war. Weitere Details finden Sie in request_key(2).
Die Nutzlast eines Schlüssel kann gelesen und aktualisiert werden, falls der Schlüsseltyp dies unterstützt und falls der Aufrufende ausreichende Berechtigungen erhalten hat.
Ähnlich wie bei Dateien hat jeder Schlüssel eine Eigentümer-Benutzerkennung, eine Eigentümer-Gruppenkennung und eine Sicherheitskennzeichnung. Jeder Schlüssel hat auch eine Gruppe an Berechtigungen, allerdings gibt es mehr als für eine normale UNIX-Datei, und es gibt die zusätzliche Kategorie »Besitzer« neben den gewöhnlichen Benutzer, Gruppe und andere (siehe Besitz weiter unten).
Beachten Sie, dass Schlüssel Kontingenten unterliegen, da sie nicht auslagerungsfähigen Kernelspeicher benötigen. Die Eigentümer-Benutzerkennung legt fest, auf wessen Kontingent dies läuft.
Jeder Schlüssel kann über eine Ablaufzeit verfügen. Wenn diese Zeit verstrichen ist, wird der Schlüssel als abgelaufen markiert und Zugriff darauf schlägt mit EKEYEXPIRED fehl. Falls er nicht gelöscht, aktualisiert oder ersetzt wird, wird der abgelaufene Schlüssel nach einer einstellbaren Zeit automatisch gelöscht (Speicherbereinigung), zusammen mit allen Verweisen darauf, und Zugriffe auf den Schlüssel schlagen mit dem Fehler ENOKEY fehl.
Jeder Schlüssel hat einen Referenzzähler. Schlüssel werden von Schlüsselbunden, von derzeit aktiven Benutzern und von Anmeldeberechtigungen von Prozessen referenziert. Wenn dieser Referenzzähler Null erreicht, dann wird der Schlüssel für die Speicherbereinigung eingeplant.

Schlüsseltypen

Der Kernel stellt mehrere gundlegende Schlüsseltypen bereit:

"keyring"
Schlüsselbunde sind besondere Schlüssel, die eine Gruppe von Verweisen auf andere Schlüssel (einschließlich anderer Schlüsselbunde) speichern, ähnlich wie ein Verzeichnis Verweise auf Dateien speichert. Der Hauptzweck eines Schlüsselbundes ist es, zu verhindern, dass andere Schlüssel aus dem Speicher bereinigt werden, weil nichts mehr sie referenziert.
Schlüsselbunde mit Beschreibungen (Namen), die mit einem Punkt (».«) beginnen, sind für die Implementierung reserviert.
"user"
Dies ist ein Allzweck-Schlüsseltyp. Der Schlüssel wird im Gesamten im Kernelspeicher gehalten. Die Nutzlast kann von Anwendungen im Benutzerraum gelesen und aktualisiert werden.
Die Nutzlast von Schlüsseln dieses Typs ist ein beliebiger Datenblock (blob) mit bis zu 32.767 byte.
Die Beschreibung kann eine beliebige gültige Zeichenkette sein. Es wird aber bevorzugt, dass sie mit einem Präfix startet, das durch einen Doppelpunkt abgetrennt wird, der den Dienst darstellt, für den der Schlüssel von Interesse ist (beispielsweise "afs:mykey").
"logon" (seit Linux 3.3)
Dieser Schlüsseltyp ist im wesentlichen der gleiche wie "user", er kann aber nicht gelesen werden (d.h. die Aktion KEYCTL_READ von keyctl(2)). Das bedeutet, dass die Schlüssel-Nutzlast im Anwendungsraum niemals sichtbar ist. Dies ist für Benutzername-Passwörter-Paare nützlich, die aus dem Anwendungsraum heraus nicht lesbar sein sollten.
Die Beschreibung eines "logon"-Schlüssels muss mit einem nicht leeren, Doppelpunkt-begrenzten Präfix beginnen, dessen Zweck darin besteht, den Dienst zu identifizieren, dem der Schlüssel gehört. (Beachten Sie, dass sich das von Schlüsseln des Typs "user" unterscheidet, bei denen die Aufnahme eines Präfix empfohlen, dies aber nicht erzwungen wird.)
"big_key" (seit Linux 3.13)
Dieser Schlüssel ist ähnlich zum Schlüsseltyp "user", kann aber eine Nutzlast von bis zu 1 MiB Größe enthalten. Dieser Schlüssel ist für Zwecke wie Kerberos-Ticket-Zwischenspeicher nützlich.
Die Nutzlastdaten können in einem tmpfs-Dateisystem statt im Kernelspeicher gespeichert werden, falls die Datengröße die Aufwandskosten des Speicherns der Daten im Dateisystem übersteigt. (Zum Speichern von Daten in einem Dateisystem muss der Kernel Dateisystemstrukturen im Kernel reservieren. Die Größe dieser Strukturen bestimmt den Schwellwert, über dem die Tmpfs-Speichermethode verwandt wird.) Seit Linux 4.8 werden die Nutzlastdaten beim Speichern im Tmpfs verschlüsselt, wodurch verhindert wird, dass sie in unverschlüsselten Auslagerungsspeicher geschrieben werden.

Es sind auch spezialisiertere Schlüsseltypen verfügbar, aber sie werden hier nicht beschrieben, da sie nicht für den normalen Anwendungsraum gedacht sind.

Schlüsselnamen, die mit einem Punkt (».«) beginnen, sind für die Implementierung reserviert.

Schlüsselbunde

Wie bereits erwähnt, sind Schlüsselbunde besondere Schlüsseltypen, die Verweise auf andere Schlüssel enthalten (wozu auch Schlüsselbunde gehören können). Schlüssel können mit mehreren Schlüsselbunden verbunden sein. Schlüsselbunde können als Analogon zu UNIX-Verzeichnissen betrachtet werden, bei denen jedes Verzeichnis eine Reihe von harten Verweisen auf Dateien enthält.

Auf Schlüsselbunde können verschiedene Aktionen (Systemaufrufe) durchgeführt werden:

Durch einen Systemaufruf, der Schlüssel erstellt, kann ein Schlüssel zu einem Schlüsselbund hinzugefügt werden. Dies verhindert, dass ein neuer Schlüssel sofort gelöscht wird, wenn der Systemaufruf seine letzte Referenz auf den Schlüssel freigibt.
Ein Verweis kann zu einem Schlüsselbund hinzugefügt werden, der auf einen Schlüssel zeigt, der bereits bekannt ist, vorausgesetzt, dies erzeugt keinen selbstreferenzierenden Zyklus.
Ein Verweis kann von einem Schlüsselbund entfernt werden. Wenn der letzte Verweis auf einen Schlüssel entfernt wurde, wird der Schlüssel zum Löschen durch die Speicherbereinigung eingeplant.
Alle Verweise können von einem Schlüsselbund entfernt werden.
Ein Schlüsselbund kann als Wurzel eines Baums oder Unterbaums betrachtet werden, bei dem Schlüsselbunde die Zweige und Nicht-Schlüsselbunde die Blätter darstellen. Dieser Baum kann nach einem Schlüssel durchsucht werden, der auf einen bestimmten Typ und Beschreibung passt.

Siehe keyctl_clear(3), keyctl_link(3), keyctl_search(3) und keyctl_unlink(3) für weitere Informationen.

Schlüsselverankerungen

Um zu verhindern, dass ein Schlüssel vom Speicher bereinigt wird, muss er verankert werden, um seinen Referenzzähler erhöht zu halten, wenn er vom Kernel nicht aktiv benutzt wird.

Schlüsselbunde werden verwandt, um andere Schlüssel zu verankern: jede Referenz ist eine Referenz auf einen Schlüssel. Beachten Sie, dass Schlüsselbunde selbst einfach nur Schlüssel sind und den gleichen Verankerungsanforderungen unterliegen, um zu verhindern, dass sie speicherbereinigt werden.

Der Kernel stellt eine Reihe von verankerten Schlüsselbunden bereit. Beachten Sie, das einige dieser Schlüsselbunde erst beim ersten Zugriff erstellt werden.

Prozesszugangsberechtigungen selbst referenzieren Schlüsselbunde mit spezieller Semantik. Diese Schlüsselbunde sind angeheftet, solange die Gruppe der Zugangsberechtigungen existiert. Dies ist normalerweise so lange, wie der Prozess existiert.
Es gibt drei Schlüsselbunde mit verschiedenen Vererbungs-/Mitbenutzungsregeln: session-keyring(7) (vererbt an und von allen Kindprozessen mitbenutzt), process-keyring(7) (vererbt von allen Threads in einem Prozess) und thread-keyring(7) (spezifisch für einen bestimmten Thread).
Als Alternative zur Verwendung der tatsächlichen Schlüsselbundkennung können die besonderen Schlüsselbundwerte KEY_SPEC_SESSION_KEYRING, KEY_SPEC_PROCESS_KEYRING und KEY_SPEC_THREAD_KEYRING in Aufrufen von add_key(2), keyctl(2) und request_key(2) verwandt werden, um auf die eigenen Instanzen des Aufrufenden von diesen Schlüsselbunden zu verweisen.
Jede dem Kernel bekannte UID hat einen Datensatz, der zwei Schlüsselbunde enthält: user-keyring(7) und user-session-keyring(7). Diese existieren solange wie der UID-Datensatz im Kernel existiert.
Als Alternative zur Verwendung der tatsächlichen Schlüsselbundkennungen können bei Aufrufen von add_key(2), keyctl(2) und request_key(2) die besonderen Schlüsselbundwerte KEY_SPEC_USER_KEYRING und KEY_SPEC_USER_SESSION_KEYRING verwandt werden, um auf die eigenen Instanzen des Aufrufenden von diesen Schlüsselbunden zu verweisen.
Durch pam_keyinit(8) wird ein Verweis auf den Benutzerschlüsselbund in einem neuen Sitzungsschlüsselbund abgelegt, wenn eine neue Anmeldesitzung begonnen wird.
Für jede dem System bekannte UID ist ein persistent-keyring(7) verfügbar. Er kann über den schon erwähnten UID-Datensatz hinaus bestehen bleiben, hat aber eine Ablaufzeit gesetzt, so dass er nach einer gesetzten Zeit automatisch bereinigt wird. Der dauerhafte Schlüsselbund erlaubt beispielsweise cron(8)-Skripten, Berechtigungsnachweise zu verwenden, die im dauerhaften Schlüsselbund verbleiben, nachdem sich der Benutzer abgemeldet hat.
Beachten Sie, dass die Ablaufzeit des dauerhaften Schlüsselbundes bei jeder Anfrage des dauerhaften Schlüssels zurückgesetzt wird.
Der Kernel besitzt besondere Schüsselbunde, die Schlüssel für besondere Zwecke verankern können. Ein Beispiel hiefür ist der Systemschlüsselbund, der für das Halten der Verschlüsselungsschlüssel für Modulsignaturüberprüfung verwandt wird.
Diese besonderen Schlüsselbunde sind normalerweise für die Bearbeitung aus dem Anwendungsraum nicht zugänglich.

Ein ursprünglich geplanter »Gruppenschlüsselbund«, zum Speichern von Schlüsseln, die jeder dem Kernel bekannten GID zugeordnet sind, ist bisher nicht implementiert und wird dies wahrscheinlich auch nicht. Trotzdem wurde die Konstante KEY_SPEC_GROUP_KEYRING für diesen Schlüsselbund definiert.

Besitz

Das Konzept des Besitzes ist zum Verständnis des Schlüsselbund-Sicherheitsmodells wichtig. Ob ein Thread einen Schlüssel besitzt, wird durch folgende Regeln bestimmt:

(1)
Jeder Schlüssel oder Schlüsselbund, der dem Aufrufenden keine Such-Berechtigung gewährt, wird in den folgenden Regeln ignoriert.
(2)
Ein Thread besitzt seinen session-keyring(7), process-keyring(7) und thread-keyring(7) direkt, da diese Schlüsselbunde von seinen Zugangsberechtigungen referenziert werden.
(3)
Falls ein Schlüsselbund besessen wird, dann werden auch alle darin verwiesenen Schlüssel besessen.
(4)
Falls ein Schlüssel, auf den ein Schlüsselbund verweist, selber wieder ein Schlüsselbund ist, dann gilt Regel (3) rekursiv.
(5)
Falls ein Prozess vom Kernel hochgerufen wurde, um einen Schlüssel zu instanziieren (siehe request_key(2)), dann besitzt er auch den Schlüsselbund des Anfragenden gemäß Regel (1), als ob er der Anfragende wäre.

Beachten Sie, dass Besitz keine fundamentale Eigenschaft eines Schlüssels ist, sondern jedesmal bei Bedarf neu berechnet werden muss.

Besitz wurde entwickelt, um es set-user-ID-Programmen zu ermöglichen, beispielsweise von einer Benutzer-Shell ausgeführt zu werden und auf die Schlüssel des Benutzers zuzugreifen. Indem Zugriff auf Schlüssel im Besitz erlaubt, aber Zugriff auf Basis des Schlüsseleigentümers und dessen Gruppe verweigert wird, ist es möglich, den Zugriff auf Schlüssel auf der Basis von Vergleichen von UID und GID zu vermeiden.

Wenn pam_keyinit(8) einen Sitzungsschlüssel erstellt, fügt es einen Verweis zu dem user-keyring(7) hinzu und damit gelangt der Benutzerschlüssel und alles was darin ist standardmäßig in den Besitz.

Zugriffsrechte

Jeder Schlüssel hat die folgenden sicherheitsbezogenen Attribute:

  • Die Eigentümer-Benutzerkennung.
  • Die Kennung der Gruppe, der Zugriff auf den Schlüssel erlaubt wird.
  • Eine Sicherheitskennzeichnung
  • Eine Berechtigungsmaske

Diese Berechtigungsmaske enthält vier Gruppen an Rechten. Die ersten drei Gruppen schließen sich gegenseitig aus. Genau eine wird für eine bestimmte Berechtigungsprüfung aktiv sein. In absteigender Priorität sind dies die Gruppen:

Benutzer
Diese Gruppe legt die Berechtigungen fest, die gewährt werden, wenn die Benutzerkennung des Schlüssels auf die Dateisystem-Benutzerkennung des Aufrufenden passt.
Diese Gruppe legt die Berechtigungen fest, die gewährt werden, wenn die Benutzerkennungen nicht übereinstimmten und die Schlüsselgruppenkennung auf die Dateisystem-GID des Aufrufenden oder eine der ergänzenden Gruppenkennungen des Aufrufenden passte.
Diese Gruppe legt die Berechtigungen fest, die gewährt werden, wenn weder die Benutzerkennung des Schlüssels noch die Gruppenkennung passt.

Die vierte Gruppe an Berechtigungen ist:

Diese Gruppe legt die Berechtigungen fest, die gewährt werden, wenn der Schlüssel vom Aufrufenden besessen wird.

Der vollständige Satz an Berechtigungen für einen Schlüssel ist die Vereinigung von der ersten passenden der drei Gruppen mit der vierten Gruppe, falls der Schlüssel besessen wird.

Die Gruppe an Rechten, die in jeder der vier Masken gewährt werden können, ist wie folgt:

Die Attribute des Schlüssels können gelesen werden. Dazu gehören der Typ, die Beschreibung und die Zugriffsrechte (ohne die Sicherheitskennzeichnung).
Für einen Schlüssel: Die Nutzlast des Schlüssels kann gelesen werden. Für einen Schlüsselbund: Die Liste der Seriennummern (Schlüssel), die mit dem Schlüsselbund verbunden sind, kann gelesen werden.
Die Nutzlast des Schlüssels kann aktualisiert werden und der Schlüssel kann zurückgezogen werden. Für einen Schlüsselbund können Verweise hinzugefügt oder entfernt werden und der Schlüsselbund kann komplett bereinigt werden (alle Verweise entfernt).
Suchen
Für einen Schlüssel (oder einen Schlüsselbund): Der Schlüssel kann in einer Suche gefunden werden. Für einen Schlüsselbund: Schlüssel und Schlüsselbunde, auf die verwiesen wird, können durchsucht werden.
Verweisen
Von Schlüsselbunden können Verweise auf Schlüssel erstellt werden. Der anfängliche Verweis auf einen Schlüssel, der bei der Schlüsselerstellung etabliert wird, benötigt diese Berechtigung nicht.
Die Details zum Eigentümer und der Sicherheitskennzeichnung können geändert werden, die Ablaufzeit des Schlüssels kann gesetzt werden und der Schlüssel kann zurückgezogen werden.

Zusätzlich zu den Zugriffsrechten kann jedes aktive Linux-Sicherheitsmodul (LSM) den Zugriff auf einen Schlüssel verhindern, falls die Richtlinie das vorgibt. Ein Schlüssel kann durch das LSM eine Sicherheitskennzeichnung oder andere Attribute erhalten; dieses Kennzeichen kann mit keyctl_get_security(3) ermittelt werden.

Siehe keyctl_chown(3), keyctl_describe(3), keyctl_get_security(3), keyctl_setperm(3) und selinux(8) für weitere Informationen.

Schlüssel suchen

Eine der zentralen Funktionalitäten der Schlüsselverwaltungseinrichtung von Linux ist die Fähigkeit, einen Schlüssel zu finden, den ein Prozess aufbewahrt. Der Systemaufruf request_key(2) ist der primäre Zugriffspunkt für Anwendungen aus dem Benutzerraum, um den Schlüssel zu finden. (Intern steht dem Kernel etwas ähnliches für interne Komponenten, die Schlüssel verwenden, zur Verfügung.)

Der Suchalgorithmus funktioniert wie folgt:

(1)
Die Prozessschlüsselbunde werden in der folgenden Reihenfolge durchsucht: der thread-keyring(7), falls er existiert, dann entweder der session-keyring(7), falls er existiert, oder user-session-keyring(7), falls dieser existiert.
(2)
Falls der Aufrufende ein Prozess war, der mittels des Hochruf-Mechanismus request_key(2) aktiviert wurde, dann werden die Schlüsselbunde der ursprünglichen Aufrufenden von request_key(2) auch durchsucht.
(3)
Das Durchsuchen eines Schlüsselbundbaums ist eine Breitensuche: jeder Schlüsselbund wird zuerst auf einen Treffer durchsucht, dann werden die Schlüsselbunde durchsucht, auf die der erste Schlüsselbund verweist.
(4)
Falls ein passender Schlüssel gefunden wird, der gültig ist, dann wird die Suche beendet und der Schlüssel zurückgeliefert.
(5)
Falls ein passender Schlüssel gefunden wird, an dem ein Fehlerzustand hängt, dann wird dieser Fehlerzustand notiert und mit der Suche fortgefahren.
(6)
Falls kein gültiger Schlüssel gefunden wird, dann wird der zuerst notierte Fehlerzustand zurückgeliefert; andernfalls wird der Fehler ENOKEY zurückgeliefert.

Es kann auch nach einem bestimmten Schlüsselbund gesucht werden, dann gelten nur die Schritte (3) bis (6).

Siehe request_key(2) und keyctl_search(3) für weitere Informationen.

Bedarfsgesteuerte Schlüsselerstellung

Falls ein Schlüssel nicht gefunden werden kann, wird request_key(2) einen neuen Schlüssel erzeugen, falls das Argument callout_info angegeben wurde, und dann in den Benutzerraum hochrufen, um den Schlüssel zu instanziieren. Damit ist es möglich, Schlüssel bedarfsgesteuert zu erstellen.

Typischerweise beteiligt dies den Kernel, der einen neuen Prozess erzeugt, der das Programm request-key(8) ausführt, das dann den geeigneten Handler basierend auf seiner Konfiguration ausführt.

Dem Handler wird ein besonderer Autorisierungsschlüssel übergeben, der es ihm und nur ihm erlaubt, den neuen Schlüssel zu instanziieren. Dies wird auch dazu verwandt, Suchen durch das Handler-Programm zu erlauben, die auch die Schlüsselbunde des Anfragenden durchsuchen.

Siehe request_key(2), keyctl_assume_authority(3), keyctl_instantiate(3), keyctl_negate(3), keyctl_reject(3), request-key(8) und request-key.conf(5) für weitere Informationen.

/proc-Dateien

Der Kernel stellt verschiedene /proc-Dateien bereit, die Informationen über Schlüssel offenlegen oder Beschränkungen für die Verwendung von Schlüsseln definieren.

/proc/keys (seit Linux 2.6.10)
Diese Datei legt eine Liste von Schlüsseln offen, für die der lesende Thread die Betrachten-Berechtigung hat und stellt verschiedene Informationen über jeden Schlüssel bereit. Der Thread muss den Schlüssel nicht besitzen, damit er in dieser Datei sichtbar ist.
Die einzigen in dieser Liste aufgenommenen Schlüssel sind diejenigen, die dem lesenden Prozess die Betrachten-Berechtigung gewähren (unabhängig davon, ob er sie besitzt oder nicht). LSM-Sicherheitsüberprüfungen werden weiterhin durchgeführt und könnten weitere Schlüssel herausfiltern, für die dem Prozess die Autorisierung zur Betrachtung fehlt.
Nachfolgend ein Beispiel für die Daten, die Sie in der Datei sehen können (wobei die Spalten für einfachere Bezüge nachfolgend nummeriert sind):

(1) (2) (3)(4) (5) (6) (7) (8) (9) 009a2028 I--Q--- 1 perm 3f010000 1000 1000 user krb_ccache:primary: 12 1806c4ba I--Q--- 1 perm 3f010000 1000 1000 keyring _pid: 2 25d3a08f I--Q--- 1 perm 1f3f0000 1000 65534 keyring _uid_ses.1000: 1 28576bd8 I--Q--- 3 perm 3f010000 1000 1000 keyring _krb: 1 2c546d21 I--Q--- 190 perm 3f030000 1000 1000 keyring _ses: 2 30a4e0be I------ 4 2d 1f030000 1000 65534 keyring _persistent.1000: 1 32100fab I--Q--- 4 perm 1f3f0000 1000 65534 keyring _uid.1000: 2 32a387ea I--Q--- 1 perm 3f010000 1000 1000 keyring _pid: 2 3ce56aea I--Q--- 5 perm 3f030000 1000 1000 keyring _ses: 1
Die in jeder Zeile dieser Datei gezeigten Felder sind wie folgt:
Die Kennung (Seriennummer) des Schlüssels, hexadezimal dargestellt.
Eine Gruppe von Schaltern, die den Status des Schlüssels beschreiben:
Der Schlüssel wurde instanziiert.
Der Schlüssel wurde zurückgezogen.
Der Schlüssel ist tot (d.h. die Registrierung des Schlüsseltyps wurde aufgehoben). (Während der Speicherbereinigung kann ein Schlüssel kurzfristig in diesem Zustand sein).
Der Schlüssel wird für das Benutzerkontingent berücksichtigt.
Der Schlüssel wird derzeit über einen Rückruf zum Anwendungsraum konstruiert; siehe request-key(2).
Der Schlüssel wird negativ instanziiert.
Der Schlüssel wurde entwertet.
Dies ist die Anzahl der Kernelzugangsberechtigungsstrukturen, die den Schlüssel anheften (ungefähr: die Anzahl der Threads und offenen Dateireferenzen, die sich auf diesen Schlüssel beziehen).
Die Zeitdauer, bis der Schlüssel ablaufen wird, ausgedrückt in menschenlesbarer Form (Wochen, Tage, Stunden, Minuten und Sekunden). Die Zeichenkette perm bedeutet hier, dass der Schlüssel permanent ist (keine Zeitüberschreitung). Die Zeichenkette expd bedeutet, dass der Schlüssel bereits abgelaufen ist, aber die Speicherbereinigung noch nicht erfolgte.
Die Schlüsselberechtigungen, ausgedrückt in vier hexadezimalen Bytes, die von links nach rechts den Besitzer, den Benutzer, die Gruppe und andere Berechtigungen enthalten. Innerhalb jedes Bytes sind die Berechtigungsbits wie folgt:
0x01
Betrachten
Lesen
0x04
Schreiben
0x08
Suchen
0x10
Verweisen
0x20
Attributsetzen
Die Benutzerkennung des Schlüsseleigentümers.
Die Gruppenkennung des Schlüssels. Hier bedeutet der Wert -1, dass der Schlüssel keine Gruppenkennung hat. Dies kann unter bestimmten Umständen bei vom Kernel erstellten Schlüsseln auftreten.
Typ (8)
Der Schlüsseltyp (Benutzer, Schlüsselbund, usw.)
Die Schlüsselbeschreibung (Name). Dieses Feld enthält eine beschreibende Information über den Schlüssel. Für die meisten Schlüsseltypen hat es die folgende Form:

Name[: Extra-Info]
Das Unterfeld Name ist die Schlüsselbeschreibung (der Name). Das optionale Feld Extra-Info stellt einige weitere Informationen über den Schlüssel bereit. Die hier auftauchende Information hängt vom Schlüsseltyp wie folgt ab:
"user" und "logon"
Die Größe in Byte der Schlüsselnutzlast (dezimal dargestellt).
"keyring"
Die Anzahl der Schlüssel, auf die vom Schlüsselbund verwiesen wird, oder die Zeichenkette empty, falls es keine Schlüssel gibt, auf die vom Schlüsselbund verwiesen wird.
"big_key"
Die Nutzlastgröße in Byte, gefolgt entweder von der Zeichenkette [file], falls die Schlüsselnutzlast den Schwellwert übersteigt, was bedeutet, dass die Nutzlast in einem (auslagerungsfähigen) tmpfs(5)-Dateisystem gespeichert ist, oder der Zeichenkette [buff], die anzeigt, dass der Schlüssel klein genug ist, um sich im Kernelspeicher zu befinden.
Für den Schlüsseltyp ".request_key_auth" (Autorisierungsschlüssel, siehe request_key(2)) hat das Beschreibungsfeld die im folgenden Beispiel gezeigte Form:

key:c9a9b19 pid:28880 ci:10
Die drei Unterfelder sind wie folgt definiert:
Die hexadezimale Kennung des Schlüssels, der im anfragenden Programm instanziiert wird.
Die PID (Prozesskennung) des anfragenden Programms.
Die Länge der Abrufdaten, mit denen der angefragte Schlüssel instanziiert werden soll (d.h. die Länge der Nutzlast, die dem Autorisierungsschlüssel zugeordnet ist).
/proc/key-users (seit Linux 2.6.10)
Diese Datei listet verschiedene Informationen über jede Benutzerkennung auf, die im System mindestens einen Schlüssel hat. Beispielsweise könnten Sie in dieser Datei Folgendes sehen:


0: 10 9/9 2/1000000 22/25000000
42: 9 9/9 8/200 106/20000 1000: 11 11/11 10/200 271/20000

Die Bedeutung der Felder in jeder Zeile im Einzelnen:
Die Benutzerkennung.
Dies ist ein kernelinterner Verwendungszähler für die Kernelstruktur, die zur Aufzeichnung der Schlüsselbenutzer verwandt wird.
Die Gesamtanzahl der von diesem Benutzer besessenen Schlüssel und die Anzahl dieser Schlüssel, die instanziiert wurden.
Die Anzahl der Schlüssel, die dieser Benutzer besitzt und die maximale Anzahl der Schlüssel, die der Benutzer besitzen kann.
Die Anzahl an Bytes, die in Nutzlasten von Schlüsseln, die im Besitz dieses Benutzers sind, konsumiert wurden und die obere Grenze der Anzahl an Bytes, die in Schlüsselnutzlasten für diesen Benutzer möglich sind.
/proc/sys/kernel/keys/gc_delay (seit Linux 2.6.32)
Der Wert in dieser Datei legt das Intervall in Sekunden fest, nachdem zurückgezogene und abgelaufene Schlüssel der Speicherbereinigung unterliegen. Der Zweck für ein solches Intervall besteht darin, dass es ein Zeitfenster gibt, in dem der Anwendungsraum einen Fehler sehen kann (EKEYREVOKED bzw. EKEYEXPIRED), der anzeigt, was mit dem Schlüssel passierte.
Der Vorgabewert in dieser Datei ist 300 (d.h. 5 Minuten).
/proc/sys/kernel/keys/persistent_keyring_expiry (seit Linux 3.13)
Diese Datei definiert ein Intervall in Sekunden, auf das die Ablauf-Zeitüberschreitung bei jedem Zugriff auf den dauerhaften Schlüsselbund zurückgesetzt wird (mittels keyctl_get_persistent(3) oder der Aktion KEYCTL_GET_PERSISTENT von keyctl(2)).
Der Vorgabewert in dieser Datei ist 259200 (d.h. 3 Tage).

Die folgenden Dateien (die von privilegierten Prozessen schreibbar sind) werden zur Durchsetzung von Kontingenten zur Anzahl der Schlüssel und der Anzahl an Daten-Bytes, die in der Schlüsselnutzlast gespeichert werden können, verwandt:

/proc/sys/kernel/keys/maxbytes (seit Linux 2.6.26)
Dies ist die maximale Anzahl an Daten-Bytes, die ein von Root verschiedener Benutzer in Nutzlasten in Schlüsseln, die ihm gehören, halten kann.
Der Vorgabewert in dieser Datei ist 20.000.
/proc/sys/kernel/keys/maxkeys (seit Linux 2.6.26)
Dies ist die maximale Anzahl an Schlüsseln, die ein von root verschiedener Benutzer besitzen kann.
Der Vorgabewert in dieser Datei ist 200.
/proc/sys/kernel/keys/root_maxbytes (seit Linux 2.6.26)
Dies ist die maximale Anzahl an Daten-Bytes, die der Benutzer root (UID 0 in dem Wurzelbenutzernamensraum) in der Nutzlast der Schlüssel, die root gehören, halten kann.
Der Vorgabewert in dieser Datei ist 25.000.000 (20.000 vor Linux 3.17).
/proc/sys/kernel/keys/root_maxkeys (seit Linux 2.6.26)
Dies ist die maximale Anzahl von Schlüsseln, die der Benutzer root (UID 0 in dem Wurzelbenutzernamensraum) besitzen kann.
Der Vorgabewert in dieser Datei ist 1.000.000 (200 vor Linux 3.17).

Beachten Sie, dass in Bezug auf Schlüsselbunde jeder Verweis 4 byte der Schlüsselbundnutzlast verbraucht.

Benutzer

Die Schlüsselverwaltungseinrichtung von Linux hat eine Reihe von Benutzern und Verwendungen, aber sie ist nicht auf die bereits existierenden beschränkt.

Kernelinterne Benutzer dieser Einrichtung sind unter anderem:

Der Kernel verwendet den durch die Schlüssel bereitgestellten Hochruf-Mechanismus, um im Benutzerraum hochzurufen, DNS-Nachschlagen durchzuführen und die Ergebnisse zwischenzuspeichern.
Das Netzwerkprotokoll AF_RXRPC und das kernelinterne AFS-Dateisystem verwenden Schlüssel, um die benötigten Tickets für gesicherten oder verschlüsselten Datenverkehr zu speichern. Diese werden dann bei Netzwerkaktionen für AF_RXRPC- und Dateisystem-Aktionen bei kAFS nachgeschlagen.
Das NFS-Dateisystem verwendet Schlüssel, um Abbildungen von fremden Benutzerkennungen auf lokale Benutzerkennungen zu speichern.
Das CIFS-Dateisystem verwendet Schlüssel, um Passwörter für den Zugriff auf ferne Laufwerksfreigaben zu speichern.
Der Kernel-Bauprozess kann Module kryptographisch signieren. Diese Signatur wird beim Laden des Moduls überprüft.

Anwendungsraum-Benutzer dieser Einrichtung sind unter anderem:

Die MIT-Kerberos-5-Einrichtung (libkrb5) kann Schlüssel verwenden, um Authentifizierungs-Merkmale zu speichern, die dann so eingerichtet werden können, dass sie nach einer bestimmten Zeit nach der letzten Verwendung automatisch bereinigt werden, aber bis dahin vorhanden sein können, nachdem der Benutzer sich abgemeldet hat, so dass cron(8)-Skripte sie verwenden können.

SIEHE AUCH

keyctl(1), add_key(2), keyctl(2), request_key(2), keyctl(3), keyutils(7), persistent-keyring(7), process-keyring(7), session-keyring(7), thread-keyring(7), user-keyring(7), user-session-keyring(7), pam_keyinit(8), request-key(8)

Die Kernel-Quelldateien Documentation/crypto/asymmetric-keys.txt und unter Documentation/security/keys (oder in der Datei Documentation/security/keys.txt vor Linux 4.13).

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können, sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

Ü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.

13. August 2020 Linux