66 lines
2.6 KiB
Desktop File
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
|