# Vaultwarden

Alternative inoffizielle Implementierung des Bitwarden Servers in Rust. Open Source &amp; 100% kostenlos zum selber hosten. Bitwarden Client wird komplett unterstützt und kann problemlos verwendet werden.

# Übersicht

Bei Vaultwarden handelt es sich um eine implementierung der Community des Bitwarden Servers in Rust. Der Server kann komplett kostenlos selbst gehostet werden z. B. als Docker Container. Der vollständige Code sowie die Dokumentation kann hier eingesehen werden: [Vaultwarden GitHub](https://jaeckel.one/attachments/13)

Vaultwarden unterstützt die folgenden (Bitwarden-)Features:

- Organisationen
- Ordner zum Gruppieren
- Sammlungen zum Teilen von Passwörtern
- Anhänge und die Funktion *Senden*
- Vault API Unterstützung
- Statische Dateien für Vault Instanz zur Verfügung stellen
- Webseiten Icons API
- Authenticator und 2 Faktor
- YubiKey und Duo
- Notfallzugriff
- Anbindung von Bitwarden Clients
- Weboberfläche (Zugriff ohne Client von jedem Gerät aus)

In allen Bitwarden Clients kann ein Vaultwarden Server als URL hinterlegt werden anstelle eines "richtigen" Bitwarden Servers. Es stehen trotzdem alle Funktionen zur Verfügung.

### Tresor

Der Tresor eines Benutzers sieht im Web beispielsweise wie folgt aus.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/scaled-1680-/iJ6grafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/iJ6grafik.png)

### Send

Im Menü *Send* können z. B. Passwörter oder Texte oder ganze Dateien sicher geteilt werden über einen Link samt Passwort sowie Ablaufzeit.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/scaled-1680-/UFjgrafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/UFjgrafik.png)

### Werkzeuge

Unter den Werkzeugen steht z. B. ein Passwort Generator zur Auswahl sowie Im- und Exportfunktionen.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/hU9grafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/UFjgrafik.png)

### Berichte

Einige besonders interessante Funktionen sind im Reiter Berichte zu finden, womit beispielsweise die Passwörter überprüft werden können, um mögliche Kompromittierungen zu entdecken.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/scaled-1680-/Dm9grafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/Dm9grafik.png)

### Organisationen

In diesem Menü können neue Organisationen erstellt und bestehende verwaltet werden. Für jede Organisation lassen sich Mitglieder samt Berechtigungen einstellen sowie Richtlinien für die Mitglieder festlegen wie z. B. 2FA erzwingen.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/scaled-1680-/UADgrafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/UADgrafik.png)

# Installation

Die Installation des Vaultwarden Servers ist mit Docker schnell erledigt.

So würde z. B. folgende Docker Compose Datei bereits ausreichend sein, um eine funktionierende Instanz bereitzustellen.

```yaml
  pass:
    image: vaultwarden/server
    container_name: vaultwarden
    environment:
      - TZ=Europe/Berlin
    volumes:
      - /pfad/zu/vaultwarden/data:/data
    ports:
      - 80:80
    restart: unless-stopped
```

Um die Docker Compose Konfiguration auszuführen, kann am besten in das Verzeichnis der YAML Datei gewechselt werden. Danach wird je nach nach gewählter Installation `sudo docker-compose up -d` oder `sudo docker compose up -d` (keine Bindestrich zwischen docker und compose) eingegeben, um die Standard Konfiguration `docker-compose.yml` zu starten. Compose erstellt dann die gewünschten Container mit den angegeben Optionen. Sollten die Container bereits mit dieser Compose Konfiguration erstellt worden sein, so werden die Container in dieser neu erstellt, dessen Konfiguration geändert wurde.

Nach einigen Sekunden ist die Weboberfläche von Vaultwarden unter http://Server-IP erreichbar.

<p class="callout warning">Da Vaultwarden besonders sensible Daten wie eben Passwörter, Kreditkarteninformationen usw. speichert, sollte die Weboberfläche unbedingt mit HTTPS abgesichert werden. Die Entwickler selbst empfehlen einen Reverse Proxy, bieten jedoch auch eine eigene HTTPS Funktion über Rocket an: [Vaultwarden HTTPS](https://jaeckel.one/attachments/15)</p>

Beim Aufruf der Seite erscheint das Login/Registrierungsfenster. Je nach weiterer Konfiguration (z. B. deaktivierter Registrierung) sieht diese etwas anders aus.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/scaled-1680-/Io5grafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/Io5grafik.png)

