Showcase nachgezogen: restliche Portfolio-Dateien auf aktuellen Stand
parent
40bc8913e7
commit
22559978ab
1 changed files with 54 additions and 0 deletions
|
|
@ -103,6 +103,60 @@ Erreichbar unter `https://vaultwarden.<TAILNET>`, automatisch gültiges Let's-En
|
|||
|
||||
Über `https://vaultwarden.<TAILNET>` (nur von einem Tailnet-Mitglied aus erreichbar) im Browser ein Konto mit **selbst gewähltem Master-Passwort** anlegen. Das Master-Passwort wird bewusst **nie** programmatisch gesetzt oder irgendwo notiert — es ist der einzige Schlüssel zum gesamten Tresor.
|
||||
|
||||
## 8. Update-Vorfall: Client zeigte nur graue Platzhalter nach einem fälligen Server-Update
|
||||
|
||||
Vaultwarden aktualisiert sich **nicht selbst** — die Anwendung *ist* das Image. Weder der Tresor noch das Admin-Panel können das auslösen; ein Update heißt Image holen und Container neu erzeugen.
|
||||
|
||||
```bash
|
||||
# 1. Konsistente Sicherung OHNE Dienst-Stopp (kein blosses cp der laufenden DB!)
|
||||
python3 - <<'EOF'
|
||||
import sqlite3, os, shutil
|
||||
ziel = "/opt/vaultwarden/pre-update-$(date +%Y%m%d-%H%M)"
|
||||
os.makedirs(ziel, exist_ok=True)
|
||||
src = sqlite3.connect("/opt/vaultwarden/data/db.sqlite3")
|
||||
dst = sqlite3.connect(os.path.join(ziel, "db.sqlite3"))
|
||||
with dst: src.backup(dst)
|
||||
EOF
|
||||
# rsa_key.pem und docker-compose.yml mitsichern, Kopie per 'pct pull' vom Container holen
|
||||
|
||||
# 2. Integritaet der Sicherung pruefen, BEVOR etwas angefasst wird
|
||||
# pragma integrity_check + Anzahl Eintraege merken
|
||||
|
||||
# 3. Update
|
||||
cd /opt/vaultwarden && docker compose pull && docker compose up -d
|
||||
|
||||
# 4. Gegenpruefen: Version, /api/config, integrity_check, gleiche Anzahl Eintraege
|
||||
```
|
||||
|
||||
Ausfallzeit im Praxisfall: ca. 7 Sekunden.
|
||||
|
||||
⚠️ **NICHT TUN: `image: vaultwarden/server:latest` für aktuell halten.** `latest` wird **nur beim `docker pull`** neu aufgelöst. Der Container lief so drei Monate auf einem Image, das Monate zuvor „latest" war — ohne jeden Hinweis. Genau dafür ist ein Image-Update-Notifier vorgesehen (siehe `08-monitoring.md`).
|
||||
|
||||
⚠️ **NICHT TUN: die laufende `db.sqlite3` einfach kopieren.** SQLite läuft im WAL-Modus; ein `cp` erwischt einen inkonsistenten Zwischenstand. Die `.backup`-Schnittstelle liefert einen sauberen Schnappschuss, ohne den Dienst zu stoppen.
|
||||
|
||||
### Vorfall: Chrome-Erweiterung zeigte nur graue Platzhalter
|
||||
|
||||
**Symptom:** Tresor-Liste lud nie, die Erweiterung zeigte dauerhaft Skeleton-Platzhalter. In der Browser-Konsole:
|
||||
|
||||
```
|
||||
Error: invalid type: JsValue(Object({...})), expected a string (bitwarden_wasm_internal_bg.js)
|
||||
```
|
||||
|
||||
**Diagnose-Kette**, jeder Schritt am Protokoll belegt statt vermutet:
|
||||
|
||||
1. Server gesund — Container „healthy", Endpunkt 200 in 20 ms, **keine** Fehler im Log
|
||||
2. Client verbunden — Anmeldung 200 OK, sogar erfolgreiches `POST /api/ciphers`
|
||||
3. **Aber: in zwei Stunden kein einziger `GET /api/sync`** — das ist der Aufruf, der die Tresor-Inhalte holt. Ohne ihn bleibt die Liste leer, ganz ohne Fehlermeldung
|
||||
4. Ursache: der Server meldete einen älteren API-Stand, die Browser-Erweiterung erwartete bereits einen neueren — die Release-Notes der neuen Server-Version waren dazu explizit: eine Mindest-Server-Version wird für neuere Client-Versionen vorausgesetzt
|
||||
5. Nach dem Update trotzdem derselbe Fehler — weil der Client per `GET /api/accounts/revision-date` prüft, ob sich etwas geändert hat, ein „nein" bekam und weiter aus seinem **lokalen Zwischenspeicher im alten Format** arbeitete
|
||||
6. Gelöst durch „Jetzt synchronisieren" in der Erweiterung → `GET /api/sync => 200 OK`
|
||||
|
||||
⚠️ **Merksatz: nach einem Vaultwarden-Update reicht ein Neustart des Browsers nicht.** Der Client synchronisiert nur, wenn sich das Revisionsdatum geändert hat — nach einem reinen Versionssprung tut es das nicht. Ein Abgleich muss **manuell erzwungen** werden (Einstellungen → Tresor synchronisieren), sonst bleibt er auf altem Datenformat hängen.
|
||||
|
||||
**Vor dem Abmelden immer prüfen, ob 2FA aktiv ist** (`select atype, enabled from twofactor`) — bei einem Passwort-Tresor ist ein Selbst-Aussperren die teuerste Fehlerart. Hier: keine 2FA, nur Master-Passwort.
|
||||
|
||||
Mitgeliefert wurden mit diesem Update drei Sicherheitskorrekturen: SSRF über den Icon-Endpunkt, Cross-Organization Cipher Access, Policy-Bypass beim Directory-Import.
|
||||
|
||||
## Bekannte Stolpersteine (bereits behoben, hier nur als Hinweis)
|
||||
|
||||
* Beim Passwort-Import versehentlich Duplikate erzeugt (zweimal importiert) → behoben durch: alle Einträge auswählen → löschen → Papierkorb leeren → sauber neu importieren.
|
||||
|
|
|
|||
Loading…
Reference in a new issue