Ersteinrichtung schliessen: Geheimnis und eine Sperre statt zweier Schritte
Die Aktion ist die einzige Stelle der Anwendung, an der jemand ohne Anmeldung schreiben darf. Zwei Dinge fehlten. Erstens stand die Seite zwischen dem ersten Start und dem Anlegen des Zugangs fuer jeden offen: Wer sie in diesem Fenster fand, wurde Administrator einer Anwendung mit Gesundheits- und Finanzdaten. Das Fenster ist kurz, aber Zufall ist keine Zugriffskontrolle. Jetzt muss ERSTEINRICHTUNG_GEHEIMNIS aus der .env mit eingegeben werden; verglichen wird ueber Hashes in gleichbleibender Zeit, und ein falscher Wert antwortet mit derselben Mindestdauer wie das Anmeldeformular. Fehlt der Wert, ist die Einrichtung gesperrt statt offen. Das ist Absicht: Eine Installation, bei der die Zeile vergessen wurde, soll eine Meldung zeigen und nicht einrichtbar sein. Zweitens waren Pruefung und Anlegen zwei Schritte. Beide laufen jetzt in einer Transaktion, und die Sperrzeile mit fester Id entscheidet - eine zweite gleichzeitige Anfrage scheitert am Primaerschluessel, bevor ein zweiter Administrator entsteht. Die Seite liest die Sperrzeile mit: Lag der erste Zugang im Papierkorb, stand Schritt 1 sonst wieder offen. Der Seed setzt sie ebenfalls. Refs #38
This commit is contained in:
+17
-4
@@ -156,6 +156,7 @@ const w = n => b(n).replace(/[+/=]/g,'x');
|
||||
console.log('AUTH_SECRET=' + b(32));
|
||||
console.log('ENC_KEY_V1=' + b(32));
|
||||
console.log('INDEX_KEY=' + b(32));
|
||||
console.log('ERSTEINRICHTUNG_GEHEIMNIS=' + w(24));
|
||||
console.log('POSTGRES_PASSWORD=' + w(24));
|
||||
console.log('SICHERUNG_PASSWORT=' + w(24));
|
||||
console.log('S3_ACCESS_KEY_ID=' + w(12));
|
||||
@@ -192,7 +193,15 @@ POSTGRES_PASSWORD=<aus Schritt 2>
|
||||
# --- Anmeldung ---
|
||||
AUTH_SECRET=<aus Schritt 2>
|
||||
AUTH_URL=https://cockpit.deine-domain.de # exakt deine Adresse, mit https
|
||||
AUTH_TRUST_HOST=true
|
||||
|
||||
# Ohne diesen Wert laesst sich der erste Zugang nicht anlegen. Absicht:
|
||||
# sonst steht die Einrichtungsseite bis zum ersten Anlegen fuer jeden offen.
|
||||
ERSTEINRICHTUNG_GEHEIMNIS=<aus Schritt 2>
|
||||
|
||||
# Ein Reverse Proxy steht davor (Schritt 7). Nur damit wird der
|
||||
# weitergereichte Kopf geglaubt, aus dem die Anmeldesperre den Anschluss
|
||||
# liest. Ohne die Zeile zaehlt sie nur nach E-Mail-Adresse.
|
||||
VERTRAUE_PROXY=true
|
||||
|
||||
# --- Verschlüsselung ---
|
||||
ENC_KEY_V1=<aus Schritt 2>
|
||||
@@ -258,12 +267,16 @@ chmod 600 .env
|
||||
|
||||
```bash
|
||||
# Sind alle Pflichtwerte gefüllt? Zeigt nur die Namen, nicht die Werte.
|
||||
grep -E '^(POSTGRES_PASSWORD|AUTH_SECRET|AUTH_URL|ENC_KEY_V1|INDEX_KEY|S3_ACCESS_KEY_ID|S3_SECRET_ACCESS_KEY|SICHERUNG_PASSWORT)=.+' .env \
|
||||
grep -E '^(POSTGRES_PASSWORD|AUTH_SECRET|AUTH_URL|ERSTEINRICHTUNG_GEHEIMNIS|VERTRAUE_PROXY|ENC_KEY_V1|INDEX_KEY|S3_ACCESS_KEY_ID|S3_SECRET_ACCESS_KEY|SICHERUNG_PASSWORT)=.+' .env \
|
||||
| sed 's/=.*/ = gesetzt/'
|
||||
```
|
||||
|
||||
Acht Zeilen müssen erscheinen. Fehlt eine, startet die Anwendung nicht —
|
||||
und sagt dir beim Start auch, welche.
|
||||
Zehn Zeilen müssen erscheinen. Fehlt eine, startet die Anwendung nicht —
|
||||
und sagt dir beim Start auch, welche. Zwei Ausnahmen: Fehlt
|
||||
`ERSTEINRICHTUNG_GEHEIMNIS`, startet die Anwendung, aber der erste Zugang
|
||||
lässt sich nicht anlegen. Fehlt `VERTRAUE_PROXY`, läuft alles — die
|
||||
Anmeldesperre zählt dann nur nach E-Mail-Adresse und schreibt beim ersten
|
||||
Mal eine Zeile ins Log.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user