Aller au contenu principal

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.