fix: Cert-Renewal-Handler kann /etc/ssl/archivmail nicht beschreiben (systemd-Sandbox)

ProtectSystem=strict + ReadOnlyPaths=.../etc/ssl/archivmail blockierte den
Cert-Handler (internal/api/cert_handlers.go) beim Erstellen/Erneuern von
Zertifikaten mit "read-only file system" — Fehler kam vom systemd-Namespace,
nicht von einem echten ro-Mount oder Owner-Problem. SSL_DIR gehört in
ReadWritePaths statt ReadOnlyPaths, da die Anwendung dort aktiv schreibt.

Fix im Unit-Generator in update.sh, nicht nur manuell am Server, da die
Unit bei jedem Deploy neu geschrieben wird.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019j28kGcaJAhBnrYX34hGdt
This commit is contained in:
sysops
2026-08-05 21:31:14 +02:00
co-authored by Claude Sonnet 5
parent d1b4497893
commit edf6f430df
2 changed files with 9 additions and 3 deletions
@@ -247,7 +247,13 @@ diese. Die Map-Instanz wird nie neu zugewiesen, Verhalten unverändert.
Verifikation: `npm run lint` → **0 Probleme**; `npx tsc --noEmit` → Verifikation: `npm run lint` → **0 Probleme**; `npx tsc --noEmit` →
**0 Fehler**; `npm run build` → **erfolgreich**, alle 14 Routen generiert. **0 Fehler**; `npm run build` → **erfolgreich**, alle 14 Routen generiert.
Kein Live-Test auf 131/132 — steht noch aus.
Lint-Fix + 30 Findings deployed auf 132 und 131 am 2026-08-05. Beide
Deploys via `update.sh` (Backend + Frontend Build erfolgreich), Backend ✓
läuft / Frontend ✓ läuft auf beiden Servern bestätigt. Health-Check
(`/api/health` → `{"status":"ok"}`) und Kernrouten `/`, `/search`,
`/admin/login` → alle HTTP 200 auf beiden Servern gegen den echten
laufenden Dienst geprüft.
## Acceptance Criteria ## Acceptance Criteria
+2 -2
View File
@@ -363,8 +363,8 @@ StandardError=journal
SyslogIdentifier=archivmail SyslogIdentifier=archivmail
NoNewPrivileges=false NoNewPrivileges=false
ProtectSystem=strict ProtectSystem=strict
ReadWritePaths=${STORE_DIR} ${LOG_DIR} ReadWritePaths=${STORE_DIR} ${LOG_DIR} ${SSL_DIR}
ReadOnlyPaths=${CONFIG_DIR} ${SSL_DIR} ReadOnlyPaths=${CONFIG_DIR}
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target