Container startete mit USER appuser nicht: SQLite gibt
'attempt to write a readonly database' — Synology DSM Volume-
Permissions blockieren chown auf gemountete Pfade.
User-Anlage (groupadd/useradd) bleibt im Dockerfile, plus
chown nach mkdir. Nur die USER-Zeile ist auskommentiert mit
Kommentar warum. Für Non-DS-Deployments einfach Zeile
aktivieren.
VAPID-Keys-Migration bleibt — die war erfolgreich.
1. VAPID-Keys aus docker-compose.yml und docker-compose.staging.yml
entfernt. Werden jetzt aus .env gelesen (env_file war schon da,
nur die environment-Override hat die .env-Werte überschrieben).
.env auf DS um die 3 Keys ergänzt:
- VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_CONTACT
Erst Compose-Änderung wirksam — Push-Notifications funktionieren
weiter weil die .env die Werte liefert.
2. Dockerfile-Hardening: Non-root USER appuser.
- groupadd/useradd appuser (UID/GID 1000 für DS-Kompatibilität)
- chown -R appuser:appuser /app /data nach mkdir
- USER appuser vor CMD
Memory says DSM ACLs könnten Probleme machen. Falls Container
nicht startet → Rückbau. Bei Deploy genau hinsehen.
3. E-Mail-Änderungs-Audit-Punkt: kein Vulnerability gefunden.
ProfileUpdate-Schema enthält kein 'email'-Feld. User können
ihre E-Mail-Adresse aktuell gar nicht ändern → kein Takeover-
Vektor wie im Audit vermutet.
main.py liest APP_VER aus /app/VERSION beim Container-Start.
Dockerfile kopierte aber nur backend/, nicht die VERSION im Root.
→ /api/version lieferte '0'.
Fix: explizit COPY VERSION /app/VERSION ergänzt.
Ohne dieses Flag sehen alle Container-Requests die NPM-Bridge-IP (192.168.160.x)
als Client. Rate-Limits und Honeypot-Blocklist blockierten dadurch alle User
gleichzeitig sobald ein einziger Trigger auftrat.
Synology DSM verwendet ACLs (+) auf Docker-Volumes die Vorrang vor Linux-
Basisrechten haben. chown/gosu funktioniert nicht gegen DSM-ACLs.
Container läuft weiterhin als root im geschlossenen Docker-Netz.