Sie befinden sich hier: start » de » Interne Dokumentation » DokuWiki-Erweiterungen (WvdS) » WvdS Vault

WvdS Vault

Vault ist der eine Ort für die Betreibergeheimnisse der Paketfamilie: verschlüsselt abgelegt, mit Ablaufdatum, Übergabe-Rotation und einem Zugriffsprotokoll. Ohne ihn liegen Zugangsdaten an so vielen Stellen, wie es Pakete gibt. Gedacht ist das Paket für Verwalter, die Geheimnisse eintragen, wechseln und deren Verwendung nachweisen müssen.

Erste Schritte

Häufige Aufgaben

Was Sie wollen Für wen Wo Sie das tun Anleitung
ein Geheimnis eintragen oder ändern Verwaltung Administration > Tresor Fünf Schemata
ein Geheimnis planmäßig wechseln Verwaltung Administration > Tresor Rotation
die Schlüsselquelle wechseln Verwaltung Die Schlüsselquelle wechseln
nachweisen, wer wann zugegriffen hat Verwaltung Administration > Tresor Das Zugriffsprotokoll
den zweiten Faktor vor dem Zugriff verstehen Verwaltung Zweiter Faktor
wissen, was der Tresor nicht leistet Verwaltung Was der Tresor nicht leistet

Zweck

Ein Ort für die Betreibergeheimnisse der Suite: verschlüsselt abgelegt, mit Ablaufdatum, Übergabe-Rotation und einem Zugriffsprotokoll. Ohne ihn liegen Zugangsdaten an so vielen Stellen, wie es Plugins gibt, in so vielen Formen, wie ihre Autoren erfunden haben — und mindestens eine davon ist Klartext in conf/local.php.

Angemeldeter Dienst (siehe Core Plugin): vault.secrets. Die Einträge liegen über Storage Plugin in data/dwdo/.

Es fehlt kein Verschlüsselungsverfahren — es fehlte ein Ort. Das ist die Aufgabe dieses Plugins, und daraus folgt die Grenze im nächsten Abschnitt.

Was der Tresor ausdrücklich nicht leistet

Die Grenze steht vorn, weil sie bei einem Tresor die wichtigste Auskunft ist.

Mit der voreingestellten Schlüsselquelle salt wird der Hauptschlüssel aus dem Instanz-Salt des Wikis abgeleitet. Dieses Salt liegt unter data/meta/ — demselben Zweig wie die Tresordatenbank unter data/dwdo/.

Nachgemessen, nicht angenommen: eine gewöhnliche Sicherung von data/ enthält Schlüssel und Chiffrat zusammen. Wer dieses Archiv hält, erreicht die Geheimnisse. Dagegen schützt dieses Plugin nicht.

Wogegen es schützt, ist alles diesseits davon: eine ausgeplauderte Seite, ein zu weit gefasster Dateizugriff, ein Plugin, das seine eigene Konfiguration protokolliert, eine Datenbank, die einem Entwickler ausgehändigt wird.

Diese Klasse lässt sich vollständig verlassen, indem eine andere Schlüsselquelle gewählt wird — siehe Konfiguration. env und file legen den Schlüssel außerhalb von data/ und damit außerhalb der Wiki-Sicherung.


Fünf Schemata, eine Entscheidung des Betreibers

Ein Plugin, das ein Kennwort braucht, bekommt keinen Wert, sondern einen Verweis. Welche Quelle eine Installation benutzt, entscheidet damit der Betreiber und nicht der Autor jedes einzelnen Plugins.

Verweis Bedeutung
vault:{kennung} Eintrag aus diesem Tresor
env:{name} Umgebungsvariable
file:{pfad} Datei unterhalb des in file_root konfigurierten Verzeichnisses
enc:… unmittelbar verschlüsselt abgelegter Wert
plain:… Klartext, ausdrücklich als solcher gekennzeichnet

Aufgelöst wird aus einem eigenen Plugin heraus über SecretRef; das Ergebnis unterscheidet zwei Fälle, die nicht zusammengeworfen werden dürfen:

Ergebnis Bedeutung
null es war nichts konfiguriert
SecretRefException es war etwas konfiguriert und konnte nicht eingelöst werden
Das sind verschiedene Probleme. „Kein Kennwort hinterlegt„ ist ein Einrichtungsschritt, der noch fehlt; „Verweis nicht einlösbar“ ist ein Fehler in einer bestehenden Einrichtung. Eine Meldung, die beides gleich behandelt, schickt den Betreiber in die falsche Richtung.

Konfiguration

Einstellung Vorgabe Bedeutung
keysource salt Herkunft des Hauptschlüssels: salt, env oder file
keysource_ref leer Variablenname für env, Dateipfad für file; bei salt ohne Wirkung
file_root leer Wurzelverzeichnis, in dem file:-Verweise bleiben müssen. Leer schaltet das Schema ganz ab
log_page_size 100 Zeilen je Seite im Zugriffsprotokoll
log_keep_days 365 Alter, ab dem Zugriffssätze verfallen; 0 behält sie dauerhaft
file_root ist leer voreingestellt und damit ausfallsicher geschlossen. Ein Verweis ist vom Betreiber gelieferte Konfiguration; ohne eine Wurzel, die ihn einsperrt, wäre file: ein Werkzeug zum Lesen beliebiger Dateien im Gewand eines Geheimnisses.
salt ist die Vorgabe, weil es keine Einrichtung braucht — und die schwächste der drei Möglichkeiten. env und file sind beide auf eine andere Maschine und ein anderes Betriebssystem kopierbar. Genau diese Anforderung schließt maschinengebundene Speicher (DPAPI, TPM, Schlüsselbund) aus: ein Tresor, dessen Schlüssel den Rechner nicht verlassen kann, ist nach einem Rechnerausfall unwiederbringlich — Sicherung vorhanden und unlesbar.

