Désactiver l'utilisation des espaces de noms utilisateur
Désactive les espaces de noms utilisateur non privilégiés en plafonnant user.max_user_namespaces à 0.
Vérifié sur l’état résolu en cours d’exécution (ex. sshd -T, sysctl, systemctl show), attrape les drop-ins et Include qu’une lecture de fichier raterait. Réserve : runtime ≠ persistance ; une valeur correcte maintenant peut ne pas survivre à un redémarrage.
Pourquoi cette règle
Les espaces de noms utilisateur permettent à un processus non privilégié d'obtenir l'ensemble des capacités root au sein d'un espace de noms isolé. Bien que puissants pour les conteneurs sans privilège, ils ont été à maintes reprises une source de vulnérabilités d'élévation de privilèges locale, car ils exposent à des utilisateurs ordinaires des chemins de code noyau normalement réservés à root. Fournir une fonctionnalité au-delà de ce dont le système a réellement besoin élargit la surface d'attaque. Sur les systèmes qui n'exécutent pas de conteneurs sans privilège, régler user.max_user_namespaces = 0 désactive entièrement la fonctionnalité et supprime cette classe de primitives d'exploitation.
Ce que vérifie Pavois
Pavois lit la valeur effective du noyau pour user.max_user_namespaces, pas un fichier de configuration. La valeur active fusionne /etc/sysctl.conf, les drop-ins dans /etc/sysctl.d/ et /run/sysctl.d/, les paramètres de démarrage du noyau et tout sysctl -w à chaud (les moteurs de conteneurs et Podman peuvent l'augmenter à l'exécution). Un fichier propre peut coexister avec un noyau qui autorise encore les espaces de noms utilisateur ; Pavois rapporte la valeur réellement appliquée.
describe kernel_parameter('user.max_user_namespaces') do
its('value') { should cmp 0 }
end
describe command("grep -hsE '^[[:space:]]*user.max_user_namespaces[[:space:]]*=[[:space:]]*0([[:space:]]|$)' /etc/sysctl.conf /etc/sysctl.d/*.conf /run/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf /lib/sysctl.d/*.conf 2>/dev/null") do
its('stdout') { should match(/\S/) }
endComment vérifier qu’elle est appliquée
Exécutez sysctl user.max_user_namespaces et vérifiez que la sortie est user.max_user_namespaces = 0. Vous pouvez aussi confirmer que la fonctionnalité est bloquée en tentant unshare --user --map-root-user true en tant qu'utilisateur non-root, la commande doit échouer.
Inspecter et investiguer
Aucun journal dédié. Inspectez l'état d'exécution avec sysctl user.max_user_namespaces. Les tentatives de création d'espaces de noms utilisateur lorsqu'ils sont désactivés échouent avec EPERM ; les échecs de conteneur/runtime mentionnant clone(CLONE_NEWUSER) ou des erreurs unshare dans journalctl indiquent que la restriction prend effet.
Remédiation
Le plan de durcissement de Pavois utilise la ressource sysctl pour définir user.max_user_namespaces = 0, en le persistant dans un drop-in géré et en l'appliquant à chaud. Exécutez pavois harden apply pour l'imposer ; il est réappliqué au démarrage via l'entrée persistante.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| key | user.max_user_namespaces |
|---|---|
| resource | sysctl |
| value | 0 |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Impact opérationnel élevé là où des conteneurs sans privilège/rootless sont utilisés : régler ce paramètre à 0 casse Podman rootless, Docker/runc non privilégié, systemd-nspawn, les navigateurs en bac à sable (sandbox Chrome/Firefox), les bacs à sable Flatpak/Snap, et tout outil reposant sur unshare --user. Avant d'appliquer, vérifiez que l'hôte n'exécute pas de conteneurs rootless ni de bacs à sable basés sur les espaces de noms. Sur les serveurs n'exécutant que des charges privilégiées, c'est un gain de durcissement important et réversible en réinitialisant la clé (aucun redémarrage nécessaire).