Activer le paramètre noyau pour appliquer le DAC sur les liens physiques
Définit fs.protected_hardlinks=1 pour que les utilisateurs ne puissent créer des liens physiques que vers des fichiers qu'ils possèdent ou peuvent lire/écrire, bloquant les détournements de privilèges par lien physique.
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.
Pavois vérifie la configuration effective, l’état résolu et réellement appliqué, pas un fichier. Les scanners basés fichier (OVAL/SCAP, Lynis) ratent les Include, drop-ins et défauts runtime ; ce check voit ce qui est réellement en vigueur.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
Avec fs.protected_hardlinks=1, un utilisateur ne peut créer un lien physique vers un fichier que s'il possède le fichier source ou qu'il dispose déjà d'un accès en lecture et écriture sur celui-ci. Sans cette protection, un utilisateur non privilégié peut créer un lien physique vers un fichier sensible (qu'il ne peut pas lire) dans un répertoire accessible en écriture et tromper un programme privilégié pour qu'il le suive, un vecteur d'exploitation TOCTOU / lien physique classique contre un usage non sûr de open() ou creat(). Appliquer le DAC à la création de liens physiques ferme cette voie.
Ce que vérifie Pavois
Pavois lit la valeur effective du noyau via la ressource kernel_parameter (équivalent à sysctl fs.protected_hardlinks), et non /etc/sysctl.conf ou un drop-in *.conf. Un fichier configuré peut n'avoir jamais été appliqué (faute de frappe, ordre de chargement, drop-in qui l'écrase) ; lire le noyau en cours d'exécution montre ce qui est réellement appliqué.
describe kernel_parameter('fs.protected_hardlinks') do
its('value') { should cmp 1 }
end
describe command("grep -hsE '^[[:space:]]*fs.protected_hardlinks[[:space:]]*=[[:space:]]*1([[: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 fs.protected_hardlinks, sortie attendue fs.protected_hardlinks = 1.
Inspecter et investiguer
Lisez la valeur courante avec sysctl fs.protected_hardlinks ou cat /proc/sys/fs/protected_hardlinks. Une création de lien physique refusée renvoie EPERM au programme appelant plutôt que de produire une ligne de log noyau ; consultez la sortie d'erreur de ce programme.
Remédiation
Le plan de durcissement de Pavois définit la clé sysctl fs.protected_hardlinks à 1, la persiste dans un drop-in géré et l'applique à chaud, de sorte que le noyau en cours d'exécution comme les démarrages futurs l'utilisent. Appliqué avec pavois harden apply.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| key | fs.protected_hardlinks |
|---|---|
| resource | sysctl |
| value | 1 |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Risque négligeable ; ce paramètre est activé par défaut sur la plupart des distributions modernes. Les logiciels corrects ne créent des liens physiques que vers des fichiers qu'ils possèdent. Quelques outils de sauvegarde ou de packaging qui créent des liens physiques au-delà des frontières de propriété pourraient recevoir EPERM ; testez-les si vous les utilisez. Réversible en remettant la clé à 0.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R14 | direct | 2.0 | haute |
| NIST | AC-6(1), CM-6(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| CIS | 1.5.2 | direct | per OS, see the benchmark table | haute |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.