Vaultwarden: Eine effiziente Alternative zur Bitwarden-Server-API, entwickelt in Rust. Diese Implementierung ist vollständig kompatibel mit Bitwarden-Clients und ideal für selbstgehostete Lösungen. Vaultwarden bietet eine ressourcenschonende Alternative zum offiziellen, ressourcenintensiven Bitwarden-Dienst und eignet sich perfekt für individuelle Hosting-Anforderungen.
0. Versionierung
Datum | Änderung |
---|---|
25.01.2024 | Überarbeitung & Veröffentlichung |
08.02.2023 | Vorbereitung |
1. Vorwort
Als Internet-Nutzer kennen Sie es sicher nur zu gut: Ständig werden Sie auf irgendwelchen Webseiten aufgefordert, sich mit einem Passwort anzumelden. Und damit Sie nicht den Überblick verlieren, nutzen Sie meistens das Gleiche. Doch diese Bequemlichkeit ist ein potentielles Sicherheitsrisiko: Wird Ihr Passwort einmal ausgespäht – sei es durch Phishing-Mails oder andere Sicherheitslücken – sind gleich mehrere Ihrer Accounts betroffen. Mithilfe eines Passwortmanagers können Sie diesem Problem Einhalt gebieten.
https://www.heise.de/tipps-tricks/Passwortmanager-So-verwalten-Sie-Ihre-Passwoerter-3934582.html
Es gibt genügend Passwortmanager auf dem Markt. Darunter auch LastPass welches in der Vergangenheit eher mit negativen Schlagzeilen in der Presse war. Eines der wohl sichersten und umfangreichsten ist wohl 1Password. Dies ist inzwischen nur noch im Abo-Modell zu erhalten. Dreh- und Angelpunkt ist bei jedem System, neben dem allgemeinem sichern Setup, das Master-Passwort. Die Entwickler von LastPass konnten noch so gut alle Sicherheitsstandards implementieren, wenn das Master-Passwort nicht sicher ist 🤯.
2. Vorraussetzung
Hinweis: In meinem Standard-Setup hat der normale Nutzer keine Zugriffrechte auf Docker, also arbeite ich meine Anleitungen als root
ab. Dies kann bedeuten, dass ihr ggf. sudo
nutzen müsst, wenn ihr nicht als root
-User arbeitet.
3. Ordner und Dateien anlegen
Beginnen wir mit den Befehlen zum Erstellt der notwendigen Ordner und Dateien für Vaultwarden. Danach wechseln wir direkt in das Hauptverzeichnis unserer Vaultwarden-Installation:
mkdir -p /opt/containers/vaultwarden/config mkdir -p /root/secrets/vaultwarden/ touch /opt/containers/vaultwarden/{.env,docker-compose.yml,docker-compose.override.yml} touch /opt/containers/vaultwarden/config/database.env touch /var/log/vaultwarden.log cd /opt/containers/vaultwarden
4. Docker-Compose Dateien bearbeiten
In diesem Abschnitt bearbeiten wir die Docker-Compose Dateien. Um die Übersicht zu bewahren, nutze ich zusätzlich eine docker-compose.override.yml.
4.1. docker-compose.yml
In der docker-compose.yml legen wir die Basisstruktur fest:
nano /opt/containers/vaultwarden/docker-compose.yml
services: vaultwarden-db: container_name: vaultwarden-db image: mariadb:11 command: --transaction-isolation=READ-COMMITTED --log-bin=ROW --innodb_read_only_compressed=OFF restart: always healthcheck: test: [ "CMD", "healthcheck.sh", "--connect", "--innodb_initialized" ] interval: 10s timeout: 10s retries: 10 volumes: - /etc/localtime:/etc/localtime:ro - ./database:/var/lib/mysql env_file: - ./.env - ./config/database.env networks: default: null hostname: vaultwarden-db vaultwarden: container_name: vaultwarden image: vaultwarden/server:latest depends_on: vaultwarden-db: condition: service_healthy restart: always volumes: - /etc/localtime:/etc/localtime:ro - /var/log/vaultwarden.log:/var/log/vaultwarden.log - ./data:/data env_file: - ./.env - ./config/vaultwarden.env networks: default: null hostname: vaultwarden networks: default: {}
Bei diesem Inhalt handelt es sich um exklusiven Content für Community Plus Mitglieder und Supporter.
Bitte logge dich mit deinem Account ein um den Inhalt zu sehen.
Moin,
ich hatte Probleme mit dem in Abschnitt 7.2 generierten Passwort, wenn bestimmte Sonderzeichen genutzt werden. Ich habe lange den Fehler gesucht und konnte mich mit einem Passwort ohne Sonderzeichen problemlos auf der Adminoberfläche einloggen.
Aber die Änderung auf ein Passwort mit Sonderzeichen lief immer wieder erfolglos.
Nun nutze ich den folgenden Befehl zum erzeugen eines gehashten Passwortes:
docker run –rm -it vaultwarden/server /vaultwarden hash
Argon2 habe ich gar nicht mehr benutzt.
Für die Ersteinrichtung von Vaultwarden habe ich lediglich alle $-Zeichen verdoppelt, die Anführungszeichen entfernt und das Gleichzeichen bei ADMIN_TOKEN durch einen Doppelpunkt ersetzt.
Dieses Passwort funktionierte auf Anhieb (mittlerweile mehrfach getestet).
Alternativ kann der gehashte String auch so in die config.json übernommen werden.
psycho0verload : Vielleicht kann dieser Tip noch in die Anleitung übernommen werden?
Außerdem hatte ich Probleme mit den db_secrets. Die “database_url” scheint ebenfalls nicht alle Sonderzeichen zu nehmen, die generiert werden.
Wo finde ich config? mit dem tree-Befehl in der Traefik_V3 ist kein crowsec.env und kein config
9.1. CrowdSec Collection hinzufügenZunächst wechseln wir in unseren Traefik-CrowdSec-Stack und öffnen die Datei ‘crowdsec.env’:
Dazu navigieren wir mittels des Befehls
cd /opt/containers/traefik-crowdsec-stack/
in das entsprechende Verzeichnis und öffnen dann die Datei mit
nano /opt/containers/traefik-crowdsec-stack/config/crowdsec.env
Ansonsten läuft alles wie es soll, kann aber die Sektion 9 nicht installieren.
Mir ist nicht ganz klar, wieso du schreibst das du die folgenden secrets haben möchtest vaultwarden_db_root_password und dann aber dateien generierst die db_root / db_user usw benannt werden.
Auch ist mir nicht klar, wieso du diese in /root/secrets legst und dann in den config files die Dateien teilweise auf /run/secrets verweisen lässt?
Das sieht für mich nicht stimmig aus und bei mir funktioniert das so auch nicht …
Hallöchen,
vielleicht hat ja jemand das Problem wie ich, dass er vorher Vaultwarden mit einer SQLite Datenbank genutzt hat und jetzt die Daten zu der auch hier benutzten MariaDB migrieren möchte.
1. Mit
docker exec -it container-id bash
in den alten Vaultwarden Container. Da hier sqlite3 nicht installiert ist, wir es aber für den .dump Befehl brauchen installieren wir es. -apt update
-apt install sqlite3
Anschließend navigieren wir in das Verzeichnis in der die Dateiendb.sqlite3
db.sqlite3-shm
db.sqlite3-wal liegen, bei mir lag das in /data. Jetzt die Datenbank dumpen
sqlite3 db.sqlite3 .dump | grep "^INSERT INTO" | grep -v "__diesel_schema_migrations" > sqlitedump.sql ; echo -ne "SET FOREIGN_KEY_CHECKS=0;\n$(cat sqlitedump.sql)" > mysqldump.sql
und jetzt sollte eine mysqldump.sql Datei da sein. Da ich das Volume schon gebindet hatte, war sie auch direkt auf dem Host verfügbar.2. Kopieren der mysqldump.sql in das neue Verzeichnis, bei mir sah das wie folgt auscp mysqldump.sql ../../vaultwarden/database/
3. Den alten Vaultwarden Container stoppen und die vaultwarden-db startendocker compose up -d vaultwarden-db
4. Rein in den Container und die Datenbank migrieren
docker exec -it container-id bash
unter/var/lib/mysql
sollte jetzt auch unsere mysqldump.sql zu finden sein und los geht die Reise mitmariadb --force --password --user=root --database=vaultwarden --show-warnings < mysqldump.sql
Passwort von 6.1. Erstellung von db_root eingeben bzw. rein kopieren. Jetzt sollten viele solcher Einträge kommen.Note (Code 1265): Data truncated for column 'created_at' at row 1 Note (Code 1265): Data truncated for column 'updated_at' at row 1</p>
Bei mir kamen keine Fehler oder Warnungen, wenn das bei euch der Fall sein sollte, müsste ihr mal in den verlinkten Quellen schauen, ob ihr was findet.5. Im letzten Schritt
docker compose down && docker compose up -d
und das sollte es gewesen sein.Ich hoffe ich habe nichts vergessen und hab hier keine groben Schnitzer gemacht.
PS:
Ich habe noch einen kleinen Nachbrenner.
Hab festgestellt, dass die Attachments also die Anhänge nicht dabei waren.
Die habe ich händisch rüberkopiert und das hat auch funktioniert.
Quellen:
https://github.com/dani-garcia/vaultwarden/wiki/Backing-up-your-vault#sqlite-database-files
https://github.com/dani-garcia/vaultwarden/wiki/Using-the-MariaDB-%28MySQL%29-Backend#migrating-from-sqlite-to-mysql
Testserver:
Ergibt:
gibt: tr: range-endpoints of ‘_-.’ are in reverse collating sequence order
Es wird kein Passwort erstellt….
Hallo @psychoOverload. Danke für die Anleitung. Leider hakt es bei mir noch.
Ich bin sehr sicher, dass ich alle Schritte richtig gemacht habe.
Zuvor hatte ich Deine neueste Anleitung mit traefik und crowdsec installiert. Auch Nextcloud AIO. Funktioniert alles wunderbar. Nur eben hier stoße ich auf folgendes Problem:
docker compose up -d startet die beiden conainer. Aber danach habe ich keinen Zugriff auf vault.meineDomain.de (klar, natürlich mit meiner eigenen Doamin)
Im Traefik eingeloggt, sehe ich keinen HTTP Router und auch keinen HTTP Service für vaultwarden…
In Portaainer sehe ich die vaultwarden-db healthy, vaultwarden starting.
Als log sendet er:
[2024-02-01 20:05:24.749][vaultwarden::util][WARN] Can’t connect to database, retrying: DieselCon.
[CAUSE] InvalidConnectionUrl(
“MySQL connection URLs must be in the form
mysql://[[user]:[password]@]host[:port][/database][?unix_socket=socket-path]
“,)
Die config.json (siehe oben) ist übrigens nicht vorhanden.
Wo bin ich da jetzt falsch abgebogen?
Vielen Dank schon mal
Vielleicht als Idee für eine künftige Anleitung, den Bitwarden Unified Container als Anleitung zu veröffentlichen. Das wäre der “offizielle” Weg. Aktuell noch Beta, aber sicher bald aus der Beta raus. Hier der Link: https://bitwarden.com/help/install-and-deploy-unified-beta/
Danke für die Anleitung psycho0verload 😀
Hat bei mir alles direkt funktioniert 😀
Hallo,
woher bekomme ich das generierte Passwort aus Schritt 6.2?
Ich verstehe die Schritt für Schritt Anl. ab da nicht mehr. Nach dem Befehl wird kein PW angezeigt.
VG hardy