Unit mit StateDirectory/RuntimeDirectory, ProtectSystem=full und MountFlags=shared; compose mit SYS_ADMIN, DAC_READ_SEARCH, apparmor:unconfined und rshared-Bind für /mnt/netmover (Propagation zum Host im Container getestet). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
1.6 KiB
Desktop File
46 lines
1.6 KiB
Desktop File
# NetMover als systemd-Dienst direkt auf dem Host (empfohlen).
|
||
# Installation: siehe README, Abschnitt „Installation“.
|
||
[Unit]
|
||
Description=NetMover – NFS/SMB-Mounts und zeitgesteuertes Verschieben
|
||
Documentation=https://git.wilde-server.de/florian.wilde/netmover
|
||
Wants=network-online.target
|
||
After=network-online.target remote-fs-pre.target
|
||
|
||
[Service]
|
||
Type=exec
|
||
# root ist nötig: mount/umount brauchen CAP_SYS_ADMIN, und Dateien auf beliebigen
|
||
# Freigaben sollen mit den richtigen Eigentümern geschrieben werden (siehe README).
|
||
User=root
|
||
EnvironmentFile=-/etc/netmover/netmover.env
|
||
ExecStart=/opt/netmover/venv/bin/netmover serve
|
||
Restart=on-failure
|
||
RestartSec=5
|
||
# Beim Stoppen werden Mounts bewusst NICHT ausgehängt.
|
||
KillMode=mixed
|
||
TimeoutStopSec=20
|
||
|
||
# /var/lib/netmover (Datenbank, Schlüssel) und /run/netmover (kurzlebige
|
||
# Credentials-Dateien für mount.cifs) – beide nur für root lesbar.
|
||
StateDirectory=netmover
|
||
StateDirectoryMode=0700
|
||
RuntimeDirectory=netmover
|
||
RuntimeDirectoryMode=0700
|
||
|
||
# Härtung, soweit mit Mounten vereinbar.
|
||
# Die Optionen unten erzeugen einen eigenen Mount-Namespace für den Dienst.
|
||
# MountFlags=shared sorgt dafür, dass Mounts unter /mnt/netmover trotzdem im
|
||
# System sichtbar sind (prüfen mit: findmnt -R /mnt/netmover).
|
||
MountFlags=shared
|
||
# /usr, /boot und /etc schreibgeschützt; /mnt, /opt, /srv, /var bleiben schreibbar
|
||
# (lokale Ziele wie /opt/paperless/consume funktionieren also).
|
||
ProtectSystem=full
|
||
PrivateTmp=yes
|
||
NoNewPrivileges=yes
|
||
ProtectControlGroups=yes
|
||
LockPersonality=yes
|
||
RestrictRealtime=yes
|
||
UMask=0022
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|