diff --git a/Kapitel 6/Tutorial.md b/Kapitel 6/Tutorial.md new file mode 100644 index 0000000..78c67f7 --- /dev/null +++ b/Kapitel 6/Tutorial.md @@ -0,0 +1,192 @@ +🛠️ Kapitel 6 – Vaultwarden (ohne Docker, systemd) – Tutorial +Ein Weg, ohne Alternativen. Niveau: wie Readme dieses Kapitels. + +—————————— +Ziel +Vaultwarden als native Binary im Debian‑12‑LXC per systemd betreiben und hinter dem Nginx Proxy Manager veröffentlichen (HTTPS + WebSockets). Öffentliche Registrierung aus, Admin‑Token gesetzt, optional SMTP, Basis‑Backup. + +Voraussetzungen + +* LXC: Debian 12 (Bookworm), root +* NPM in separatem LXC vorhanden (Domain + Let’s Encrypt) +* LXC‑IP von Vaultwarden: \ (z. B. 10.0.0.16) + +Kerneinstellungen (fix) + +* **ROCKET\_ADDRESS = \** (weil NPM in separatem LXC läuft) +* **ROCKET\_PORT = 8000** +* **WEBSOCKET\_ADDRESS = \**, **WEBSOCKET\_PORT = 3012** +* **DOMAIN = [https://pass.DEINE‑DOMAIN.tld](https://pass.DEINE‑DOMAIN.tld)** +* **ADMIN\_TOKEN =** sicher, ≥ 64 Zeichen +* **SIGNUPS\_ALLOWED = false** + +—————————— + +1. System vorbereiten + +```bash +apt update && apt upgrade -y +apt install -y ca-certificates curl unzip openssl +# Systemnutzer ohne Login +useradd --system --home /var/lib/vaultwarden --shell /usr/sbin/nologin vaultwarden || true + +# Verzeichnisse +mkdir -p /opt/vaultwarden +mkdir -p /var/lib/vaultwarden/data +chown -R vaultwarden:vaultwarden /var/lib/vaultwarden +``` + +Prüfen: + +```bash +id vaultwarden +ls -ld /opt/vaultwarden /var/lib/vaultwarden /var/lib/vaultwarden/data +``` + +2. Binary laden und installieren + +> Wir laden immer die **neueste** „x86\_64‑unknown‑linux‑gnu“‑Release von GitHub. + +```bash +VW_URL=$(curl -s https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest \ + | grep browser_download_url \ + | grep x86_64-unknown-linux-gnu.tar.gz \ + | cut -d '"' -f 4) + +curl -L "$VW_URL" -o /tmp/vaultwarden.tar.gz +mkdir -p /tmp/vw && tar -xzf /tmp/vaultwarden.tar.gz -C /tmp/vw +install -m 0755 /tmp/vw/vaultwarden /opt/vaultwarden/vaultwarden +``` + +Prüfen: + +```bash +/opt/vaultwarden/vaultwarden --version || true +``` + +3. Konfiguration anlegen + +```bash +cat >/etc/vaultwarden.env <<'EOF' +DOMAIN=https://pass.DEINE-DOMAIN.tld +ADMIN_TOKEN=$(openssl rand -base64 48) +SIGNUPS_ALLOWED=false +WEBSOCKET_ENABLED=true +ROCKET_ADDRESS= +ROCKET_PORT=8000 +WEBSOCKET_ADDRESS= +WEBSOCKET_PORT=3012 +# Optional SMTP +# SMTP_HOST=smtp.example.com +# SMTP_FROM=pass@example.com +# SMTP_PORT=587 +# SMTP_SECURITY=starttls +# SMTP_USERNAME=user +# SMTP_PASSWORD=deinPasswort +EOF + +chown root:vaultwarden /etc/vaultwarden.env +chmod 0640 /etc/vaultwarden.env +``` + +Prüfen: + +```bash +grep -E '^(DOMAIN|ROCKET_ADDRESS|WEBSOCKET_ADDRESS)=' /etc/vaultwarden.env +``` + +4. systemd‑Service erstellen + +```bash +cat >/etc/systemd/system/vaultwarden.service <<'EOF' +[Unit] +Description=Vaultwarden (Bitwarden-compatible) – native +After=network.target + +[Service] +User=vaultwarden +Group=vaultwarden +EnvironmentFile=/etc/vaultwarden.env +ExecStart=/opt/vaultwarden/vaultwarden +WorkingDirectory=/var/lib/vaultwarden +# Hardening (schlank & sicher) +LimitNOFILE=1048576 +PrivateTmp=true +ProtectSystem=full +ProtectHome=true +NoNewPrivileges=true + +[Install] +WantedBy=multi-user.target +EOF + +systemctl daemon-reload +systemctl enable --now vaultwarden +systemctl status vaultwarden --no-pager +``` + +Prüfen (sollte „active (running)“ sein): + +```bash +ss -tulpn | grep -E ':8000|:3012' +``` + +5. NPM: Proxy‑Host + WebSockets + SSL + +* **Hosts → Proxy Hosts → Add Proxy Host** + + * Domain Names: `pass.DEINE-DOMAIN.tld` + * Scheme: http + * Forward Hostname / IP: **\** + * Forward Port: **8000** + * Block Common Exploits: an + * Websockets Support: an +* **Custom Locations → Add Location** + + * Location: **/notifications/hub** + * Forward Hostname / IP: **\** + * Forward Port: **3012** + * Websockets Support: an +* **SSL** + + * Request a new SSL Certificate (Let’s Encrypt) + * Force SSL, HTTP/2, HSTS: an + +Prüfen: + +* `https://pass.DEINE-DOMAIN.tld` öffnet die Login‑Seite. +* WebSocket: Eintrag von einem zweiten Client ändern → Live‑Sync sichtbar. + +6. Erstkonfiguration (Web‑UI) + +* Admin‑Backend: `https://pass.DEINE-DOMAIN.tld/admin` → **ADMIN\_TOKEN** eingeben. +* **Signups**: „Signups allowed“ **aus**. +* Optional **SMTP** eintragen (Testmail senden). +* Erstes Benutzerkonto anlegen und **2FA (TOTP/FIDO2)** aktivieren. + +7. Backup (Basis) + +```bash +# Kurzvariante (läuft online); für 100% Konsistenz ggf. Dienst kurz stoppen +# systemctl stop vaultwarden + +tar -czf /root/vaultwarden-backup-$(date +%F).tar.gz -C /var/lib vaultwarden + +# systemctl start vaultwarden +ls -lh /root/vaultwarden-backup-*.tar.gz +``` + +Cron‑Hinweis: Regelmäßig sichern; Restore testweise separat prüfen. + +—————————— +Stolperfallen + +* **ROCKET\_/WEBSOCKET\_ADDRESS falsch** → NPM erreicht den Dienst nicht. +* **WebSockets nicht weitergeleitet** → Live‑Sync/Push funktioniert nicht. +* **DOMAIN nicht https** → fehlerhafte Links/Icons. +* **ADMIN\_TOKEN zu kurz/unsicher** → Risiko fürs Admin‑Backend. +* **Signups offen** → ungewollte Accounts. + +Ergebnis + +* Vaultwarden läuft nativ im LXC, ist über `https://pass.DEINE-DOMAIN.tld` erreichbar, WebSockets funktionieren, Registrierungen sind aus, Admin‑Backend ist geschützt; Backups vorhanden.