diff --git a/IT_Abteilung/Security/PasswortManager.md b/IT_Abteilung/Security/PasswortManager.md new file mode 100644 index 0000000..f8da75b --- /dev/null +++ b/IT_Abteilung/Security/PasswortManager.md @@ -0,0 +1,1312 @@ +--- +title: Passwort Manager Profice Dokumentation +description: +published: true +date: 2026-02-23T10:43:41.555Z +tags: +editor: markdown +dateCreated: 2026-02-23T10:43:41.555Z +--- + +# Vaultwarden & Bitwarden – Vollständige Dokumentation + +> **Serverkomponente:** Vaultwarden (selbst gehosteter Bitwarden-kompatibler Server) +> **Clientkomponente:** Bitwarden (Desktop, Browser, Mobil) +> **Systemumgebung:** Debian-basierter Server (Debian 12 / Ubuntu 22.04+) + +--- + +## Inhaltsverzeichnis + +1. [Überblick und Architektur](#1-überblick-und-architektur) +2. [Vaultwarden – Server-Installation](#2-vaultwarden--server-installation) +3. [Vaultwarden – Konfiguration](#3-vaultwarden--konfiguration) +4. [Reverse Proxy einrichten](#4-reverse-proxy-einrichten) +5. [SSL/TLS-Zertifikat einrichten](#5-ssltls-zertifikat-einrichten) +6. [Admin-Panel](#6-admin-panel) +7. [Benutzerverwaltung](#7-benutzerverwaltung) +8. [Bitwarden-Clients einrichten](#8-bitwarden-clients-einrichten) +9. [Passwörter verwalten](#9-passwörter-verwalten) +10. [Organisationen und geteilte Tresore](#10-organisationen-und-geteilte-tresore) +11. [Datensicherung und Wiederherstellung](#11-datensicherung-und-wiederherstellung) +12. [Sicherheitshärtung](#12-sicherheitshärtung) +13. [Wartung und Updates](#13-wartung-und-updates) +14. [Fehlerbehebung](#14-fehlerbehebung) +15. [Schnellreferenz – Befehle auf einen Blick](#15-schnellreferenz--befehle-auf-einen-blick) + +--- + +## 1. Überblick und Architektur + +### Was ist Vaultwarden? + +Vaultwarden (ehemals Bitwarden_RS) ist eine in Rust geschriebene, ressourcenschonende Implementierung der Bitwarden-Server-API. Es bietet nahezu alle Funktionen des offiziellen Bitwarden-Servers, einschließlich Organisationen, Anhänge und TOTP – benötigt aber deutlich weniger Ressourcen und keine separate Datenbank-Infrastruktur. + +### Was ist Bitwarden? + +Bitwarden ist ein quelloffener Passwort-Manager. Die Clients (Desktop, Browser-Erweiterung, Mobil-App) verschlüsseln alle Daten lokal mit AES-256, bevor sie an den Server gesendet werden. Der Server speichert ausschließlich verschlüsselte Daten und hat keinen Zugriff auf die Klartext-Passwörter. + +### Verschlüsselungsprinzip + +``` +Benutzer-Master-Passwort + │ + ▼ + PBKDF2/Argon2 (Key Derivation) + │ + ▼ + Verschlüsselungsschlüssel (lokal) + │ + ├──▶ Verschlüsselte Daten ──▶ Vaultwarden-Server + │ │ + └──▶ Entschlüsselung (lokal) ◀──── │ +``` + +> **Wichtig:** Der Server sieht niemals unverschlüsselte Passwörter. Die gesamte Ver- und Entschlüsselung findet im Client statt. + +### Architektur auf diesem Server + +```plantuml +@startuml + +skinparam shadowing false +skinparam roundCorner 10 + +package "Debian Server" { + + [Reverse Proxy\n(Nginx/Caddy)] as proxy + [Vaultwarden\n(Docker)] as vw + database "SQLite\n/data/db.sqlite3" as db + folder "Anhänge\n/data/attachments" as att + + proxy --> vw : HTTPS + vw --> db : Lesen/Schreiben + vw --> att : Dateien +} + +cloud "Bitwarden-Clients" { + [Desktop-App] as desktop + [Browser-Extension] as browser + [Mobile App] as mobile + [CLI] as cli +} + +desktop --> proxy : HTTPS +browser --> proxy : HTTPS +mobile --> proxy : HTTPS +cli --> proxy : HTTPS + +@enduml +``` + +### Systemvoraussetzungen + +| Komponente | Minimum | Empfohlen | +|---|---|---| +| RAM | 256 MB | 512 MB | +| CPU | 1 Kern | 2 Kerne | +| Speicherplatz | 1 GB | 5 GB (mit Anhängen) | +| Docker | 20.10+ | Aktuelle Version | +| Domain mit SSL | Erforderlich | Erforderlich | + +--- + +## 2. Vaultwarden – Server-Installation + +### 2.1 Voraussetzungen installieren + +```bash +# System aktualisieren +sudo apt update && sudo apt upgrade -y + +# Docker installieren (falls nicht vorhanden) +curl -fsSL https://get.docker.com | sudo sh + +# Docker-Dienst aktivieren +sudo systemctl enable docker +sudo systemctl start docker + +# Aktuellen Benutzer zur Docker-Gruppe hinzufügen +sudo usermod -aG docker $USER +# Danach neu einloggen oder: newgrp docker +``` + +### 2.2 Verzeichnisstruktur anlegen + +```bash +# Datenverzeichnis erstellen +sudo mkdir -p /opt/vaultwarden/data +sudo chown -R 1000:1000 /opt/vaultwarden +``` + +### 2.3 Installation mit Docker Run + +```bash +docker run -d \ + --name vaultwarden \ + --restart unless-stopped \ + -e DOMAIN=https://vault.example.de \ + -v /opt/vaultwarden/data:/data \ + -p 127.0.0.1:8080:80 \ + vaultwarden/server:latest +``` + +> **Hinweis:** Der Port wird nur auf `127.0.0.1` gebunden, damit kein direkter Zugriff von außen möglich ist. Der Zugriff erfolgt über den Reverse Proxy. + +### 2.4 Installation mit Docker Compose (empfohlen) + +```bash +sudo nano /opt/vaultwarden/docker-compose.yml +``` + +```yaml +version: "3.8" + +services: + vaultwarden: + image: vaultwarden/server:latest + container_name: vaultwarden + restart: unless-stopped + environment: + - DOMAIN=https://vault.example.de + - SIGNUPS_ALLOWED=false + - INVITATIONS_ALLOWED=true + - ADMIN_TOKEN=${ADMIN_TOKEN} + - LOG_FILE=/data/vaultwarden.log + - LOG_LEVEL=info + - TZ=Europe/Berlin + volumes: + - /opt/vaultwarden/data:/data + ports: + - "127.0.0.1:8080:80" + - "127.0.0.1:3012:3012" # WebSocket für Live-Sync +``` + +Admin-Token sicher generieren und in `.env`-Datei speichern: + +```bash +# Sicheren Admin-Token generieren +openssl rand -base64 48 > /opt/vaultwarden/.admin_token + +# .env-Datei erstellen +echo "ADMIN_TOKEN=$(cat /opt/vaultwarden/.admin_token)" > /opt/vaultwarden/.env + +# Berechtigungen einschränken +chmod 600 /opt/vaultwarden/.env /opt/vaultwarden/.admin_token +``` + +Container starten: + +```bash +cd /opt/vaultwarden +docker compose up -d +``` + +### 2.5 Installation prüfen + +```bash +# Container-Status prüfen +docker ps | grep vaultwarden + +# Logs prüfen +docker logs vaultwarden --tail 50 + +# Erreichbarkeit testen (lokal) +curl -s http://127.0.0.1:8080/alive +# Erwartete Antwort: leer (HTTP 200) +``` + +--- + +## 3. Vaultwarden – Konfiguration + +### 3.1 Alle Umgebungsvariablen + +Die Konfiguration erfolgt über Umgebungsvariablen in `docker-compose.yml` oder der `.env`-Datei. + +#### Grundeinstellungen + +| Variable | Beschreibung | Empfohlener Wert | +|---|---|---| +| `DOMAIN` | Öffentliche URL des Servers | `https://vault.example.de` | +| `TZ` | Zeitzone | `Europe/Berlin` | +| `LOG_FILE` | Pfad zur Logdatei | `/data/vaultwarden.log` | +| `LOG_LEVEL` | Log-Detailgrad | `info` | +| `ROCKET_PORT` | Interner Port | `80` (Standard) | + +#### Registrierung und Einladungen + +| Variable | Beschreibung | Empfohlener Wert | +|---|---|---| +| `SIGNUPS_ALLOWED` | Offene Registrierung erlauben | `false` | +| `INVITATIONS_ALLOWED` | Einladungen per E-Mail erlauben | `true` | +| `SIGNUPS_DOMAINS_WHITELIST` | Nur bestimmte E-Mail-Domains | `example.de,firma.de` | +| `SIGNUPS_VERIFY` | E-Mail-Verifizierung erzwingen | `true` | + +#### Admin-Panel + +| Variable | Beschreibung | Empfohlener Wert | +|---|---|---| +| `ADMIN_TOKEN` | Passwort für das Admin-Panel | Langer zufälliger String | +| `DISABLE_ADMIN_TOKEN` | Admin-Panel deaktivieren | `false` | + +#### E-Mail (SMTP) + +| Variable | Beschreibung | Beispiel | +|---|---|---| +| `SMTP_HOST` | SMTP-Server | `smtp.example.de` | +| `SMTP_PORT` | SMTP-Port | `587` | +| `SMTP_FROM` | Absenderadresse | `vault@example.de` | +| `SMTP_FROM_NAME` | Absendername | `Vaultwarden` | +| `SMTP_SECURITY` | Verschlüsselung | `starttls` | +| `SMTP_USERNAME` | SMTP-Benutzername | `vault@example.de` | +| `SMTP_PASSWORD` | SMTP-Passwort | `geheim` | + +#### WebSocket (Live-Sync) + +| Variable | Beschreibung | Empfohlener Wert | +|---|---|---| +| `WEBSOCKET_ENABLED` | WebSocket für Echtzeit-Sync | `true` | +| `WEBSOCKET_PORT` | WebSocket-Port | `3012` | + +#### Sicherheit + +| Variable | Beschreibung | Empfohlener Wert | +|---|---|---| +| `PASSWORD_HINTS_ALLOWED` | Passwort-Hinweise erlauben | `false` | +| `SHOW_PASSWORD_HINT` | Hinweise auf der Login-Seite | `false` | +| `SENDS_ALLOWED` | Bitwarden Send-Funktion | `true` | +| `EMERGENCY_ACCESS_ALLOWED` | Notfallzugriff | `true` | +| `ORG_CREATION_USERS` | Wer darf Organisationen erstellen | `admin@example.de` | + +### 3.2 Vollständige docker-compose.yml (Produktiv) + +```yaml +version: "3.8" + +services: + vaultwarden: + image: vaultwarden/server:latest + container_name: vaultwarden + restart: unless-stopped + environment: + # Grundeinstellungen + - DOMAIN=https://vault.example.de + - TZ=Europe/Berlin + - LOG_FILE=/data/vaultwarden.log + - LOG_LEVEL=info + + # Registrierung + - SIGNUPS_ALLOWED=false + - INVITATIONS_ALLOWED=true + - SIGNUPS_VERIFY=true + + # Admin + - ADMIN_TOKEN=${ADMIN_TOKEN} + + # E-Mail + - SMTP_HOST=smtp.example.de + - SMTP_PORT=587 + - SMTP_FROM=vault@example.de + - SMTP_FROM_NAME=Vaultwarden + - SMTP_SECURITY=starttls + - SMTP_USERNAME=vault@example.de + - SMTP_PASSWORD=${SMTP_PASSWORD} + + # WebSocket + - WEBSOCKET_ENABLED=true + - WEBSOCKET_PORT=3012 + + # Sicherheit + - PASSWORD_HINTS_ALLOWED=false + - SHOW_PASSWORD_HINT=false + - SENDS_ALLOWED=true + - EMERGENCY_ACCESS_ALLOWED=true + - ORG_CREATION_USERS=admin@example.de + volumes: + - /opt/vaultwarden/data:/data + ports: + - "127.0.0.1:8080:80" + - "127.0.0.1:3012:3012" +``` + +### 3.3 Konfigurationsänderungen anwenden + +```bash +cd /opt/vaultwarden + +# Container mit neuer Konfiguration neu erstellen +docker compose down +docker compose up -d + +# Prüfen, ob der Container läuft +docker ps | grep vaultwarden +``` + +--- + +## 4. Reverse Proxy einrichten + +Vaultwarden benötigt HTTPS. Ein Reverse Proxy leitet die Anfragen vom Internet an den Docker-Container weiter. + +### 4.1 Variante A: Nginx + +```bash +sudo apt install -y nginx +sudo nano /etc/nginx/sites-available/vaultwarden +``` + +```nginx +upstream vaultwarden { + server 127.0.0.1:8080; +} + +upstream vaultwarden-ws { + server 127.0.0.1:3012; +} + +server { + listen 80; + server_name vault.example.de; + + # Weiterleitung auf HTTPS + return 301 https://$server_name$request_uri; +} + +server { + listen 443 ssl http2; + server_name vault.example.de; + + # SSL-Zertifikate (siehe Abschnitt 5) + ssl_certificate /etc/letsencrypt/live/vault.example.de/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/vault.example.de/privkey.pem; + + # Sicherheitsheader + add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always; + add_header X-Content-Type-Options "nosniff" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-XSS-Protection "1; mode=block" always; + + # Maximale Upload-Größe (für Anhänge) + client_max_body_size 525M; + + # Hauptanwendung + location / { + proxy_pass http://vaultwarden; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + # WebSocket für Live-Sync + location /notifications/hub { + proxy_pass http://vaultwarden-ws; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # Admin-Bereich – optional: IP-Beschränkung + location /admin { + # Nur aus dem internen Netzwerk erreichbar + # allow 192.168.1.0/24; + # deny all; + + proxy_pass http://vaultwarden; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +```bash +# Konfiguration aktivieren +sudo ln -sf /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/ +sudo nginx -t +sudo systemctl reload nginx +``` + +### 4.2 Variante B: Caddy (einfacher) + +Caddy generiert und erneuert SSL-Zertifikate automatisch. + +```bash +sudo apt install -y caddy +sudo nano /etc/caddy/Caddyfile +``` + +```caddyfile +vault.example.de { + # Maximale Upload-Größe + request_body { + max_size 525MB + } + + # Sicherheitsheader + header { + Strict-Transport-Security "max-age=63072000; includeSubDomains" + X-Content-Type-Options "nosniff" + X-Frame-Options "SAMEORIGIN" + } + + # WebSocket + reverse_proxy /notifications/hub 127.0.0.1:3012 + + # Hauptanwendung + reverse_proxy 127.0.0.1:8080 { + header_up X-Real-IP {remote_host} + } +} +``` + +```bash +sudo systemctl reload caddy +``` + +--- + +## 5. SSL/TLS-Zertifikat einrichten + +### 5.1 Let's Encrypt mit Certbot (für Nginx) + +```bash +# Certbot installieren +sudo apt install -y certbot python3-certbot-nginx + +# Zertifikat anfordern +sudo certbot --nginx -d vault.example.de + +# Automatische Erneuerung testen +sudo certbot renew --dry-run +``` + +Die automatische Erneuerung wird durch einen Systemd-Timer verwaltet: + +```bash +# Status prüfen +sudo systemctl status certbot.timer +``` + +### 5.2 Let's Encrypt mit Caddy + +Bei Caddy ist keine manuelle SSL-Konfiguration nötig. Caddy fordert automatisch ein Let's Encrypt-Zertifikat an und erneuert es selbständig. + +### 5.3 Selbstsigniertes Zertifikat (nur intern) + +Falls kein öffentlicher Zugriff nötig ist: + +```bash +sudo mkdir -p /etc/ssl/vaultwarden + +sudo openssl req -x509 -nodes -days 3650 \ + -newkey rsa:4096 \ + -keyout /etc/ssl/vaultwarden/privkey.pem \ + -out /etc/ssl/vaultwarden/fullchain.pem \ + -subj "/CN=vault.example.de" +``` + +> **Wichtig:** Bei selbstsignierten Zertifikaten muss das Zertifikat auf allen Clients als vertrauenswürdig importiert werden. + +--- + +## 6. Admin-Panel + +### 6.1 Zugriff + +Das Admin-Panel ist erreichbar unter: + +``` +https://vault.example.de/admin +``` + +Anmeldung mit dem `ADMIN_TOKEN` aus der Konfiguration. + +### 6.2 Funktionen des Admin-Panels + +| Bereich | Möglichkeiten | +|---|---| +| **Benutzer** | Alle Benutzer anzeigen, einladen, deaktivieren, löschen | +| **Organisationen** | Organisationen einsehen und verwalten | +| **Einstellungen** | Laufzeitkonfiguration ändern (überschreibt Umgebungsvariablen) | +| **Diagnose** | Serverinformationen, Datenbankgröße, Version | + +### 6.3 Benutzer einladen (über Admin-Panel) + +1. Admin-Panel öffnen → Reiter **Benutzer** +2. E-Mail-Adresse eingeben +3. **Einladen** klicken +4. Der Benutzer erhält eine E-Mail mit einem Registrierungslink + +> **Hinweis:** Für E-Mail-Einladungen muss SMTP konfiguriert sein (siehe Abschnitt 3.1). + +### 6.4 Admin-Panel absichern + +Empfohlene Maßnahmen: + +- **IP-Beschränkung** im Reverse Proxy (siehe Abschnitt 4.1, `/admin`-Block) +- **Starken Admin-Token** verwenden (mindestens 48 Zeichen) +- Admin-Panel nach der Ersteinrichtung optional deaktivieren: + +```yaml +# In docker-compose.yml +- DISABLE_ADMIN_TOKEN=true +``` + +--- + +## 7. Benutzerverwaltung + +### 7.1 Neuen Benutzer anlegen + +**Methode 1: Einladung per E-Mail (empfohlen)** + +1. Admin-Panel → Benutzer → E-Mail eingeben → Einladen +2. Benutzer klickt den Link in der E-Mail +3. Benutzer erstellt sein Konto mit Master-Passwort + +**Methode 2: Offene Registrierung (temporär)** + +```yaml +# Temporär in docker-compose.yml aktivieren +- SIGNUPS_ALLOWED=true +``` + +Nach der Registrierung wieder auf `false` setzen und Container neu starten. + +**Methode 3: Domain-beschränkte Registrierung** + +```yaml +- SIGNUPS_ALLOWED=true +- SIGNUPS_DOMAINS_WHITELIST=example.de,firma.de +``` + +### 7.2 Benutzer deaktivieren oder löschen + +Über das Admin-Panel: + +1. **Benutzer** → gewünschten Benutzer finden +2. **Deaktivieren:** Benutzer kann sich nicht mehr anmelden, Daten bleiben erhalten +3. **Löschen:** Benutzer und alle zugehörigen Daten werden permanent entfernt + +> **Vorsicht:** Das Löschen eines Benutzers ist unwiderruflich. Alle Tresordaten dieses Benutzers gehen verloren. + +### 7.3 Master-Passwort + +Das Master-Passwort wird vom Benutzer selbst im Client festgelegt. Es gibt keine Möglichkeit, das Master-Passwort serverseitig einzusehen oder zurückzusetzen. Bei einem vergessenen Master-Passwort muss das Konto gelöscht und neu erstellt werden (alle Daten gehen verloren). + +Empfehlungen für das Master-Passwort: +- Mindestens 14 Zeichen +- Kombination aus Groß-/Kleinbuchstaben, Zahlen und Sonderzeichen +- Alternativ: Lange Passphrase (z. B. 4+ zufällige Wörter) +- Nirgendwo anders verwenden +- Optional auf Papier notieren und sicher aufbewahren + +--- + +## 8. Bitwarden-Clients einrichten + +### 8.1 Verfügbare Clients + +| Client | Plattform | Download | +|---|---|---| +| Desktop-App | Windows, macOS, Linux | [bitwarden.com/download](https://bitwarden.com/download/) | +| Browser-Erweiterung | Chrome, Firefox, Edge, Safari | Jeweiliger Extension-Store | +| Mobile App | Android, iOS | App Store / Google Play | +| CLI | Alle Plattformen | `npm install -g @bitwarden/cli` | +| Web-Tresor | Browser | `https://vault.example.de` (die eigene Instanz) | + +### 8.2 Client mit eigenem Server verbinden + +Alle Bitwarden-Clients verwenden standardmäßig die offiziellen Bitwarden-Server. Für die Verbindung zum eigenen Vaultwarden-Server muss die Server-URL geändert werden. + +#### Desktop-App + +1. Bitwarden Desktop-App öffnen +2. Auf dem Anmeldebildschirm auf **Einloggen** klicken +3. Auf das **Zahnrad-Symbol** (Einstellungen) oder **„Selbst gehostet"** klicken +4. Unter **Server-URL** die eigene Domain eintragen: + ``` + https://vault.example.de + ``` +5. **Speichern** klicken +6. Mit E-Mail und Master-Passwort anmelden + +#### Browser-Erweiterung + +1. Bitwarden-Erweiterung installieren +2. Auf das Bitwarden-Symbol klicken +3. Auf dem Anmeldebildschirm auf das **Zahnrad-Symbol** klicken +4. Unter **Server-URL** eingeben: + ``` + https://vault.example.de + ``` +5. **Speichern** und anmelden + +#### Mobile App + +1. Bitwarden-App aus dem Store installieren +2. Auf dem Anmeldebildschirm auf **„Selbst gehostet"** oder das Zahnrad-Symbol tippen +3. Server-URL eintragen: + ``` + https://vault.example.de + ``` +4. **Speichern** und anmelden + +#### CLI + +```bash +# Server-URL setzen +bw config server https://vault.example.de + +# Anmelden +bw login benutzer@example.de + +# Tresor entsperren (nach Anmeldung) +bw unlock + +# Status prüfen +bw status +``` + +### 8.3 Zwei-Faktor-Authentifizierung (2FA) einrichten + +Dringend empfohlen für alle Benutzer: + +1. Im Web-Tresor oder der Desktop-App anmelden +2. **Einstellungen** → **Sicherheit** → **Zwei-Faktor-Authentifizierung** +3. Methode wählen: + +| Methode | Sicherheit | Empfehlung | +|---|---|---| +| TOTP-App (Authenticator) | Hoch | **Empfohlen** | +| E-Mail | Mittel | Fallback | +| YubiKey / FIDO2 | Sehr hoch | Ideal für Admins | + +4. QR-Code mit einer Authenticator-App scannen (z. B. Aegis, Authy, Google Authenticator) +5. Wiederherstellungscode sicher aufbewahren + +> **Wichtig:** Den Wiederherstellungscode an einem sicheren Ort aufbewahren (z. B. ausgedruckt in einem Tresor). Ohne diesen Code und ohne 2FA-Gerät ist der Zugriff auf den Tresor nicht mehr möglich. + +--- + +## 9. Passwörter verwalten + +### 9.1 Tresoreinträge – Typen + +Bitwarden unterstützt vier Eintragstypen: + +| Typ | Beschreibung | Beispiel | +|---|---|---| +| **Anmeldung** | Benutzername + Passwort + URL | Webseiten-Logins | +| **Karte** | Kreditkartendaten | Visa, Mastercard | +| **Identität** | Persönliche Daten | Name, Adresse, Telefon | +| **Sichere Notiz** | Freitextfeld (verschlüsselt) | Lizenzen, PINs, Notizen | + +### 9.2 Neuen Eintrag erstellen + +1. Im Client auf **„+"** oder **„Neuer Eintrag"** klicken +2. **Typ** auswählen (z. B. Anmeldung) +3. Felder ausfüllen: + - **Name:** Bezeichnung des Eintrags + - **Benutzername:** Login-Name oder E-Mail + - **Passwort:** Manuell eingeben oder Generator nutzen + - **URI:** Webseiten-URL (für Autofill) + - **Notizen:** Zusätzliche Informationen +4. Optional: **Ordner** zuweisen +5. **Speichern** + +### 9.3 Passwort-Generator + +Der integrierte Passwort-Generator erstellt sichere Passwörter: + +| Einstellung | Empfohlener Wert | +|---|---| +| Typ | Passwort oder Passphrase | +| Länge (Passwort) | Mindestens 20 Zeichen | +| Großbuchstaben | ✅ | +| Kleinbuchstaben | ✅ | +| Zahlen | ✅ | +| Sonderzeichen | ✅ | +| Wörter (Passphrase) | Mindestens 4 Wörter | + +### 9.4 Autofill (automatisches Ausfüllen) + +Die Browser-Erweiterung kann Login-Felder automatisch ausfüllen: + +1. Webseite mit gespeichertem Login öffnen +2. Bitwarden-Symbol in der Symbolleiste klicken +3. Passenden Eintrag auswählen → Felder werden ausgefüllt + +**Tastenkombination (Standard):** +- **Windows/Linux:** `Strg + Shift + L` +- **macOS:** `Cmd + Shift + L` + +### 9.5 Ordner und Sammlungen + +| Konzept | Sichtbarkeit | Verwendung | +|---|---|---| +| **Ordner** | Nur für den eigenen Tresor | Persönliche Organisation | +| **Sammlungen** | Innerhalb einer Organisation geteilt | Team-Passwörter | + +### 9.6 Bitwarden Send + +Bitwarden Send ermöglicht das sichere Teilen von Texten oder Dateien: + +1. **Send** → **Neuer Send** +2. Text oder Datei hinzufügen +3. Optionen: + - **Ablaufdatum** setzen + - **Maximale Zugriffe** begrenzen + - **Passwort** für den Send festlegen + - **Selbstzerstörung** nach Ablauf +4. Link wird generiert und kann geteilt werden + +--- + +## 10. Organisationen und geteilte Tresore + +### 10.1 Organisation erstellen + +Organisationen ermöglichen das Teilen von Passwörtern im Team. + +1. Web-Tresor öffnen (`https://vault.example.de`) +2. **Neue Organisation** → Name und E-Mail eingeben +3. Organisation wird erstellt + +> **Hinweis:** In Vaultwarden ist die Anzahl der Organisationen und Mitglieder nicht beschränkt. + +### 10.2 Mitglieder einladen + +1. Organisation → **Mitglieder** → **Einladen** +2. E-Mail-Adresse eingeben +3. **Rolle** zuweisen: + +| Rolle | Rechte | +|---|---| +| **Benutzer** | Kann zugewiesene Sammlungen sehen und nutzen | +| **Manager** | Kann Sammlungen verwalten und Benutzer zuweisen | +| **Admin** | Volle Verwaltungsrechte der Organisation | +| **Eigentümer** | Alles, einschließlich Löschen der Organisation | + +4. **Sammlungszugriff** festlegen (welche Sammlungen sichtbar sein sollen) +5. Einladung senden + +### 10.3 Sammlungen erstellen und verwalten + +Sammlungen sind Gruppen von Einträgen innerhalb einer Organisation. + +Beispielstruktur: +``` +Organisation: "Firma GmbH" +├── Sammlung: "Allgemein" → Alle Mitarbeiter +├── Sammlung: "Entwicklung" → Entwickler-Team +├── Sammlung: "Server & Infrastruktur" → Admins +└── Sammlung: "Social Media" → Marketing-Team +``` + +1. Organisation → **Sammlungen** → **Neue Sammlung** +2. Name vergeben +3. Zugriffsberechtigungen setzen (welche Benutzer/Gruppen) + +### 10.4 Einträge mit der Organisation teilen + +1. Eintrag öffnen → **Bearbeiten** +2. **Eigentum** → Organisation auswählen +3. **Sammlungen** auswählen, in denen der Eintrag erscheinen soll +4. **Speichern** + +> **Wichtig:** Einmal an eine Organisation übertragene Einträge gehören der Organisation und nicht mehr dem Benutzer. + +--- + +## 11. Datensicherung und Wiederherstellung + +### 11.1 Was wird gesichert? + +| Datei/Verzeichnis | Inhalt | Wichtigkeit | +|---|---|---| +| `/opt/vaultwarden/data/db.sqlite3` | Alle Benutzer, Einträge, Organisationen | **Kritisch** | +| `/opt/vaultwarden/data/attachments/` | Dateianhänge | Hoch | +| `/opt/vaultwarden/data/sends/` | Bitwarden-Send-Dateien | Mittel | +| `/opt/vaultwarden/data/config.json` | Admin-Panel-Konfiguration | Mittel | +| `/opt/vaultwarden/data/rsa_key*` | RSA-Schlüsselpaar | **Kritisch** | +| `/opt/vaultwarden/docker-compose.yml` | Container-Konfiguration | Hoch | +| `/opt/vaultwarden/.env` | Umgebungsvariablen | Hoch | + +> **Wichtig:** Die `rsa_key`-Dateien sind für die Authentifizierung zwingend erforderlich. Ohne sie können sich Benutzer nicht mehr anmelden. + +### 11.2 Manuelles Backup + +```bash +# Vaultwarden stoppen (für konsistentes Backup) +cd /opt/vaultwarden +docker compose stop + +# Backup erstellen +BACKUP_DIR="/backup/vaultwarden" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) + +mkdir -p "$BACKUP_DIR" + +# Gesamtes Datenverzeichnis sichern +tar -czf "$BACKUP_DIR/vaultwarden_${TIMESTAMP}.tar.gz" \ + -C /opt/vaultwarden \ + data/ docker-compose.yml .env + +# Vaultwarden wieder starten +docker compose start + +echo "Backup erstellt: $BACKUP_DIR/vaultwarden_${TIMESTAMP}.tar.gz" +``` + +### 11.3 SQLite-Datenbank separat sichern (ohne Stopp) + +```bash +# Online-Backup der SQLite-Datenbank (kein Stopp nötig) +sqlite3 /opt/vaultwarden/data/db.sqlite3 ".backup '/backup/vaultwarden/db_$(date +%Y%m%d).sqlite3'" +``` + +> **Hinweis:** `sqlite3` muss installiert sein (`sudo apt install -y sqlite3`). + +### 11.4 Automatisches Backup per Cronjob + +```bash +sudo nano /etc/cron.d/vaultwarden-backup +``` + +```cron +# Tägliches Backup um 03:00 Uhr +0 3 * * * root /opt/vaultwarden/backup.sh >> /var/log/vaultwarden-backup.log 2>&1 +``` + +Backup-Skript erstellen: + +```bash +sudo nano /opt/vaultwarden/backup.sh +``` + +```bash +#!/bin/bash +set -e + +BACKUP_DIR="/backup/vaultwarden" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +KEEP_DAYS=30 + +mkdir -p "$BACKUP_DIR" + +# SQLite Online-Backup +sqlite3 /opt/vaultwarden/data/db.sqlite3 \ + ".backup '${BACKUP_DIR}/db_${TIMESTAMP}.sqlite3'" + +# Anhänge und Konfiguration sichern +tar -czf "${BACKUP_DIR}/files_${TIMESTAMP}.tar.gz" \ + -C /opt/vaultwarden \ + data/attachments/ data/sends/ data/config.json data/rsa_key* \ + docker-compose.yml .env 2>/dev/null || true + +# Alte Backups löschen +find "$BACKUP_DIR" -name "*.sqlite3" -mtime +$KEEP_DAYS -delete +find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$KEEP_DAYS -delete + +echo "[$(date)] Backup erfolgreich: db_${TIMESTAMP}.sqlite3" +``` + +```bash +sudo chmod +x /opt/vaultwarden/backup.sh +``` + +### 11.5 Wiederherstellung + +```bash +# Container stoppen +cd /opt/vaultwarden +docker compose down + +# Daten aus Backup wiederherstellen +tar -xzf /backup/vaultwarden/vaultwarden_20240101_030000.tar.gz \ + -C /opt/vaultwarden/ + +# Oder nur die Datenbank +cp /backup/vaultwarden/db_20240101.sqlite3 \ + /opt/vaultwarden/data/db.sqlite3 + +# Berechtigungen setzen +sudo chown -R 1000:1000 /opt/vaultwarden/data + +# Container starten +docker compose up -d +``` + +### 11.6 Client-seitiger Export (Tresor-Export) + +Jeder Benutzer kann seinen Tresor exportieren: + +1. **Einstellungen** → **Tresor exportieren** +2. Format wählen: + +| Format | Beschreibung | Sicherheit | +|---|---|---| +| `.json` | Klartext-JSON | Unverschlüsselt – nur temporär nutzen | +| `.csv` | Kommagetrennt | Unverschlüsselt – nur für Import in andere Systeme | +| `.json` (verschlüsselt) | Verschlüsselt mit dem Kontoschlüssel | **Empfohlen** – nur in Bitwarden wiederherstellbar | + +3. Master-Passwort eingeben +4. **Exportieren** + +> **Warnung:** Unverschlüsselte Exporte enthalten alle Passwörter im Klartext. Diese Dateien nach dem Import sofort sicher löschen. + +--- + +## 12. Sicherheitshärtung + +### 12.1 Checkliste + +- [ ] **Offene Registrierung deaktivieren** (`SIGNUPS_ALLOWED=false`) +- [ ] **Starken Admin-Token setzen** (mindestens 48 Zeichen, zufällig generiert) +- [ ] **HTTPS erzwingen** (SSL/TLS über Reverse Proxy) +- [ ] **Passwort-Hinweise deaktivieren** (`PASSWORD_HINTS_ALLOWED=false`) +- [ ] **2FA für alle Benutzer aktivieren** (mindestens TOTP) +- [ ] **Admin-Panel per IP beschränken** (Nginx-Konfiguration) +- [ ] **SMTP konfigurieren** (für Einladungen und E-Mail-Verifizierung) +- [ ] **Regelmäßige Backups** konfiguriert und getestet +- [ ] **Vaultwarden aktuell halten** (Docker-Image regelmäßig aktualisieren) +- [ ] **Fail2Ban einrichten** (Brute-Force-Schutz) +- [ ] **Firewall konfigurieren** (nur Port 443 öffentlich) + +### 12.2 Fail2Ban für Vaultwarden + +Fail2Ban schützt vor Brute-Force-Angriffen auf die Login-Seite. + +Vaultwarden-Logging aktivieren: + +```yaml +# In docker-compose.yml hinzufügen +- LOG_FILE=/data/vaultwarden.log +- LOG_LEVEL=warn +``` + +Fail2Ban-Filter erstellen: + +```bash +sudo nano /etc/fail2ban/filter.d/vaultwarden.conf +``` + +```ini +[Definition] +failregex = ^.*Username or password is incorrect\. Try again\. IP: \..*$ +ignoreregex = +``` + +Jail konfigurieren: + +```bash +sudo nano /etc/fail2ban/jail.d/vaultwarden.local +``` + +```ini +[vaultwarden] +enabled = true +port = 80,443 +filter = vaultwarden +action = iptables-allports[name=vaultwarden, chain=FORWARD] +logpath = /opt/vaultwarden/data/vaultwarden.log +maxretry = 5 +bantime = 3600 +findtime = 600 +``` + +```bash +sudo systemctl restart fail2ban +sudo fail2ban-client status vaultwarden +``` + +### 12.3 Firewall (UFW) + +```bash +# UFW installieren und aktivieren +sudo apt install -y ufw + +# Standard: Alles blockieren +sudo ufw default deny incoming +sudo ufw default allow outgoing + +# SSH erlauben +sudo ufw allow ssh + +# HTTPS erlauben +sudo ufw allow 443/tcp + +# HTTP erlauben (für Let's Encrypt Redirect) +sudo ufw allow 80/tcp + +# Firewall aktivieren +sudo ufw enable +sudo ufw status verbose +``` + +--- + +## 13. Wartung und Updates + +### 13.1 Vaultwarden aktualisieren + +```bash +cd /opt/vaultwarden + +# Aktuelles Image herunterladen +docker compose pull + +# Container mit neuem Image neu erstellen +docker compose up -d + +# Altes Image aufräumen +docker image prune -f + +# Version prüfen +docker logs vaultwarden 2>&1 | head -5 +``` + +### 13.2 Automatische Update-Benachrichtigung + +Vaultwarden prüft automatisch auf neue Versionen. Im Admin-Panel wird ein Hinweis angezeigt, wenn eine neue Version verfügbar ist. + +### 13.3 Datenbankwartung (SQLite) + +```bash +# Datenbankgröße prüfen +ls -lh /opt/vaultwarden/data/db.sqlite3 + +# Datenbank optimieren (VACUUM) +sqlite3 /opt/vaultwarden/data/db.sqlite3 "VACUUM;" + +# Integrität prüfen +sqlite3 /opt/vaultwarden/data/db.sqlite3 "PRAGMA integrity_check;" +# Erwartete Ausgabe: ok +``` + +### 13.4 Logdateien verwalten + +```bash +# Aktuelle Logs anzeigen +docker logs vaultwarden --tail 100 + +# Logdatei prüfen (falls konfiguriert) +tail -50 /opt/vaultwarden/data/vaultwarden.log + +# Logdatei rotieren (logrotate) +sudo nano /etc/logrotate.d/vaultwarden +``` + +``` +/opt/vaultwarden/data/vaultwarden.log { + daily + rotate 14 + compress + delaycompress + missingok + notifempty + copytruncate +} +``` + +### 13.5 Docker-System aufräumen + +```bash +# Ungenutzte Images entfernen +docker image prune -af + +# Ungenutzte Volumes entfernen (Vorsicht!) +docker volume prune -f + +# Gesamten ungenutzten Docker-Speicher freigeben +docker system prune -af +``` + +--- + +## 14. Fehlerbehebung + +### 14.1 Vaultwarden startet nicht + +```bash +# Container-Status prüfen +docker ps -a | grep vaultwarden + +# Logs anzeigen +docker logs vaultwarden --tail 100 + +# Container manuell starten (interaktiv für Fehlerausgabe) +docker compose down +docker compose up # ohne -d, um Ausgabe zu sehen +``` + +Häufige Ursachen: +- **Port bereits belegt:** `sudo ss -tlnp | grep 8080` +- **Berechtigungsfehler:** `sudo chown -R 1000:1000 /opt/vaultwarden/data` +- **Ungültiger Admin-Token:** Sonderzeichen in `.env` müssen escaped werden + +### 14.2 Client kann sich nicht verbinden + +| Problem | Lösung | +|---|---| +| „Server nicht erreichbar" | Server-URL prüfen, HTTPS sicherstellen | +| SSL-Fehler | Zertifikat prüfen, bei selbstsigniert: Zertifikat importieren | +| „Ungültiges Passwort" | Groß-/Kleinschreibung prüfen, Caps Lock | +| „Konto existiert nicht" | Benutzer wurde evtl. auf dem Server gelöscht | +| Sync funktioniert nicht | WebSocket-Konfiguration prüfen (Port 3012) | + +### 14.3 WebSocket / Live-Sync funktioniert nicht + +```bash +# WebSocket-Port prüfen +curl -i http://127.0.0.1:3012 + +# In docker-compose.yml sicherstellen: +# - WEBSOCKET_ENABLED=true +# - Port 3012 ist gemappt + +# Reverse Proxy: /notifications/hub muss korrekt weitergeleitet werden +``` + +### 14.4 E-Mail-Versand funktioniert nicht + +```bash +# Im Admin-Panel → Diagnose → „Test-E-Mail senden" nutzen + +# SMTP-Konfiguration prüfen +docker logs vaultwarden 2>&1 | grep -i "smtp\|mail\|email" + +# Häufige SMTP-Probleme: +# - Port 465 benötigt SMTP_SECURITY=force_tls +# - Port 587 benötigt SMTP_SECURITY=starttls +# - App-Passwort nötig (z.B. bei Gmail, Outlook) +``` + +### 14.5 Datenbank beschädigt + +```bash +# Integrität prüfen +sqlite3 /opt/vaultwarden/data/db.sqlite3 "PRAGMA integrity_check;" + +# Bei Beschädigung: Aus Backup wiederherstellen +docker compose down +cp /backup/vaultwarden/db_YYYYMMDD.sqlite3 /opt/vaultwarden/data/db.sqlite3 +sudo chown 1000:1000 /opt/vaultwarden/data/db.sqlite3 +docker compose up -d +``` + +### 14.6 Container-Ressourcen prüfen + +```bash +# CPU- und RAM-Nutzung +docker stats vaultwarden --no-stream + +# Speicherplatz +du -sh /opt/vaultwarden/data/ +du -sh /opt/vaultwarden/data/db.sqlite3 +du -sh /opt/vaultwarden/data/attachments/ +``` + +--- + +## 15. Schnellreferenz – Befehle auf einen Blick + +### Docker-Befehle + +```bash +# Container starten +cd /opt/vaultwarden && docker compose up -d + +# Container stoppen +docker compose down + +# Container neu starten +docker compose restart + +# Logs anzeigen +docker logs vaultwarden --tail 50 -f + +# Container-Status +docker ps | grep vaultwarden + +# In den Container wechseln (Debugging) +docker exec -it vaultwarden /bin/sh +``` + +### Update-Prozess + +```bash +cd /opt/vaultwarden +docker compose pull +docker compose up -d +docker image prune -f +``` + +### Backup + +```bash +# Schnelles Datenbank-Backup (online) +sqlite3 /opt/vaultwarden/data/db.sqlite3 ".backup '/backup/vw_$(date +%Y%m%d).db'" + +# Vollbackup +docker compose stop +tar -czf /backup/vw_full_$(date +%Y%m%d).tar.gz -C /opt/vaultwarden data/ docker-compose.yml .env +docker compose start +``` + +### SQLite-Wartung + +```bash +sqlite3 /opt/vaultwarden/data/db.sqlite3 "VACUUM;" +sqlite3 /opt/vaultwarden/data/db.sqlite3 "PRAGMA integrity_check;" +``` + +### Bitwarden CLI + +```bash +bw config server https://vault.example.de # Server setzen +bw login benutzer@example.de # Anmelden +bw unlock # Tresor entsperren +bw sync # Manuell synchronisieren +bw list items --search "github" # Einträge suchen +bw get password "GitHub" # Passwort abrufen +bw generate -ulns --length 24 # Passwort generieren +bw export --format json # Tresor exportieren +``` + +### Wichtige URLs + +``` +Web-Tresor: https://vault.example.de +Admin-Panel: https://vault.example.de/admin +API: https://vault.example.de/api +WebSocket: wss://vault.example.de/notifications/hub +``` + +### Wichtige Dateipfade + +``` +/opt/vaultwarden/ +├── docker-compose.yml # Container-Konfiguration +├── .env # Umgebungsvariablen (Secrets) +└── data/ + ├── db.sqlite3 # Datenbank (alle Tresordaten) + ├── rsa_key.pem # RSA-Schlüssel (Authentifizierung) + ├── rsa_key.pub.pem # RSA Public Key + ├── config.json # Admin-Panel-Konfiguration + ├── vaultwarden.log # Logdatei + ├── attachments/ # Dateianhänge + ├── sends/ # Bitwarden Send-Dateien + └── icon_cache/ # Favicon-Cache +``` + +--- + +> **Letzte Aktualisierung:** *Datum hier eintragen* +> **Autor:** *Name hier eintragen* +> **Version:** 1.0