Der Betrieb eines Vaultwarden Servers mit einem selbstsignierten Zertifikat ist tatsächlich recht einfach.
NEU: Für ganz ungeduldige habe ich einen Konsole only Abschnitt. Da gibts nur Befehle, keine Erklärungen.
Diese einfachste Ausbaustufe des ersten Teils ist NICHT für den öffentlichen Betrieb geeignet. Auch können damit die Bitwarden Apps nur im lokalen Netzwerk genutzt werden!
Letzte Aktualisierung:
Generell sollten solche Dienst in einer eigenen Umgebung eingerichtet werden. Das macht nicht nur die Sicherheit, sondern auch die Wartung wesentlich einfacher. Jails können relativ einfach gesichert werden und es sind nur die Pakete installiert, die absolut notwendig sind.
Damit sieht das Setup lokal so aus:
┌──────────────────────────────────────────┐
│ FreeBSD Optional: │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ jails/vault │ │ jails_data/vault │ │
LAN: 0.0.0.0:8000 ─┼─┼─► vaultwarden ──┼─┼─► data │ │
│ │ sqlite │ │ backup │ │
│ └─────────────────┘ └──────────────────┘ │
└──────────────────────────────────────────┘
Es wird ein eigenes Jail benötigt, hier nehmen wir vault
als Jail Namen.
Dies ist eher für fortgeschrittenen Anwender gedacht, die schon etwas Erfahrung besitzen.
Wie bestimmte Datenverzeichnisse außerhalb des Jails abgelegt werden, wird hier erklärt. Es werden folgende Verzeichnisse benötigt:
└── jails_data
└── vault
├── backup # Ablage für Backups (Im Jail: /mnt/backup)
└── data # Ablage für Daten (Im Jail: /usr/local/www/vaultwarden/data mit id: 80/www)
Login per SSH in das Jail: ssh USERNAME@IP
oder ssh USERNAME@HOSTNAME
, um mit su
root Rechte zu erlangen.
Paketquellen sollten angepasst werden, siehe separater Artikel.
Nun die Paketquelle mit pkg update
aktualisieren und dann die benötigten Pakete installieren: pkg install -y vaultwarden libargon2
Dienste aktivieren damit diese beim Start des Jails automatisch mit starten: service vaultwarden enable
.
Mit folgendem Befehl wird eine zufällige und lange Zeichenfolge erzeugt: openssl rand -base64 48
, welche wir als ADMINTOKEN nutzen werden, z.B. bznRfGlBEDrZS8HBmELgEtPMMUX7p/HJrCn47tEVT2d8ejjyfYCfXSMbUfewtUca
. Damit kann später auf das Admin Portal von Vaultwarden zugegriffen werden. Also gut merken!. Dieser kommt aber nicht in die Konfigurationsdatei, sondern ein per argon2
erzeugter Hash der mit echo -n "bznRfGlBEDrZS8HBmELgEtPMMUX7p/HJrCn47tEVT2d8ejjyfYCfXSMbUfewtUca" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
erzeugt wird.
Der Vaultwarden Dienst sollte niemals im Klartext angesprochen, sondern durch eine abgesicherte Verbindung aufgerufen werden, auch lokal.
Mit dem folgenden Befehl wird ein selbstsigniertes Zertifikat erzeugt. Das wird zwar im Browser (einmalig) eine Warnung erzeugen, sorgt aber für eine verschlüsselte Verbindung.
install -o www -g www -d /usr/local/www/vaultwarden/data/ssl/
openssl req -new -x509 -days 3650 -nodes -keyout /usr/local/www/vaultwarden/data/ssl/vault.key -out /usr/local/www/vaultwarden/data/ssl/vault.crt -subj "/C=DE/ST=NRW/L=ERKRATH/O=BSDBOX/OU=IT/CN=vault.bsdbox.local"
Dann wird OpenSSL ein paar Fragen stellen, die beantwortet werden wollen (mind. der HOSTNAME sollte angepasst werden)
Country Name (2 letter code) [AU]: DE
State or Province Name (full name) [Some-State]: NRW
Locality Name (eg, city) []: ERKRATH
Organization Name (eg, company) [Internet Widgits Pty Ltd]: BSDBOX
Organizational Unit Name (eg, section) []: IT
Common Name (e.g. server FQDN or YOUR name) []: vault.bsdbox.local
Email Address []:
Die damit erzeugten Schlüssel werden noch mit chown www:www /usr/local/www/vaultwarden/data/ssl/*
gegen neugierige Blicke abgesichert.
Im Vergleich zur mitgelieferten Standard-Konfiguration hat diese ein paar Änderungen:
ROCKET_ADDRESS
)ROCKET_TLS
)SMTP_HOST
)ADMIN_TOKEN
)ORG_GROUPS_ENABLED
)Eigentlich erwartet Vaultwarden seine Konfigurationsdatei im Ordner /usr/local/etc/rc.conf.d
, was aber außerhalb des Vaultwarden Datenverzeichnisses liegt. Um wirklich alles relevante an einem Ort zu haben, bedienen wir uns einem Kniff mit symbolischen Links: install -o www -g wheel -d /usr/local/www/vaultwarden/data/rc.conf.d
erstellt das Verzeichnis und ln -sf /usr/local/www/vaultwarden/data/rc.conf.d /usr/local/etc/rc.conf.d
schafft die Verknüpfung.
Damit können wir die initiale Konfigurationsdatei mit cp /usr/local/www/vaultwarden/data/config.json.sample /usr/local/www/vaultwarden/data/rc.conf.d/vaultwarden
kopieren und mit ee /usr/local/etc/rc.conf.d/vaultwarden
anpassen. Dabei die Werte ADMINTOKEN
und HOSTNAME
ersetzen.
ROCKET_ADDRESS=0.0.0.0
export ROCKET_ADDRESS
ROCKET_PORT=8000
export ROCKET_PORT
ROCKET_TLS='{certs = "/usr/local/www/vaultwarden/data/ssl/vault.crt", key = "/usr/local/www/vaultwarden/data/ssl/vault.key"}'
export ROCKET_TLS
ADMIN_TOKEN='ADMINTOKEN'
export ADMIN_TOKEN
DOMAIN='https://HOSTNAME'
export DOMAIN
SIGNUPS_ALLOWED=true
export SIGNUPS_ALLOWED
ORG_GROUPS_ENABLED=true
export ORG_GROUPS_ENABLED
... und letztendlich den Vaultwarden Dienst starten: service vaultwarden start
Vaultwarden ist dann unter https://IP:8000 oder https://HOSTNAME:8000 erreichbar.
Die Adminkonsole kann mit einem /admin hinter der genutzten Adresse aufgerufen werden (ADMINTOKEN benutzen!) und ab jetzt werden alle weiteren Einstellungen auch dort vorgenommen.
Jeder (lokal) kann sich nun an dem Server registrieren und eigene Tresore und Kennwörter hinterlegen. Dazu muss der Emailversand funktionieren, damit die Email Adressen verifiziert werden können. Das kann ebenfalls über die Admin Webseite eingestellt werden.
service vaultwarden stop
pkg delete -a
rm /usr/local/etc/rc.conf.d/vaultwarden
rm -rf /usr/local/www/vaultwarden
Link zum Code auf Github, ich freue mich immer über Verbesserungsvorschläge!.
Die Befehle wurden so angeordnet, das diese untereinander direkt ausgeführt werden können.
bastille create -B vault 14.2-RELEASE 0.0.0.0 publicnet0
bastille cmd vault fetch https://raw.githubusercontent.com/marzlberger/bsdbox/refs/heads/main/vaultwarden/console.sh
bastille cmd vault sh /root/console.sh
Voilá