
Les services lancés via systemd
forment l’ossature des systèmes Linux modernes. Mal configurés, ils exposent des vecteurs d’attaque persistants. Ce guide propose des techniques de durcissement applicables aux unités systemd, incluant l’isolation, le sandboxing, les permissions restreintes, le socket activation, et l’audit continu.
1. Identifier les services exposés
ss -tulwnp
systemctl list-units --type=service
Repérer les services écoutant sur une interface réseau ou tournant avec des privilèges élevés.
2. Activer l’analyse de sécurité native systemd
systemd-analyze security nginx.service
Évalue la robustesse d’un service systemd selon 20 critères de sécurité (namespaces, sandboxing, capabilities…)
3. Isoler un service avec un profil minimal
[Service]
ProtectSystem=full
ProtectHome=yes
NoNewPrivileges=true
PrivateTmp=true
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_NET_RAW
RestrictAddressFamilies=AF_INET AF_UNIX
SystemCallFilter=~@mount @reboot
Ajoute des barrières au processus : accès limité au système de fichiers, suppression de certaines capacités noyau, restrictions réseau et appels système filtrés.
4. Restreindre les sockets réseau (Socket Activation)
Exemple pour activer un démon uniquement lorsqu’un client se connecte :
[Socket]
ListenStream=2222
Accept=true
[Install]
WantedBy=sockets.target
Réduit la fenêtre d’exposition réseau en activant les services à la demande.
5. Sandboxing réseau d’un service
Limite un service à une interface ou empêche les connexions sortantes :
IPAddressDeny=any
IPAddressAllow=10.10.10.0/24
RestrictAddressFamilies=AF_INET AF_UNIX
Contrôle fin du trafic sortant et entrant autorisé au service isolé.
6. Créer un namespace temporaire et immuable
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
ReadOnlyPaths=/usr /etc
ReadWritePaths=/var/www
Empêche la modification des composants critiques tout en autorisant un dossier applicatif modifiable.
7. Activer le journal sécurisé et exportable
journalctl -u monservice --since "1 hour ago" > /tmp/log.txt
Permet un audit ciblé et horodaté des services sensibles via journald.
8. Mettre en place un audit des binaires utilisés
Auditctl -w /usr/sbin/nginx -p x -k nginx_exec
Déclenche une alerte à chaque exécution du binaire surveillé. Exploitable avec ausearch ou un SIEM.
9. Surveiller les fichiers de configuration systemd
auditctl -w /etc/systemd/system/ -p wa -k systemd_config
Journalise toute modification, création ou suppression de service personnalisé.
10. Appliquer le principe du moindre privilège utilisateur
User=nginx
Group=nginx
UMask=0077
Évite que les services s’exécutent en root et limite les permissions par défaut sur les fichiers créés.
Conclusion
Durcir les unités systemd est une stratégie incontournable pour la sécurité Linux. L’approche par isolation (sandboxing, capabilities, syscall), journalisation, et activation conditionnelle limite fortement les vecteurs d’exploitation et améliore la robustesse du système face aux attaques locales et distantes.