Die Schlüsselquelle wechseln

Der Wechsel ist unterstützt und für sich genommen gefahrlos: jeder Wert trägt einen Fingerabdruck des Schlüssels, unter dem er verschlüsselt wurde, niemals den Schlüssel selbst. Bestehende Einträge entschlüsseln deshalb weiter, neue Schreibvorgänge benutzen die neue Quelle.

Die Reihenfolge ist verbindlich:

  1. Einstellung ändern.
  2. Neuverschlüsselung auf dem Verwaltungsbildschirm ausführen.
  3. Erst danach das alte Schlüsselmaterial entfernen.

Der Bildschirm meldet über keyUsage(), wie viele Einträge noch unter dem alten Fingerabdruck liegen. Das sind genau die, die beim vorzeitigen Entfernen unlesbar würden.


Rotation: zwei Fächer, vier Schritte

Ein Eintrag hat zwei Fächer. Ein neuer Wert wird zunächst bereitgelegt und schaltet dabei nichts um; erst das Übernehmen macht ihn zum gültigen Wert.

  • stage() — neuen Wert bereitlegen, der laufende Betrieb benutzt weiter den alten
  • promote() — den bereitgelegten Wert zum gültigen machen
Die Reihenfolge lautet bereitlegen → prüfen → übernehmen → beim Anbieter widerrufen. Jede andere Reihenfolge hat ein Zeitfenster, in dem die Antwort falsch ist.

Das Zugriffsprotokoll

Je Lesen, Schreiben und Übernehmen eine Zeile mit Handelndem, Eintrag, Vorgang und Ergebnis — und nie ein Wert. Das ist der Unterschied zwischen einem Tresor und einer verschlüsselten Datei.

Der Dienst vault.secrets gibt ausschließlich Lesen heraus (read(), has()) und bindet den Handelnden. Ein Plugin, das ein Kennwort braucht, kann damit weder eines rotieren noch ein Lesen jemand anderem zuschreiben.

Aufgeräumt wird über die Aufgabenausführung des Indexers, also bei gewöhnlichen Seitenaufrufen. Auf einem Wiki ohne Verkehr bleiben die Sätze deshalb schlicht stehen.


Zweiter Faktor vor jedem Zugriff auf Geheimnismaterial

Über den Identity Plugin Contract v1 (Vertragsbeschreibung) abgesichert: eine Brücke do=wkvault_stepup mit fest verdrahteter Kategorienliste.

Kategorie Gilt für
create Einen Eintrag anlegen
rotate Einen Wert bereitlegen
delete Einen Eintrag löschen
rekey Die Schlüsselquelle wechseln und alles umschlüsseln

Geprüft wird doppelt — lesend beim Zeichnen des Bildschirms und erneut beim Absenden —, und in beiden Fällen zusätzlich zur DokuWiki-Zugriffsliste, nie an ihrer Stelle. Ohne wkidentity verhält sich das Paket unverändert.

Die Brücke nimmt nie eine vom Aufrufer gelieferte Anforderung entgegen, nur einen Namen aus ihrer eigenen Liste; ein unbekannter Name ergibt eine Ablehnung, nie „keine Anforderung„.

Seit dem 9. August 2026 trägt „Löschen“ auch den Gefahr-Rang. Vorher stand die zerstörendste Aktion des Pakets auf einem Knopfrang, den kein Stilblatt definiert — sie war damit ungestaltet und trug kein optisches Signal, direkt neben einem hervorgehobenen „Übernehmen„. Eine fehlende Auszeichnung sieht aus wie eine Entscheidung, und das war sie nicht.

Voraussetzungen

  • PHP 8.2 oder neuer.
  • Core Plugin für die Dienstregistrierung und Storage Plugin für die Einträge — beide erforderlich, nicht wahlweise.
  • Administratorrechte für den Verwaltungsbildschirm.

Das Schema legt zwei Tabellen an, „vault.secret“ und „vault.zugriff“, jeweils idempotent. Der Punkt gehört zum Namen und trennt das Modul ab, seit alle Module ihre Tabellen in einer gemeinsamen Datenbank halten; er muss in SQL immer in Anführungszeichen stehen, weil SQLite ihn sonst als Datenbanktrenner liest und die Tabelle nicht findet.


Grenzen

  • Die voreingestellte Schlüsselquelle teilt sich die Sicherung mit den Daten — siehe oben.
  • Ein abgelaufenes Geheimnis wird weiterhin ausgeliefert. Der Ablauf ist eine Aufforderung, keine Sicherung: an einem Stichtag die Auslieferung zu verweigern legte Mailversand, Datenbanken und Repository-Zugang gleichzeitig still, und zwar aus einem verwaltungstechnischen Grund.
  • Bereitlegen schaltet nichts um. Nur das Übernehmen tut das. Das ist die Bauform, kein Mangel.
  • Der Tresor kann beim Anbieter nichts widerrufen. Eine Rotation abzuschließen, indem die alte Zugangsberechtigung ungültig gemacht wird, bleibt Aufgabe des Betreibers.
  • Verlorenes Schlüsselmaterial heißt verlorene Werte. Einen Wiederherstellungsweg gibt es bauartbedingt nicht.
  • Das Aufräumen hängt am Indexer des Wikis.

Paketangaben

Plugin: wkvault
Namespace: lib/plugins/wkvault/
Autor: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs)
Lizenz: GPL 2

de/wiki/dwe/wkvault/start.txt · Zuletzt geändert: von 0.0.0.0