Gegenbuch-Container: Rechte am Bind-Mount selbst geraderuecken

Fehlerbild aus dem echten Betrieb: "mkdir: cannot create directory
'/gegenbuch/schluessel': Permission denied", Container in der
Neustart-Schleife. Ursache: Das Datenverzeichnis kommt als Bind-Mount vom Host;
der Betreiber hatte das Projekt als root geklont, der Container lief aber
direkt als UID 1000 und durfte dort nichts anlegen. Der .gitkeep-Ansatz hatte
stillschweigend angenommen, dass als normaler Benutzer geklont wird - auf einem
Server ist root der Normalfall.

Fix: Der Container startet als root, setzt /gegenbuch per chown auf den
Arbeitsbenutzer (PUID/PGID, Standard 1000) und startet sich per setpriv als
dieser neu. Die eigentliche Arbeit laeuft weiterhin unprivilegiert. Schlaegt
das chown fehl (rootless Docker), gibt es einen Hinweis mit dem passenden
Host-Befehl statt eines stummen Abbruchs.

Verifiziert mit exakt der Ausgangslage: Datenverzeichnis auf root:root gesetzt,
Container gestartet -> laeuft durch, erzeugte Dateien gehoeren 1000:1000, der
private Schluessel liegt mit 0600.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 19:51:10 +02:00
co-authored by Claude Opus 5
parent 1eb65809ec
commit 601fb03b22
4 changed files with 49 additions and 4 deletions
+18
View File
@@ -97,6 +97,24 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🔧 Gegenbuch-Container: Rechte am Bind-Mount selbst geraderuecken** (2026-08-22)
- Fehlerbild aus dem echten Betrieb: `mkdir: cannot create directory
'/gegenbuch/schluessel': Permission denied`, Container in der
Neustart-Schleife. Ursache: Das Datenverzeichnis kommt als Bind-Mount vom
Host; der Betreiber hatte das Projekt als **root** geklont, der Container
lief aber direkt als UID 1000 und durfte dort nichts anlegen.
Mein `.gitkeep`-Ansatz hatte stillschweigend angenommen, dass als normaler
Benutzer geklont wird auf einem Server ist root der Normalfall.
- Fix: Der Container startet als root, setzt `/gegenbuch` per `chown` auf den
Arbeitsbenutzer (`PUID`/`PGID`, Standard 1000) und startet sich per
`setpriv` als dieser neu. Die eigentliche Arbeit laeuft damit weiterhin
unprivilegiert. Schlaegt das `chown` fehl (z. B. rootless Docker), gibt es
einen Hinweis mit dem passenden Host-Befehl statt eines stummen Abbruchs.
- Verifiziert mit exakt der Ausgangslage: Datenverzeichnis auf `root:root`
gesetzt, Container gestartet → laeuft durch, Schluessel und Buch werden
angelegt, erzeugte Dateien gehoeren 1000:1000, der private Schluessel liegt
mit `0600`.
- [x] **🔑 Gegenbuch: Dienstkonto statt Token, .env mit gueltigen Werten** (2026-08-22)
- **Blocker gefunden und behoben:** Ich hatte ein dauerhaftes API-Token
vorausgesetzt das gibt es in OpenCRM gar nicht. Zugangstoken leben