--- title: Passwort Manager Profice Dokumentation description: published: true date: 2026-02-23T10:45:42.508Z 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:** *23.02.2026* > **Autor:** *Administrator* > **Version:** 1.0