Files
provisioning-server/provisioning-server.service
T

66 lines
2.6 KiB
Desktop File

[Unit]
Description=Provisioning Activation Server
After=network.target
[Service]
Type=simple
User=provisioning-server
Group=provisioning-server
WorkingDirectory=/opt/provisioning-server
EnvironmentFile=/etc/tuxflotte/provisioning-server.env
ExecStart=/opt/provisioning-server/.venv/bin/uvicorn app:app --host 0.0.0.0 --port 8080
Restart=always
RestartSec=3
# De-Root-Umzug (07.09.2026, siehe kundenplattform.service fuer das Vorbild
# und ADR-0011 fuer die urspruengliche root/non-root-Unterscheidung). Fast
# dieselbe Haertung wie dort, mit DREI bewussten Ausnahmen: NoNewPrivileges,
# CapabilityBoundingSet/AmbientCapabilities UND RestrictSUIDSGID bleiben
# HIER weg, weil run_iso_build() in app.py per scoped sudo (siehe
# provisioning-server-iso-build.sudoers) zu echtem root eskaliert -
# build_customer_iso.sh braucht das fuer CAP_CHOWN/CAP_FOWNER beim
# Wiederherstellen der Datei-Eigentuemer im Squashfs (NICHT fuer Mount/
# Device-Operationen - die wurden schon am 01.09.2026 umgangen, /dev bleibt
# ein leeres Verzeichnis). NoNewPrivileges wuerde sudos Setuid-Eskalation
# kernelseitig blockieren, eine geleerte CapabilityBoundingSet wuerde dem
# eskalierten Root-Kind dauerhaft die Capabilities entziehen, die es fuer
# den Chown-Erhalt braucht - beides also unvereinbar mit diesem einen
# schmalen, sudo-basierten Privileg-Pfad. Siehe ADR-0027.
#
# RestrictSUIDSGID (08.09.2026 als echten Regressionsbug gefunden UND
# entfernt): wirkt wie NoNewPrivileges per Seccomp-Filter unterhalb der
# UID-Ebene und wird deshalb NICHT durch sudo-Eskalation umgangen -
# blockierte beim ersten echten ISO-Build nach dem De-Root-Umzug (Debian-
# Referenzdistribution, siehe platform-docs/roadmap/
# multi-distro-merkmal-workspace-creator.md Phase 1) das Wiederherstellen
# der SUID-Bits von sudo/passwd/su/mount etc. beim unsquashfs-Schritt in
# build_customer_iso.sh ("set_attributes: ... Operation not permitted"),
# obwohl der Prozess ECHTES root war. Dieselbe Unvereinbarkeit wie bei
# NoNewPrivileges oben - war schlicht beim urspruenglichen De-Root-Umzug
# uebersehen worden, weil kein echter ISO-Build danach getestet wurde.
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/provisioning-server
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=yes
LockPersonality=yes
MemoryDenyWriteExecute=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectKernelLogs=yes
ProtectControlGroups=yes
ProtectClock=yes
ProtectHostname=yes
ProtectProc=invisible
ProcSubset=pid
PrivateDevices=yes
RemoveIPC=yes
RestrictRealtime=yes
SystemCallFilter=@system-service
SystemCallArchitectures=native
UMask=0077
[Install]
WantedBy=multi-user.target