# Mail & Send konfigurieren

Für einige Funktionen wie z. B. das Senden von Passwörtern / Geheimnissen ist ein E-Mail Konto samt SMTP-Server anzugeben.

Steht dieser zur Verfügung, am besten ein eigenes Postfach für Vaultwarden erstellen.

Danach die Docker Compose Konfiguration wie folgt erweitern.

```yaml
    environment:
      - SENDS_ALLOWED=true
      - SMTP_HOST=smtp.beispiel.de
      - SMTP_FROM=vaultwarden@beispiel.de
      - SMTP_FROM_NAME=Vaultwarden
      - SMTP_SECURITY=starttls
      - SMTP_PORT=465
      - SMTP_USERNAME=vaultwarden
      - SMTP_PASSWORD=EinRichtigStarkes20+ZeichenPasswort
#      - SMTP_TRUSTSERVER=true
```

Die Option *SENDS\_ALLOWED* aktiviert die Funktion zum Senden von Passwörtern / Geheimnissen. Alle anderen Optionen, die mit *SMTP\_* beginnen, konfigurieren die Einstellungen für den E-Mails Server sowie das Postfach.

<p class="callout info">Die Option *SMTP\_TRUSTSERVER* wurde auskommentiert. Sofern es einen Zertifikatsfehler gibt, z. B. weil ein selbst signiertes Zertifikat verwendet wird, kann die Zertifikatsprüfung deaktiviert werden, indem diese Option aktiviert wird (Raute entfernen). Dies stellt jedoch eine SIcherheitsgefährdung dar und sollte nicht verwendet werden. Es sei denn, die Container sind direkt über den Host miteinander verbunden und kommunizieren nur Docker Intern.</p>

Anschließend wie gewohnt die Compose Konfiguration neu laden und die Container neu erstellen lassen.

Um die Docker Compose Konfiguration auszuführen, kann am besten in das Verzeichnis der YAML Datei gewechselt werden. Danach wird je nach nach gewählter Installation `sudo docker-compose up -d` oder `sudo docker compose up -d` (keine Bindestrich zwischen docker und compose) eingegeben, um die Standard Konfiguration `docker-compose.yml` zu starten. Compose erstellt dann die gewünschten Container mit den angegeben Optionen. Sollten die Container bereits mit dieser Compose Konfiguration erstellt worden sein, so werden die Container in dieser neu erstellt, dessen Konfiguration geändert wurde.

# Admin Seite aktivieren

Wenn gewünscht, kann eine Admin Seite aktiviert werden, über die sich Benutzer einladen, verwalten und löschen lassen.

Die Admin Seite wird über einen sog. Admin Token abgesichert. Mit diesem Token kann die Adminoberfläche geöffnet werden. Der Token kann eine beliebige Zeichenkette sein. Diese sollte möglichst lang sein, gut geschützt und geheim gehalten werden.

Die Aktivierung erfolgt durch eine zusätzliche Environment Variable in der Compose Konfiguration.

```yaml
    environment:
      - ADMIN_TOKEN=hier_der_extra_lange_laaaange_token
```

Anschließend wie gewohnt die Compose Konfiguration neu laden und die Container neu erstellen lassen.

Um die Docker Compose Konfiguration auszuführen, kann am besten in das Verzeichnis der YAML Datei gewechselt werden. Danach wird je nach nach gewählter Installation `sudo docker-compose up -d` oder `sudo docker compose up -d` (keine Bindestrich zwischen docker und compose) eingegeben, um die Standard Konfiguration `docker-compose.yml` zu starten. Compose erstellt dann die gewünschten Container mit den angegeben Optionen. Sollten die Container bereits mit dieser Compose Konfiguration erstellt worden sein, so werden die Container in dieser neu erstellt, dessen Konfiguration geändert wurde.

Danach ist ein neuer Unterordner in der URL verfügbar: [http://Server-IP/admin](http://Server-IP/admin)

Auf der neuen Seite können auch alle Einstellungen am Server geändert werden, die bisher über die Docker Compose Konfiguration geändert wurden, wie z. B. SMTP-Server.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/scaled-1680-/8Qngrafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/8Qngrafik.png)