README: Admin-Initial-Passwort ist seit Pentest-12 zufällig

Die README versprach weiterhin "admin@admin.com / admin" als Default,
aber Pentest Runde 12 hat das hardcoded "admin" entfernt
(Komplexitäts-Policy-Verletzung). Der Seed generiert jetzt ein
28-Zeichen-Zufallspasswort und schreibt es einmal nach stdout.

Aktualisiert:
- Quick-Start-Header: Hinweis statt direktes Passwort
- "Erste Inbetriebnahme"-Block: docker-logs-Befehl + SEED_ADMIN_PASSWORD-Alternative
- "Erster Login"-Sektion: vollständige Anleitung inkl. Beispiel-Ausgabe
- "Production-Deployment"-Checkliste: aktualisiert
- .env.example: SEED_ADMIN_PASSWORD-Block dokumentiert

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-24 14:56:55 +02:00
parent 771f46d2ac
commit 69a52ffe03
2 changed files with 56 additions and 11 deletions
+10 -2
View File
@@ -86,9 +86,17 @@ SSRF_BLOCK_PRIVATE_IPS=false
ADMINER_DESIGN=dracula ADMINER_DESIGN=dracula
# ============== SEED ============== # ============== SEED ==============
# Bei leerer DB seedet der Container automatisch (legt admin@admin.com / admin # Bei leerer DB seedet der Container automatisch (legt admin@admin.com +
# + Stammdaten an) nichts zu konfigurieren. # Stammdaten an) nichts zu konfigurieren.
# Nur wenn man eine NICHT-leere DB nochmal forciert seeden will (z.B. nach # Nur wenn man eine NICHT-leere DB nochmal forciert seeden will (z.B. nach
# Reset / Stammdaten-Update), kurz auf 'true' setzen, neu starten, dann # Reset / Stammdaten-Update), kurz auf 'true' setzen, neu starten, dann
# wieder zurück. # wieder zurück.
RUN_SEED=false RUN_SEED=false
# Initial-Passwort für admin@admin.com beim Seed. Mindestens 25 Zeichen,
# sonst wird der Wert ignoriert und stattdessen ein 28-Zeichen-Zufalls-
# passwort erzeugt und EINMAL nach stdout geschrieben:
# docker logs opencrm-app 2>&1 | grep -A 5 "Initial-Passwort"
# Wer keine Lust auf die Log-Suche hat, setzt hier ein eigenes starkes
# Passwort vor dem ersten `docker compose up -d`.
# SEED_ADMIN_PASSWORD=
+46 -9
View File
@@ -61,7 +61,7 @@ docker compose up -d
``` ```
Browser: Browser:
- **CRM**: http://localhost:3010 (Login: `admin@admin.com` / `admin`) - **CRM**: http://localhost:3010 (Login: `admin@admin.com` Initial-Passwort siehe unten)
- **Datenbank-UI** (Adminer): http://localhost:8081 (Server: `db`, User: `root`, DB: `opencrm`) - **Datenbank-UI** (Adminer): http://localhost:8081 (Server: `db`, User: `root`, DB: `opencrm`)
Alle persistenten Daten liegen in `./data/`: Alle persistenten Daten liegen in `./data/`:
@@ -75,9 +75,22 @@ Alle persistenten Daten liegen in `./data/`:
Ports + Pfade konfigurierst du in `./.env` (Default-Werte siehe `.env.example`). Ports + Pfade konfigurierst du in `./.env` (Default-Werte siehe `.env.example`).
> **Erste Inbetriebnahme:** In der `.env` einmalig `RUN_SEED=true` setzen, > **Erste Inbetriebnahme:** Bei leerer DB läuft der Seed automatisch
> `docker compose up -d` ausführen, dann wieder auf `false`. Danach existiert > (kein Eingriff nötig). Nur wenn du eine bereits befüllte DB erneut
> der initiale Admin-User `admin@admin.com` / `admin`. > seeden willst, einmalig `RUN_SEED=true` in der `.env` setzen,
> `docker compose up -d` ausführen, dann wieder auf `false`.
>
> Der initiale Admin-User ist **`admin@admin.com`**. Das Passwort wird
> beim Seed zufällig generiert (28 Zeichen) und genau einmal in den
> Container-Logs ausgegeben:
> ```bash
> docker logs opencrm-app 2>&1 | grep -A 5 "Initial-Passwort"
> ```
> Alternativ kannst du **vor dem ersten Start** ein eigenes Passwort
> setzen, indem du `SEED_ADMIN_PASSWORD=…` (mindestens 25 Zeichen, sonst
> wird's ignoriert) in der `.env` einträgst. Nach dem ersten Login
> sollte das Passwort über *Einstellungen → Mein Profil* geändert
> werden.
## Voraussetzungen ## Voraussetzungen
@@ -186,11 +199,33 @@ Das Frontend läuft auf `http://localhost:5173`
Nach dem Seed sind folgende Zugangsdaten verfügbar: Nach dem Seed sind folgende Zugangsdaten verfügbar:
- **E-Mail:** admin@admin.com - **E-Mail:** `admin@admin.com`
- **Passwort:** admin - **Passwort:** wird beim Seed zufällig generiert (28 Zeichen) und einmal
in den Container-Logs ausgegeben:
```bash
docker logs opencrm-app 2>&1 | grep -A 5 "Initial-Passwort"
```
Beispiel-Ausgabe:
```
========================================================
Admin-User: admin@admin.com
Initial-Passwort: <28-zeichen-zufalls-passwort>
⚠️ Dieses Passwort wird hier EINMAL ausgegeben!
Bitte sofort nach dem ersten Login ändern.
========================================================
```
Wer das Log nicht mehr findet (z.B. Container schon länger gerollt),
setzt `SEED_ADMIN_PASSWORD=<min. 25 Zeichen>` in der `.env` und startet
einmalig mit `RUN_SEED=true` neu der Seed ist idempotent und
überschreibt das Admin-Passwort. Danach `RUN_SEED` wieder auf `false`.
> **Wichtig:** Vor dem ersten Production-Deployment das Default-Passwort sofort > **Tipp:** Wer von Anfang an ein eigenes Admin-Passwort haben möchte,
> ändern und Secrets rotieren siehe [Production-Deployment](#production-deployment). > setzt `SEED_ADMIN_PASSWORD=<min. 25 Zeichen>` **bevor** der erste
> `docker compose up -d` läuft. Der Wert wird dann statt des Zufalls-
> passworts verwendet (siehe `.env.example`).
> **Wichtig:** Vor dem ersten Production-Deployment Secrets rotieren
> siehe [Production-Deployment](#production-deployment).
## Production-Deployment ## Production-Deployment
@@ -240,7 +275,9 @@ Plus:
und der `/auth/refresh`-Endpoint kann den User nicht mehr nachladen und der `/auth/refresh`-Endpoint kann den User nicht mehr nachladen
(= alle 15 min Re-Login). Beim NPM-Setup landen Frontend und API automatisch (= alle 15 min Re-Login). Beim NPM-Setup landen Frontend und API automatisch
auf derselben Domain via Proxy-Path. auf derselben Domain via Proxy-Path.
- **Default-Admin-Passwort ändern** (admin@admin.com / admin). - **Admin-Initial-Passwort ändern**: das beim Seed generierte Zufalls-Passwort
(siehe [Erster Login](#erster-login)) im Profil überschreiben oder gleich
per `SEED_ADMIN_PASSWORD` in der `.env` vor dem ersten Start setzen.
- **Manuelle Test-Checkliste** aus [docs/TESTING.md](docs/TESTING.md) einmal komplett - **Manuelle Test-Checkliste** aus [docs/TESTING.md](docs/TESTING.md) einmal komplett
durchklicken. durchklicken.
- **Monitoring konfigurieren**: Einstellungen → Sicherheits-Monitoring → Alert-E-Mail - **Monitoring konfigurieren**: Einstellungen → Sicherheits-Monitoring → Alert-E-Mail