Vérifier que les fichiers de commandes système ont root comme groupe propriétaire
Garantit que chaque exécutable des répertoires de commandes système (/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin) a root comme groupe propriétaire.
Vérifié sur les métadonnées d’un chemin, mode, propriétaire, groupe, SUID/SGID.
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
Les binaires de /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin et /usr/local/sbin sont exécutés par des utilisateurs privilégiés et des services système. Si l'un de ces fichiers appartient à un groupe non système, tout membre de ce groupe pourrait remplacer ou modifier le binaire et faire exécuter son code avec les privilèges de celui qui le lance, une voie directe vers l'élévation de privilèges ou la persistance. Les conserver avec root comme groupe garantit que seul le compte le plus fiable peut altérer les commandes système.
Ce que vérifie Pavois
Pavois lance find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f ! -group root et attend une sortie vide : tout chemin renvoyé est un binaire dont le groupe n'est pas root. Analyser les fichiers réellement sur le disque (et non la base de données de paquets) détecte les outils installés manuellement, les scripts déposés dans /usr/local/bin et les binaires dont le groupe a été modifié après installation, précisément les cas qu'un audit de manifeste de paquet manque.
describe command('timeout 90 find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f ! -group root 2>/dev/null') do
its('exit_status') { should_not cmp 124 } # timeout killed the scan: no evidence, not a pass
its('stdout.strip') { should eq '' }
endComment vérifier qu’elle est appliquée
Lancez l'analyse manuellement :
find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f ! -group root
Sortie attendue : rien (vide). Tout chemin affiché est un binaire dont le groupe n'est pas root ; inspectez-le avec ls -l <fichier>.
Inspecter et investiguer
Listez les fautifs et leur groupe avec find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f ! -group root -printf '%g %p\n'. Sur les systèmes RPM, comparez aux métadonnées d'origine avec rpm -Vf <fichier> (drapeau G) ; sur Debian, les binaires empaquetés sont root par conception, donc un écart révèle une modification locale.
Remédiation
Aucun plan de durcissement automatisé n'est défini pour cette règle ; elle doit être appliquée manuellement. Après avoir identifié les fichiers fautifs, fixez leur groupe avec chgrp root <fichier> (uniquement pour les binaires qui doivent réellement appartenir à root). Cherchez pourquoi le groupe n'était pas root avant de le changer, un propriétaire inattendu peut signaler un binaire compromis ou mal installé.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| command | find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f \( ! -user root -o ! -group root \) -exec chown root:root {} + 2>/dev/null; true |
|---|---|
| name | fix-bindir-ownership |
| not_if | test -z "$(find /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f \( ! -user root -o ! -group root \) 2>/dev/null | head -1)" |
| resource | exec |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Risque en l'état : un binaire système modifiable permet à un membre d'un groupe non root de détourner tout processus privilégié qui l'exécute. Avant de corriger : confirmez que le fichier doit bien avoir root comme groupe, quelques paquets tiers livrent légitimement des utilitaires setgid appartenant à un groupe dédié, et leur appliquer chgrp root aveuglément peut casser l'outil ou son comportement setgid. Changez le propriétaire fichier par fichier, jamais par balayage récursif, et vérifiez d'abord l'intégrité du binaire (rpm -Vf / somme de contrôle connue).
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R50 | direct | 2.0 | haute |
| NIST | CM-5(6), CM-5(6).1 | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| DISA STIG | UBTU-22-232055, UBTU-24-300013 | direct | per OS STIG release | 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.