Données persistantes et permissions Linux
Complément /etc/systemd/system/lab-demo.service.d/storage.conf :
[Service]
StateDirectory=lab-demo
StateDirectoryMode=0750
Après relecture et redémarrage, vérifier la configuration :
drwxr-x---. 2 labdemo labdemo ... /var/lib/lab-demo
StateDirectory= fait gérer ce dossier par systemd, avec l’identité User= / Group= du service. Son contenu persiste après arrêt et redémarrage du service ; il ne s’agit pas d’un répertoire temporaire.
Permissions 0750 : propriétaire lecture/écriture/traversée ; groupe lecture/traversée ; autres aucun accès. La traversée (x) d’un dossier permet d’accéder à ses entrées.
sudo -u labdemo touch /var/lib/lab-demo/test-ecriture
ls -l /var/lib/lab-demo/test-ecriture
Le touch n’a signalé aucune erreur ; le ls sous louis a été refusé. Cela est cohérent avec les droits : la seconde commande n’hérite pas du sudo de la première. Vérification sous le compte prévu :
sudo -u labdemo ls -l /var/lib/lab-demo/test-ecriture
Passage à strict et exception de stockage
sudo sed -i 's/^ProtectSystem=full$/ProtectSystem=strict/' \
/etc/systemd/system/lab-demo.service.d/security.conf
sudo systemctl daemon-reload
sudo systemctl restart lab-demo.service
systemctl show lab-demo.service -p ActiveState -p ProtectSystem -p StateDirectory
Exemples de résultats : ActiveState=active, ProtectSystem=strict, StateDirectory=lab-demo.
pid=$(systemctl show lab-demo.service -p MainPID --value)
sudo nsenter --target "$pid" --mount -- \
runuser -u labdemo -- touch /var/lib/lab-demo/test-strict
sudo nsenter --target "$pid" --mount -- touch /var/lib/lab-demo-interdit
Exemples de résultats : écriture sans erreur dans le dossier autorisé ; écriture à côté refusée pour montage en lecture seule, même sous root.
Deux contrôles distincts : le montage doit autoriser l’écriture et les permissions Linux doivent l’autoriser au compte. sudo -u labdemo seul vérifie les permissions du compte, sans reproduire les namespaces du service.
Nettoyage et contrôle de persistance :
sudo -u labdemo rm -f /var/lib/lab-demo/test-ecriture /var/lib/lab-demo/test-strict
sudo systemctl restart lab-demo.service
systemctl show lab-demo.service -p ActiveState -p User -p ProtectSystem -p StateDirectory
sudo -u labdemo ls -ld /var/lib/lab-demo
Un service peut rester disabled : les redémarrages manuels ne l’activent pas au démarrage de la VM.