Mit der steigenden Anzahl an Breaches und Leaks von Nutzerdaten, wird das Vertrauen in Cloud-Dienste geschwächt. Meiner Ansicht nach kann und sollte man seine Passwörter nicht in die Cloud stecken. Auch wenn der Anbieter einem verspricht, dass er sich gut um die Vaults kümmert, weiß man von außen nicht wirklich, wie die ganze Infrastruktur aufgebaut und der Verschlüsselungs-Prozess abläuft und ob nicht doch jemand auf die Daten zugreifen kann.
Die Motivation
Durch die Umstände, dass 1Password seine Policy geändert hat, wodurch die lokalen Lizenzen und Vaults nicht mehr unterstützt und letzten Endes auch noch die Browser-Plugins absichtlich gekillt hat, bin ich gezwungen mit meinen über 1.000-Logineinträgen umzuziehen. Doch die Auslagerung der Daten in die Cloud ist keine Option – wie man vermutlich aus der Anleitung herauslesen kann. Wir haben erst kürzlich nach den besten Passwort Managern gesucht und bauen das Thema in diesem Artikel weiter aus.
Passwort Manager self-host-Lösung beitreiben
Es gibt kaum Optionen, wenn es um das Hosten der eigenen Passwort Manager geht. Der erste Gedanke war es: Ich mach mir mein eigenes System mit Linux-Basis und entsprechenden Apps. Doch es gibt auch Open Source-Lösungen, die das Problem lösen sollen. Die einzig brauchbare ist aktuell Bitwarden. Bitwarden bietet Lizenzmodelle und Apps an, um die Passwörter bei Bitwarden in Europa zu speichern, doch es gibt auch eine „self hosted“-Option! Um diese geht es uns im Detail. Wir haben uns überwiegend an die Anleitung von Bitwarden gehalten.
Den Server aufsetzen
Im Idealfall hat man einen Server mit einer freien VM, auf die man den Dienst als Docker Container installiert. Der Server kann aber auch auf einer Synology Diskstation laufen, denn das Ganze setzt auf Docker und keine dedizierte "App" auf. Für unser Vorhaben haben wir aber einen Dell PowerEdge T440 mit Proxmox verwendet. Die VM muss an sich gar nicht groß sein und setzt folgendes voraus:
- Prozessor: x64, 1.4GHz (Empfohlen: x64, 2GHz Dual Core)
- Arbeitsspeicher: 2 GB RAM (Empfohlen: 4 GB RAM)
- Speicherplatz: 12 GB (Empfohlen: 25 GB)
- Docker-Version: Engine 19+ und Compose 1.24+
Wir haben Ubuntu Server 22.04 verwendet, das kostenlos erhältlich ist. Nach dem die VM fertig ist, geht die eigentliche Einrichtung von Bitwarden Server recht einfach vonstatten.
Bitwarden-Nutzer erstellen
Damit der Docker Server nicht als Admin arbeitet, nutzt man am besten einen anderen Benutzer. Dafür legt man diesen an und bereitet die Installation weiter vor. Nachfolgend die Befehle für die Konsole, da wir natürlich keine GUI haben.
Erstellen Sie einen Benutzer bitwarden:
- sudo adduser bitwarden
Dann Passwort für den Nutzer bitwarden festlegen:
- sudo passwd bitwarden
Erstellen der Docker-Gruppe:
- sudo groupadd docker
Benutzer bitwarden zur Docker-Gruppe hinzufügen:
- sudo usermod -aG docker bitwarden
Erstellen eines Verzeichnisses für bitwarden:
- sudo mkdir /opt/bitwarden
Berechtigungen für das Verzeichnis /opt/bitwarden festlegen:
- sudo chmod -R 700 /opt/bitwarden
Benutzer bitwarden zum Besitzer des Verzeichnisses /opt/bitwarden machen:
- sudo chown -R bitwarden:bitwarden /opt/bitwarden
Außerdem wird man für das Vorhaben auch Docker und DEocker-Compose brauchen:
- sudo apt install docker.io docker-compose
Bitwarden Server installieren
Die eigentliche Installation ist wirklich einfach gemacht. Bitwarden liefert ein Installationsscript mit Namen bitwarden.sh, dass man sich zieht und dann die Rechte setzt:
- curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" && chmod 700 bitwarden.sh
Anschließend führt man die Installation aus:
- ./bitwarden.sh install
Hier muss man einige Informationen bereitstellen, damit die Konfiguration erstellt wird und die Installation auch die gewünschten Parameter kennt. So kann man statt einer Domain auch eine lokale IP wie 192.168.1.200 nutzen, um den Server im Netzwerk zu betreiben und keinen „exposed“ Server-Dienst im Internet zu haben. So können alle Nutzer im Netzwerk auf den Passwort Manager Server zugreifen, aber nicht von außen. Man kann es auch mit einer Domain und LetsEncrypt-Zertifikat machen, muss dafür aber etwas mit lokalen DNS-Servern herumspielen und entsprechend konfigurieren. Wir haben vorerst einfach die erste Variante gewählt und ein „self-signed“ Zertifikat erstellen lassen. Damit hat es soweit funktioniert.
Bei diesem Vorgang müssen wir uns Keys von Bitwarden für unseren Server holen. Das ist kostenlos auf der Seite bitwarden.com/de-DE/host/ schnell erledigt, man gibt die eMail-Adresse an und wählt EU als Region aus. Diese Keys kann man auch noch nachfolgend in der Konfiguration anpassen.
Konfiguration
Nach der Installation muss man noch einige wichtige Einstellungen in der Konfigurationsdatei vornehmen. Zum einen braucht man einen SMTP-Server für eMail-Versand und außerdem noch Keys von Bitwarden für die lokale Instanz.
Die Konfiguration ist unter ./bwdata/env/global.override.env zu finden. Mit einem Editor Deiner Wahl kannst du diese bearbeiten – wir nutzen vim.
- vim ./bwdata/env/global.override.env
Ändern müssen wir die Platzhalter (platzhalter):
- ...
- globalSettings__mail__smtp__host=platzhalter
- globalSettings__mail__smtp__port=platzhalter
- globalSettings__mail__smtp__ssl=platzhalter
- globalSettings__mail__smtp__username=platzhalter
- globalSettings__mail__smtp__password=platzhalter .- ..
- adminSettings__admins=
- ...
Mit der Taste i aktiviert man den Insertion-Modus, wonach man Text in vim schreiben kann. Ist man fertig, drückt man Escape. Dann tippt man :wq auf der Tastatur, wobei der Doppelpunkt vim dazu bringt, die Editorfunktion zu verlassen und mit write (w) und quit (q) als Befehl schreiben und speichern.
Dann den Befehl ausführen:
- ./bitwarden.sh restart
Bitwarden Server starten
Abschließend muss man den Server starten und dann sollte alles soweit auch schon funktionieren:
- ./bitwarden.sh start
Nutzer registrieren
Sobald der Server läuft, kann man direkt den ersten Nutzer anlegen. Diesen kann man in der Konfiguration auch als Admin festlegen. Beim Erstellen des Accounts muss man ein langes Master-Passwort aussuchen, denn das schützt den Tresor (Vault) mit allen Passwörtern. Dieses muss man sich merken. Man kann später unter Einstellungen auch einen Recover-Token (Fingerabdruck-Phrase) holen und es drucken – für alle Fälle!
Bitwarden Sicherheitsoptionen
Unter den Einstellungen kann man aber auch weiter gehen und auch Multi- oder Zwei-Faktor-Authentifizierung aktivieren, sowie yubico Hardware-Keys (Premium Nutzer) nutzen. Naheliegend ist aber die Nutzung von Authy Authenticator App.
Spannend und empfehlenswert ist es unter „Sicherheit“ und dann auf Schlüssel zu gehen und dort die Schlüsselableitungsfunktion auf Argon2id zu stellen. Wenn man mag, kann man die KDF-Iterationen hochsetzen und noch mehr anpassen. Aber Argon2 ist die bessere Wahl, weil die Schlüsselableitungsfunktion (für den Angreifer) sehr Zeit-, Ressourcen- und Speicherintensiv ist.
Passwort-Daten importieren
Wer schon länger einen Passwort Manager benutzt, der hat auch ein "Datenreichtum" aufgebaut. Man will seinen Tresor dann portieren und bei vielen Passwort Manager geht das sogar. 1Password erlaubt es den Vault zu exportieren – und das in diversen Formaten. Bitwarden erlaubt es dagegen diese zu importieren. Dafür geht man auf „Werkzeuge“ und dann „Daten importieren“. Wir haben 1pif verwendet, aber es gibt viele weitere.
Der Vorgang funktionierte ohne Zwischenfälle.
Browser-Plugins für Passwort Manager
Zuletzt kann man den Komfort steigern, denn dieser ist für aktive Nutzung eines Passwortmanagers durchaus auschlaggebend. Bitwarden bietet viele Browser Plugins und Apps. Wir haben die Firefox-Extension verwendet. Man verbindet sich hierfür mit dem Server und die Zugangsdaten werden dann durch das Plugin bereitgestellt und können auch automatisch ausgefüllt werden. Der Tresor kann sich aber nach x-Minuten schließen, damit keine unbefugten diese Funktion verwenden.
Einschränkungen – was noch nicht passt
Es gibt an der Stelle dann doch ein "Aber". Auch wenn es Apps gibt, funktionierten sie bei uns bei der Netzwerk-Instanz nicht. Die iOS-App meckert wegen self-singed Zertifikat – und das zurecht. Im Idealfall geht man weiter und setzt eine Domäne auf und validiert diese über LetsEncrypt. Die für uns notwendigen Dinge funktionierten jedoch.
Es wird einen Nachtrag geben, sobald wir die Sache mit den Apps und der Domäne ausprobiert haben.