Aller au contenu principal

Protections systemd : configuration et preuves

Après création du complément, daemon-reload puis restart ont été exécutés. La valeur initiale ProtectSystem=full a ensuite été remplacée par strict.

Configuration finale de security.conf :

[Service]
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
OptionEffet étudié
NoNewPrivileges=yesEmpêche un processus et ses descendants de gagner des privilèges via une exécution de programme, notamment setuid ou capabilities de fichier
PrivateTmp=yesFournit une vue privée de /tmp et /var/tmp ; les fichiers temporaires du service sont nettoyés à son arrêt
ProtectSystem=fullRend /usr, /boot, /efi et /etc en lecture seule pour le service ; ne couvre pas tout /var/lib
ProtectSystem=strictRend la hiérarchie des fichiers en lecture seule, avec des exceptions et des systèmes de fichiers API traités séparément ; les répertoires gérés par StateDirectory= restent accessibles en écriture
ProtectHome=yesRend /home, /root et /run/user inaccessibles et masque leur contenu

NoNewPrivileges : état du processus​

pid=$(systemctl show lab-demo.service -p MainPID --value)
grep '^NoNewPrivs:' "/proc/$pid/status"

Exemple de résultat : NoNewPrivs: 1. La configuration déclarée et l’état réel du processus sont deux vérifications distinctes.

PrivateTmp : comparer les deux vues​

Créer le fichier dans la session normale :

printf 'visible depuis la VM\n' > /tmp/lab-demo-test.txt
cat /tmp/lab-demo-test.txt

Puis :

pid=$(systemctl show lab-demo.service -p MainPID --value)
sudo nsenter --target "$pid" --mount -- ls -l /tmp/lab-demo-test.txt

Exemple de résultat dans la vue du service : fichier introuvable. Ce test démontre l’isolation si le fichier existe bien dans le /tmp de la session normale. Nettoyage : rm /tmp/lab-demo-test.txt depuis la session normale.

ProtectSystem=full : écriture dans /etc​

sudo nsenter --target "$pid" --mount -- touch /etc/lab-demo-test

Exemple de résultat : système de fichiers accessible en lecture seulement. La commande était root : le test isole donc le blocage du montage des permissions du compte labdemo.

ProtectHome : vue de /home​

ls /home
sudo nsenter --target "$pid" --mount -- ls /home

Exemples de résultats : louis dans la session normale, aucune entrée dans la vue du service.