feat(PROJ-66): Keyfile-Escrow-Hinweis bei Installation ausgeben

install.sh gibt das frisch generierte Keyfile nach der Erzeugung einmalig
aus (beide Installationspfade), mit Aufforderung es sofort in einen
Passwort-Safe (Bitwarden) zu verschieben. Backup ist ohne dieses Keyfile
wertlos — der Hinweis darf nicht vom "mach ich später" verschluckt werden,
da der Wert danach nirgends mehr sichtbar abrufbar ist.
This commit is contained in:
sysops
2026-07-04 15:13:33 +02:00
parent f3a7dea3cc
commit 2b70895a37
2 changed files with 30 additions and 0 deletions
+11
View File
@@ -269,6 +269,17 @@ selbst nicht verfügbar oder kompromittiert ist.
- Kein Blocker für die restlichen ACs — unabhängig von PBS/App-Backup - Kein Blocker für die restlichen ACs — unabhängig von PBS/App-Backup
umsetzbar, kleiner Zusatzschritt (Bitwarden-Eintrag anlegen, kein Code). umsetzbar, kleiner Zusatzschritt (Bitwarden-Eintrag anlegen, kein Code).
**Umgesetzt (2026-07-04):** `install.sh` gibt das frisch generierte Keyfile
direkt nach der Erzeugung einmalig auf der Konsole aus (`print_keyfile_escrow_warning()`,
beide Installationspfade — Docker- und Native-Modus), mit deutlichem Hinweis,
den Wert sofort in einen Passwort-Safe zu verschieben. Verhindert, dass der
Escrow-Schritt vom Bequemlichkeitsgrund "mach ich später" verschluckt wird —
der Wert steht sonst nirgends mehr sichtbar zur Verfügung, sobald die
Installations-Shell geschlossen ist (Keyfile-Datei selbst ist `chmod 400`,
nicht mehr casual auslesbar). Bereits bestehende Installationen (Keyfile
existiert schon) bekommen die Ausgabe NICHT erneut — dafür manuell
`cat /etc/archivmail/keyfile` einmalig ausführen und in Bitwarden nachtragen.
## Aufbewahrungsdauer / Rotation ## Aufbewahrungsdauer / Rotation
- Vorschlag: Tägliche Backups, Rotation nach Generationen-Prinzip: - Vorschlag: Tägliche Backups, Rotation nach Generationen-Prinzip:
+19
View File
@@ -16,6 +16,23 @@ info() { echo -e "${BLUE}[..]${NC} $*"; }
warn() { echo -e "${YELLOW}[!!]${NC} $*"; } warn() { echo -e "${YELLOW}[!!]${NC} $*"; }
die() { echo -e "${RED}[ERR]${NC} $*" >&2; exit 1; } die() { echo -e "${RED}[ERR]${NC} $*" >&2; exit 1; }
# PROJ-66: Ein Backup (App-Backup oder PBS/Snapshot) ist ohne dieses Keyfile
# wertlos — der Store bleibt Chiffretext. Der Inhalt wird EINMALIG bei der
# Generierung ausgegeben, damit er sofort in einen Passwort-Safe (z.B.
# Bitwarden Secure Note, siehe features/PROJ-66-backup-strategie.md) verschoben
# werden kann, statt sich später darauf zu verlassen, dass irgendein Backup
# das Keyfile schon mitgesichert hat.
print_keyfile_escrow_warning() {
local keyfile_path="$1"
echo
warn "WICHTIG — Keyfile jetzt sichern (Restore ist ohne dieses Keyfile unmöglich):"
echo -e "${YELLOW}$(cat "$keyfile_path")${NC}"
warn "Diesen Wert in einen separaten Passwort-Safe kopieren (z.B. Bitwarden Secure"
warn "Note, eigene Collection mit eingeschränktem Zugriff) — unabhängig von jedem"
warn "Server-Backup. Ohne Keyfile sind gesicherte Mail-Dateien nicht entschlüsselbar."
echo
}
[[ $EUID -eq 0 ]] || die "Bitte als root ausführen: sudo bash install.sh" [[ $EUID -eq 0 ]] || die "Bitte als root ausführen: sudo bash install.sh"
# ── OS-Prüfung: nur Debian 13 (trixie) ────────────────────────────────────── # ── OS-Prüfung: nur Debian 13 (trixie) ──────────────────────────────────────
@@ -143,6 +160,7 @@ https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_C
openssl rand -base64 32 > "$CONFIG_DIR/keyfile" openssl rand -base64 32 > "$CONFIG_DIR/keyfile"
chmod 400 "$CONFIG_DIR/keyfile" chmod 400 "$CONFIG_DIR/keyfile"
log "Keyfile generiert: $CONFIG_DIR/keyfile" log "Keyfile generiert: $CONFIG_DIR/keyfile"
print_keyfile_escrow_warning "$CONFIG_DIR/keyfile"
else else
log "Keyfile existiert bereits wird nicht überschrieben" log "Keyfile existiert bereits wird nicht überschrieben"
fi fi
@@ -451,6 +469,7 @@ install_native() {
chmod 400 "$CONFIG_DIR/keyfile" chmod 400 "$CONFIG_DIR/keyfile"
chown "$AM_USER:$AM_USER" "$CONFIG_DIR/keyfile" chown "$AM_USER:$AM_USER" "$CONFIG_DIR/keyfile"
log "Keyfile generiert: $CONFIG_DIR/keyfile" log "Keyfile generiert: $CONFIG_DIR/keyfile"
print_keyfile_escrow_warning "$CONFIG_DIR/keyfile"
else else
log "Keyfile existiert bereits wird nicht überschrieben" log "Keyfile existiert bereits wird nicht überschrieben"
fi fi