Das verschlüsselte Verzeichnis für Zugangsdaten
Wo Passwörter liegen, wie sie in ein Formular gelangen, ohne durch Ihre Shell zu gehen, und der Fehler, der sie im Klartext schreibt.
Ihre Zugangsdaten liegen in einem verschlüsselten Verzeichnis, das Sie
einhängen, einem gocryptfs-Volume. Darin stehen sie in einfachen
JSON-Dateien, lesbar nur, solange das Volume eingehängt ist. Dinoer liest sie
im Prozess, der den Browser steuert, in dem Moment, in dem ein Feld
ausgefüllt wird. Der Wert geht nie durch Ihre Shell, Ihren Befehlsverlauf oder
Dinoers Protokolle.
Anlegen, dann einhängen
Bei einer Installation per Git-Klon legt das Einrichtungsskript den
verschlüsselten Speicher und einen leeren Einhängepunkt an, unter den Pfaden,
die secrets_crypt_dir und secrets_dir in dinoer.conf festlegen.
--sans-chiffrement legt stattdessen ein unverschlüsseltes Verzeichnis an
(Modus 700), für einen Rechner ohne gocryptfs:
bash scripts/configurer-repertoire-chiffre.sh # im Klon
Das .deb-Paket liefert dieses Skript nicht mit: Legen Sie das
gocryptfs-Volume selbst an und tragen Sie seinen Einhängepunkt in
secrets_dir ein. Danach hängen Sie es, auf beiden Wegen, vor einem Lauf ein,
der es braucht:
dinoer-monter-secrets # .deb-Paket
bash /opt/dinoer/scripts/monter-repertoire-chiffre.sh # Git-Klon
Solange das Volume nicht eingehängt ist, ist auf der Festplatte nichts lesbar.
Zugangsdaten hineinlegen
Eine JSON-Datei pro Website, benannt nach ihrer Domain (target.local.json,
oder target.local_8443.json für einen bestimmten Port), an beliebiger Stelle
unter dem eingehängten Verzeichnis:
{
"username": "operator",
"password": "…",
"totp_cle": "BASE32SEED",
"ntfy_topic": "…",
"origines_autorisees": ["target.local"]
}
Nur die Schlüssel, die Ihre Szenarien verwenden, müssen vorhanden sein.
totp_cle ist der Base32-Schlüssel für Zwei-Faktor-Codes; ntfy_topic ist
der Kanal, über den ein Code, den Sie erhalten, weitergegeben werden kann. Ohne
--secrets wählt Dinoer die Datei nach der Domain der tatsächlich geladenen
Seite: Eine Weiterleitung auf eine andere Website findet keine Zugangsdaten.
Mit --secrets wird die Datei ausdrücklich benannt: Sie muss dann in
origines_autorisees die Domains aufführen, auf denen sie verwendet werden
darf, und nur für ihren Besitzer lesbar sein (chmod 600), sonst lehnt Dinoer
sie ab.
In einem Szenario verwenden
{"type": "remplir", "selecteur": "input[name=\"username\"]",
"valeur": "depuis_secrets", "secret_cle": "username"},
{"type": "remplir", "selecteur": "input[name=\"password\"]",
"valeur": "depuis_secrets", "secret_cle": "password"}
secret_cle ist der Schlüssel in der Datei. Das Szenario nennt einen
Schlüssel, nie ein Geheimnis, und kann deshalb in einem öffentlichen
Repository liegen, ohne dass etwas geschwärzt werden muss.
Tun Sie das nie
PASS=$(jq -r ‘.password’ ~/Vaults/…/creds.json): Zugangsdaten in
einer Shell-Variablen stehen in der Umgebung Ihres Prozesses, in
/proc und womöglich in Ihrem Verlauf. Genau das soll das
verschlüsselte Verzeichnis verhindern.
Ein Verzeichnis pro Projekt
Zwei Wege, für einen einmaligen Lauf oder als Gewohnheit.
# Einmalig
DINOER_SECRETS_DIR=~/Vaults/MyProject /opt/dinoer/venv/bin/python3 /opt/dinoer/shot.py \
--url … --guide-version 1.6
# Dauerhaft: eine Konfigurationsdatei im Stammverzeichnis des Projekts
echo '{"secrets_dir": "../MyProject-secrets"}' > ~/git/MyProject/.dinoer.conf
export DINOER_CONF=~/git/MyProject/.dinoer.conf
Ein relatives secrets_dir wird vom Ort der Konfigurationsdatei aus
aufgelöst; die Einstellung wandert also mit dem Projekt.
--secrets <Datei> benennt eine Datei mit Zugangsdaten für einen einzigen
Lauf, ohne die Konfiguration zu ändern, etwa wenn dasselbe Szenario mehreren
Konten dient.
Wenn das Verzeichnis geschlossen ist
Dinoer hält mit einem klaren Fehler an:
SecretsFermesError — exit code 42 (encrypted directory not mounted)
SecretsNonConfigureError — exit code 43 (no credential directory configured)
Wenn Sie ein Agent sind: Versuchen Sie nicht, es selbst einzuhängen. Fragen Sie den Betreiber.
Dinoer schützt auch seine eigenen Schreibvorgänge: Liegt sein Betriebsjournal im verschlüsselten Verzeichnis und ist dieses geschlossen, schreibt es in eine lokale Ersatzdatei, statt im Klartext dorthin zu schreiben, wo der verschlüsselte Speicher sein sollte.
Der Fehler, der am meisten kostet
Ein nicht eingehängtes Verzeichnis existiert trotzdem. Es ist nur leer, und unverschlüsselt.
Dinoers Schutz gilt für seine eigenen Schreibvorgänge. Er gilt nicht für eine Datei mit Zugangsdaten, die Sie selbst mit einem Befehl oder einem Editor anlegen, während das Verzeichnis gerade nicht eingehängt ist. Sie schreiben dann neben den verschlüsselten Speicher, im Klartext, in ein Verzeichnis, das genau richtig aussieht.
Bevor Sie eine Datei mit Zugangsdaten anlegen oder ändern, prüfen Sie, ob das Verzeichnis eingehängt ist: Es darf nicht leer sein. Dieser Fehler lässt sich nicht rückgängig machen.
Kurz gesagt
- Die Datei wird im Browser-Prozess gelesen, nie über Ihre Shell.
- Szenarien nennen einen Schlüssel, nie ein Geheimnis, und lassen sich daher committen.
DINOER_CONF,DINOER_SECRETS_DIRoder--secretsfür Zugangsdaten pro Projekt und pro Konto.- Code 42 heißt geschlossen, Code 43 nie eingerichtet: Fragen Sie den Betreiber, hängen Sie nicht selbst ein.
- Ein nicht eingehängtes Verzeichnis ist ein leeres, unverschlüsseltes Verzeichnis. Prüfen Sie vor dem Schreiben.