Der Passwort-Tresor des Vereins. Bankzugang, Domain, Verbandsportal, Social Media: Alle Zugänge liegen an einem sicheren Ort und werden nach Ämtern geteilt. Für saubere Amtsübergaben ist das der wichtigste Baustein überhaupt.
Was ist Vaultwarden?
Vaultwarden ist ein schlanker, selbst betriebener Server für Bitwarden, einen verbreiteten Open-Source-Passwortmanager. Man nutzt die ganz normalen Bitwarden-Apps für Browser, Rechner und Handy, nur dass die verschlüsselten Daten auf dem eigenen Server liegen.
- Ende-zu-Ende-verschlüsselt: Der Server sieht die Passwörter nie im Klartext. Entschlüsselt wird nur auf dem Gerät mit dem Master-Passwort.
- Organisation und Sammlungen: Der Verein wird eine Organisation, jedes Amt eine Sammlung. Die Kasse sieht die Bankzugänge, die Presse die Social-Media-Konten.
- Amtsübergabe in zwei Klicks: Der Nachfolger bekommt die Sammlung, der Vorgänger verliert sie. Kein Zettel, keine Excel-Liste mit Passwörtern.
Der Container
Vaultwarden gibt es offiziell als Docker-Image, deshalb läuft es mit Docker im Container (Features Nesting und keyctl). Es ist sehr sparsam.
# auf dem Proxmox-Knoten
pct clone 9000 116 --hostname tresor --full
pct set 116 --cores 1 --memory 512 --onboot 1 --features nesting=1,keyctl=1 \
--net0 name=eth0,bridge=vmbr0,ip=192.168.178.46/24,gw=192.168.178.1
pct start 116
pct exec 116 -- dpkg-reconfigure openssh-server
Dann Docker installieren, genau wie im Kapitel Paperless beschrieben.
Installation
Zuerst ein Passwort für die Verwaltungsoberfläche als sicheren Hash erzeugen. Der Befehl fragt das Passwort ab und gibt eine lange Zeichenkette aus, die mit $argon2id$ beginnt:
docker run --rm -it vaultwarden/server /vaultwarden hash
# /opt/vaultwarden/compose.yaml
services:
vaultwarden:
image: vaultwarden/server:latest
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./data:/data
environment:
DOMAIN: https://tresor.meinverein.de
SIGNUPS_ALLOWED: "false" # niemand registriert sich selbst
INVITATIONS_ALLOWED: "true" # Mitglieder werden eingeladen
ADMIN_TOKEN: ${ADMIN_TOKEN}
SMTP_HOST: smtp.example.org
SMTP_FROM: tresor@meinverein.de
SMTP_PORT: 587
SMTP_SECURITY: starttls
SMTP_USERNAME: tresor@meinverein.de
SMTP_PASSWORD: ${SMTP_PASSWORD}
sudo mkdir -p /opt/vaultwarden && sudo chown admin: /opt/vaultwarden
cd /opt/vaultwarden
# Den Hash in der .env in einfache Anführungszeichen setzen,
# sonst hält docker compose die $-Zeichen für Variablen:
# ADMIN_TOKEN='$argon2id$v=19$...'
# SMTP_PASSWORD='...'
nano .env
docker compose up -d
Im Reverse Proxy tresor.meinverein.de auf http://192.168.178.46:8080 zeigen lassen. HTTPS ist hier Pflicht, ohne funktioniert der Web-Tresor nicht. Die Verwaltung liegt unter https://tresor.meinverein.de/admin.
Einrichtung für den Verein
- Über
/admindie ersten Personen einladen, z. B. den Vorsitz und die Geschäftsführung. - Eine Organisation „Verein“ anlegen und darin Sammlungen pro Amt: Vorstand, Kasse, Presse, Jugend, Technik.
- Alle Vereinszugänge aus Zetteln, Tabellen und Köpfen in die passenden Sammlungen übertragen.
- Zwei-Faktor für alle Mitglieder der Organisation verlangen und Notfallzugriff zwischen Vorsitz und Stellvertretung einrichten.
Wichtig: Ein vergessenes Master-Passwort kann niemand zurücksetzen, auch der Administrator nicht. Das ist der Preis für echte Verschlüsselung. Deshalb gilt: Jeder Zugang liegt in einer Sammlung, auf die mindestens zwei Personen Zugriff haben.
Sicherung
Alle Daten liegen in /opt/vaultwarden/data. Neben dem Proxmox-Backup sichere ich die Datenbank nachts konsistent (sudo apt install sqlite3 vorausgesetzt):
0 3 * * * sqlite3 /opt/vaultwarden/data/db.sqlite3 ".backup '/srv/backup/vaultwarden-$(date +\%F).sqlite3'"