<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=Vaultwarden%3A_Backup_und_Wiederherstellung</id>
	<title>Vaultwarden: Backup und Wiederherstellung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=Vaultwarden%3A_Backup_und_Wiederherstellung"/>
	<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=Vaultwarden:_Backup_und_Wiederherstellung&amp;action=history"/>
	<updated>2026-10-19T03:18:53Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in maxTechCorner</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://techcorner.max-it.de/index.php?title=Vaultwarden:_Backup_und_Wiederherstellung&amp;diff=4931&amp;oldid=prev</id>
		<title>imported&gt;TechCorner-Redaktion: Neuer Artikel: Datenordner, SQLite-Backup, restic-Skript, Wiederherstellung, Restore-Test, Notfallexport</title>
		<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=Vaultwarden:_Backup_und_Wiederherstellung&amp;diff=4931&amp;oldid=prev"/>
		<updated>2026-10-17T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;Neuer Artikel: Datenordner, SQLite-Backup, restic-Skript, Wiederherstellung, Restore-Test, Notfallexport&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Steckbrief&lt;br /&gt;
| gilt_fuer   = Vaultwarden 1.37.x mit SQLite im Docker-Container; Sicherung mit Bordmitteln, restic oder vorhandener Backup-Software&lt;br /&gt;
| bereich     = IT-Security&lt;br /&gt;
| dauer       = Einrichtung ca. 1 Stunde; Restore-Test ca. 30 Minuten&lt;br /&gt;
| rechte      = Root auf dem Docker-Host&lt;br /&gt;
| stand       = Oktober 2026&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vaultwarden sichern und wiederherstellen&amp;#039;&amp;#039;&amp;#039; ist schnell eingerichtet, wird aber oft unterschätzt: Fällt der Passwortserver ohne funktionierendes Backup aus, verliert das Unternehmen nicht nur Daten, sondern auch den Zugang zu Firewalls, Banking und Cloud-Diensten. Diese Anleitung zeigt, welche Dateien gesichert werden müssen, wie die Datenbank im laufenden Betrieb konsistent gesichert wird, wie die Sicherung verschlüsselt außer Haus gelangt und wie ein Wiederherstellungstest abläuft.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Vaultwarden-Backup.png|thumb|center|750px|Backup von Vaultwarden: Datenordner data mit db.sqlite3 (Pflicht), attachments (Pflicht), sends (optional), config.json und rsa_key-Dateien (empfohlen), icon_cache (nicht nötig); SQLite konsistent sichern mit /vaultwarden backup oder sqlite3 .backup statt Dateikopie; täglich per Cron, verschlüsselt mit restic, Kopie außer Haus nach 3-2-1-Regel; Wiederherstellung: Container stoppen, Dateien zurückkopieren, starten; Restore-Test mindestens vierteljährlich; zusätzlich verschlüsselter Export der Organisation für den Notfall.]]&lt;br /&gt;
&lt;br /&gt;
== Was bei Vaultwarden gesichert werden muss ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Datei / Ordner in &amp;lt;code&amp;gt;data/&amp;lt;/code&amp;gt; !! Inhalt !! Sicherung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;db.sqlite3&amp;lt;/code&amp;gt; (mit &amp;lt;code&amp;gt;-wal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-shm&amp;lt;/code&amp;gt;) || Benutzer, verschlüsselte Tresore, Organisationen, Geräte, Einstellungen || &amp;#039;&amp;#039;&amp;#039;Pflicht&amp;#039;&amp;#039;&amp;#039; – nicht einfach kopieren, siehe unten&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attachments/&amp;lt;/code&amp;gt; || Datei-Anhänge (verschlüsselt) || &amp;#039;&amp;#039;&amp;#039;Pflicht&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sends/&amp;lt;/code&amp;gt; || Dateien in Bitwarden Send || optional – nur kurzlebig&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt; || im Admin-Panel gespeicherte Einstellungen, auch Admin-Token-Hash und SMTP-Passwort im Klartext || empfohlen, verschlüsselt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rsa_key*&amp;lt;/code&amp;gt; || Schlüssel zum Signieren der Anmelde-Token || empfohlen – ohne sie müssen sich alle neu anmelden und offene Einladungen verfallen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icon_cache/&amp;lt;/code&amp;gt; || zwischengespeicherte Website-Symbole || nicht nötig&lt;br /&gt;
|}&lt;br /&gt;
Zusätzlich &amp;#039;&amp;#039;&amp;#039;compose.yaml&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;.env&amp;#039;&amp;#039;&amp;#039; sichern, sonst muss die Konfiguration im Notfall neu erarbeitet werden. Bei MySQL/MariaDB oder PostgreSQL kommt ein Datenbank-Dump hinzu, siehe [[PostgreSQL]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Gut zu wissen:&amp;#039;&amp;#039;&amp;#039; Die Tresorinhalte in der Datenbank sind mit den Schlüsseln der Benutzer verschlüsselt. Wer das Backup stiehlt, kann aber Metadaten (E-Mail-Adressen, Namen, Organisationen, Gerätelisten, Zeitstempel) lesen und offline Master-Passwörter erraten. Deshalb das Backup zusätzlich verschlüsseln.&lt;br /&gt;
&lt;br /&gt;
== Schritt 1: Datenbank konsistent sichern ==&lt;br /&gt;
SQLite schreibt laufend in die Datenbank und das Write-Ahead-Log. Eine einfache Dateikopie im laufenden Betrieb kann unbrauchbar sein. Drei richtige Wege:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a) Eingebauter Befehl (ab 1.32.1), schreibt data/db_JJJJMMTT_HHMMSS.sqlite3 (UTC)&lt;br /&gt;
docker exec vaultwarden /vaultwarden backup&lt;br /&gt;
&lt;br /&gt;
# b) sqlite3 auf dem Host (Paket sqlite3), Online-Backup-API&lt;br /&gt;
sqlite3 /opt/vaultwarden/data/db.sqlite3 &amp;quot;.backup &amp;#039;/var/backups/vaultwarden/db-$(date +%Y%m%d-%H%M).sqlite3&amp;#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# c) Container kurz stoppen und alle Dateien kopieren&lt;br /&gt;
docker compose stop vaultwarden &amp;amp;&amp;amp; cp -a data /var/backups/vaultwarden/data-$(date +%F) &amp;amp;&amp;amp; docker compose start vaultwarden&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Docker-Image enthält weder &amp;lt;code&amp;gt;sqlite3&amp;lt;/code&amp;gt; noch &amp;lt;code&amp;gt;cron&amp;lt;/code&amp;gt; – Zeitpläne deshalb auf dem Host einrichten.&lt;br /&gt;
&lt;br /&gt;
== Schritt 2: Sicherungsskript ==&lt;br /&gt;
&amp;lt;code&amp;gt;/usr/local/sbin/vaultwarden-backup.sh&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
DATA=/opt/vaultwarden/data&lt;br /&gt;
STAGE=/var/backups/vaultwarden/stage&lt;br /&gt;
mkdir -p &amp;quot;$STAGE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Datenbank konsistent sichern und in den Staging-Ordner verschieben&lt;br /&gt;
OUT=$(docker exec vaultwarden /vaultwarden backup)&lt;br /&gt;
FILE=$(echo &amp;quot;$OUT&amp;quot; | sed -n &amp;quot;s/^Backup to &amp;#039;\/data\/\(db_[0-9_]*\.sqlite3\)&amp;#039;.*/\1/p&amp;quot;)&lt;br /&gt;
[ -n &amp;quot;$FILE&amp;quot; ] || { echo &amp;quot;Backup fehlgeschlagen: $OUT&amp;quot; &amp;gt;&amp;amp;2; exit 1; }&lt;br /&gt;
mv &amp;quot;$DATA/$FILE&amp;quot; &amp;quot;$STAGE/db.sqlite3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Restliche Dateien (ohne Live-Datenbank und Icon-Cache)&lt;br /&gt;
rsync -a --delete --exclude &amp;#039;db.sqlite3*&amp;#039; --exclude &amp;#039;db_*.sqlite3&amp;#039; --exclude icon_cache \&lt;br /&gt;
  &amp;quot;$DATA/&amp;quot; &amp;quot;$STAGE/data/&amp;quot;&lt;br /&gt;
cp /opt/vaultwarden/compose.yaml /opt/vaultwarden/.env &amp;quot;$STAGE/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Verschlüsselt und versioniert ins Repository&lt;br /&gt;
export RESTIC_REPOSITORY=sftp:backup@nas.firma.lan:/backup/vaultwarden&lt;br /&gt;
export RESTIC_PASSWORD_FILE=/root/.restic-vaultwarden&lt;br /&gt;
restic backup &amp;quot;$STAGE&amp;quot; --tag vaultwarden&lt;br /&gt;
restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 700 /usr/local/sbin/vaultwarden-backup.sh&lt;br /&gt;
# täglich 02:30 Uhr&lt;br /&gt;
echo &amp;#039;30 2 * * * root /usr/local/sbin/vaultwarden-backup.sh &amp;gt;&amp;gt; /var/log/vaultwarden-backup.log 2&amp;gt;&amp;amp;1&amp;#039; &amp;gt; /etc/cron.d/vaultwarden-backup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;restic&amp;#039;&amp;#039;&amp;#039; verschlüsselt, dedupliziert und versioniert. Alternativen sind rustic, Borg oder eine vorhandene Backup-Software, die das Staging-Verzeichnis sichert.&lt;br /&gt;
* Das restic-Passwort &amp;#039;&amp;#039;&amp;#039;nicht nur&amp;#039;&amp;#039;&amp;#039; in Vaultwarden speichern – sonst ist es im Notfall mit verloren. Ausgedruckt im Tresor oder bei der Geschäftsführung hinterlegen.&lt;br /&gt;
* Mindestens eine Kopie &amp;#039;&amp;#039;&amp;#039;außer Haus&amp;#039;&amp;#039;&amp;#039; oder unveränderbar halten (3-2-1-Regel), siehe [[Offsite-Backup]] und [[Immutable Backup]].&lt;br /&gt;
* Erfolg überwachen: Log auswerten oder eine Monitoring-Prüfung auf das Alter des letzten Snapshots einrichten.&lt;br /&gt;
&lt;br /&gt;
== Schritt 3: Wiederherstellen ==&lt;br /&gt;
# Neuen Host mit Docker vorbereiten, gleiche Vaultwarden-Version wie im Backup oder neuer.&lt;br /&gt;
# Snapshot zurückholen: &amp;lt;code&amp;gt;restic restore latest --target /tmp/restore&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;compose.yaml&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;/opt/vaultwarden&amp;lt;/code&amp;gt; kopieren.&lt;br /&gt;
# Datenordner anlegen: Inhalt von &amp;lt;code&amp;gt;data/&amp;lt;/code&amp;gt; zurückkopieren und die gesicherte Datenbank als &amp;lt;code&amp;gt;data/db.sqlite3&amp;lt;/code&amp;gt; ablegen. Alte &amp;lt;code&amp;gt;db.sqlite3-wal&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-shm&amp;lt;/code&amp;gt; dürfen nicht liegen bleiben.&lt;br /&gt;
# Rechte setzen (bei Nicht-Root-Betrieb &amp;lt;code&amp;gt;chown -R 1000:1000 data&amp;lt;/code&amp;gt;) und &amp;lt;code&amp;gt;docker compose up -d&amp;lt;/code&amp;gt;.&lt;br /&gt;
# DNS bzw. Reverse Proxy auf den neuen Host umstellen und Anmeldung, Anhänge und Organisationen prüfen.&lt;br /&gt;
&lt;br /&gt;
== Restore-Test ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mindestens vierteljährlich&amp;#039;&amp;#039;&amp;#039; und nach größeren Updates eine Wiederherstellung auf einem isolierten Testsystem durchspielen, siehe [[Backup-Verifizierung]].&lt;br /&gt;
* Testinstanz ohne SMTP und ohne Push starten, damit keine E-Mails an Benutzer gehen.&lt;br /&gt;
* Prüfen: Anmeldung mit einem Testkonto, ein Eintrag mit Anhang, eine Organisation.&lt;br /&gt;
* Dauer und Ergebnis dokumentieren – das ist zugleich ein Nachweis für Audits und Versicherer.&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Notfallkopie: verschlüsselter Export ==&lt;br /&gt;
Gegen den schlimmsten Fall – Server und Backups unbrauchbar – hilft ein &amp;#039;&amp;#039;&amp;#039;Export auf Anwendungsebene&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Eigentümer exportieren die Organisation im Web-Tresor über &amp;#039;&amp;#039;Admin-Konsole › Tresor exportieren&amp;#039;&amp;#039; im Format &amp;#039;&amp;#039;.json (Verschlüsselt)&amp;#039;&amp;#039; mit einem eigenen Dateipasswort.&lt;br /&gt;
* Den Export auf einem verschlüsselten USB-Stick im Safe aufbewahren und regelmäßig erneuern.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nie&amp;#039;&amp;#039;&amp;#039; unverschlüsselte CSV- oder JSON-Exporte dauerhaft speichern.&lt;br /&gt;
* Der Export lässt sich in jede Bitwarden- oder Vaultwarden-Instanz importieren.&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Keine Snapshots als einziges Backup&amp;#039;&amp;#039;&amp;#039;: VM- oder Dateisystem-Snapshots sind laut Projekt fehleranfälliger als die Sicherung der Dateien; ergänzend sind sie in Ordnung.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Offline-Kopien in den Clients&amp;#039;&amp;#039;&amp;#039;: Desktop-App und Smartphone halten eine verschlüsselte lokale Kopie des Tresors. Sie ist kein Backup, hilft aber, während eines Ausfalls weiterzuarbeiten.&lt;br /&gt;
* Bei Planung und Betrieb von verschlüsselten Offsite-Backups unterstützt Sie das [https://www.max-it.de/it-services/cloud-backup/ Cloud-Backup von m.a.x. it].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Vaultwarden]] – Überblick und alle Artikel der Reihe&lt;br /&gt;
* [[Datensicherung]]&lt;br /&gt;
* [[Wiederherstellung]]&lt;br /&gt;
* [[Vaultwarden: Datenschutz und Betrieb im Unternehmen]]&lt;br /&gt;
&lt;br /&gt;
== Links und Quellen ==&lt;br /&gt;
* [https://github.com/dani-garcia/vaultwarden/wiki/Backing-up-your-vault Vaultwarden-Wiki: Backing up your vault]&lt;br /&gt;
* [https://www.max-it.de/it-services/cloud-backup/ Cloud-Backup von m.a.x. it]&lt;br /&gt;
&lt;br /&gt;
{{Uebermax}}&lt;br /&gt;
[[Kategorie:IT-Security]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;TechCorner-Redaktion</name></author>
	</entry>
</feed>