Files
WikiJS/IT_Abteilung/Security/PasswortManager.md

1313 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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: <HOST>\..*$
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