Sandbox-Optionen aus der systemd-Unit entfernen

Als Dienst schlug jeder Snapshot mit "cfs-lock 'storage-data' error: got
lock request timeout" fehl, waehrend derselbe Aufruf in der Shell
funktionierte.

Ursache war ProtectSystem=full in unserer eigenen Unit: das haengt /etc im
Namespace des Dienstes schreibgeschuetzt ein. pvesh fuehrt die Proxmox-API
im eigenen Prozess aus, der Snapshot-Task ist also ein Kindprozess von
pvesnap und erbt diese Einschraenkung. pmxcfs legt seine Sperren aber als
Verzeichnisse unter /etc/pve/priv/lock/ an - das mkdir scheitert, Proxmox
wiederholt es erfolglos und meldet am Ende einen Lock-Timeout statt eines
Rechtefehlers.

ProtectHome=yes war aus demselben Grund schaedlich: es blendet /root aus,
womit die SSH-Schluessel fuer die uebrigen Cluster-Nodes fehlen.

* Unit enthaelt keine Sandbox-Optionen mehr, mit Kommentar, warum nicht.
* Neu: pvesnap/preflight.py prueft root-Rechte, Schreibzugriff auf /etc/pve
  und Sichtbarkeit von /root. Der Dienst schreibt das beim Start ins
  Journal, "pvesnap check" zeigt es ebenfalls an - damit faellt so etwas
  sofort auf, statt sich als Lock-Timeout zu tarnen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-07-31 02:16:12 +02:00
co-authored by Claude Opus 5
parent e26d966a8b
commit 1be13ad294
5 changed files with 126 additions and 12 deletions
+16 -10
View File
@@ -14,19 +14,25 @@ Restart=on-failure
RestartSec=30
TimeoutStopSec=300
# pvesh benoetigt root-Rechte.
# pvesh fuehrt die API im eigenen Prozess aus - der Snapshot-Task ist also ein
# Kindprozess von pvesnap und erbt dessen Umgebung.
User=root
StateDirectory=pvesnap
RuntimeDirectory=pvesnap
# Moderate Absicherung - der Dienst muss auf pvesh und /etc/pve zugreifen.
NoNewPrivileges=yes
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full
ProtectKernelTunables=yes
ProtectControlGroups=yes
RestrictRealtime=yes
# ACHTUNG: Hier duerfen KEINE Sandbox-Optionen stehen.
#
# ProtectSystem= haengt /etc schreibgeschuetzt ein. pmxcfs legt seine
# Sperren aber als Verzeichnisse unter /etc/pve/priv/lock/
# an - das mkdir scheitert dann, Proxmox wiederholt es
# erfolglos und der Task endet in
# "cfs-lock 'storage-XXX' error: got lock request timeout".
# ProtectHome= blendet /root aus - damit fehlen die SSH-Schluessel, mit
# denen Proxmox andere Nodes im Cluster erreicht.
# PrivateTmp= gibt dem Dienst ein eigenes /tmp, das Proxmox-Werkzeuge
# nicht mit den uebrigen pve-Diensten teilen.
#
# Die Proxmox-eigenen Units (pvedaemon, pvescheduler) verzichten aus denselben
# Gruenden auf diese Optionen.
[Install]
WantedBy=multi-user.target