← Toutes les règles
SOCLE-CLD-GEN-038// Hardening (misc)moyenneétat d’inventaire

S'assurer que le groupe shadow est vide

Garantit que le groupe shadow n'a aucun membre, afin qu'aucun utilisateur n'obtienne d'accès en lecture à /etc/shadow et à ses empreintes de mots de passe.

Vérifié sur ce qui est installé ou enregistré, paquets présents/absents, bases de comptes.

Un PASS prouve✓ actif maintenant✓ sur disque✓ survit au rebootle verdict qualifié →
Debian 12CIS 1.1.0Debian 13CIS 1.0.0FedoraRHEL 10 / Rocky 10 / AlmaLinux 10RHEL 8 / Rocky 8 / AlmaLinux 8CIS 4.0.0RHEL 9 / Rocky 9 / AlmaLinux 9CIS 2.0.0Ubuntu 22.04CIS 3.0.0Ubuntu 24.04CIS 1.0.0Ubuntu 26.04
Un seul check, mappé sur 2 normes

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

Sous Debian/Ubuntu, le fichier /etc/shadow appartient au groupe shadow et est lisible par ce groupe. Tout utilisateur placé dans le groupe shadow obtient donc un accès en lecture aux empreintes de mots de passe de tous les comptes ainsi qu'aux données de vieillissement. Avec ce fichier, un attaquant peut lancer un outil de cassage hors-ligne contre les empreintes et exploiter les champs d'expiration pour cibler d'autres comptes. Le groupe shadow est destiné aux démons (via des binaires setgid), pas à des personnes ; il ne doit donc avoir aucun membre.

Ce que vérifie Pavois

Pavois inspecte le champ des membres de l'entrée shadow telle que résolue sur le système en cours d'exécution. Lire l'appartenance effective au groupe importe car un utilisateur peut aussi avoir shadow comme groupe primaire ou via un backend NSS ; l'état visé est qu'aucun compte humain ne liste shadow parmi ses groupes supplémentaires.

describe command('awk -F: \'($1=="shadow"){print $4}\' /etc/group') do
  its('stdout.strip') { should eq '' }
end

Comment vérifier qu’elle est appliquée

Listez le groupe shadow et confirmez que le champ des membres est vide :

  • getent group shadow, la sortie attendue se termine par un champ vide, par ex. shadow:x:42: (rien après le dernier deux-points).
  • awk -F: '($1=="shadow"){print $4}' /etc/group, la sortie attendue est vide.

Inspecter et investiguer

Les modifications d'appartenance aux groupes sont enregistrées par les outils de gestion des comptes :

  • grep -E 'shadow' /var/log/auth.log, affiche les actions usermod/gpasswd touchant le groupe shadow.
  • getent group shadow est la commande de référence pour l'état courant ; comparez-la avant et après toute modification.

Remédiation

Aucun plan de durcissement automatisé n'est défini pour cette règle ; elle doit être appliquée manuellement : retirez chaque utilisateur du groupe shadow avec gpasswd --delete <user> shadow (et corrigez tout compte dont le groupe primaire est shadow avec usermod -g <autre> <user>) jusqu'à ce que getent group shadow n'affiche plus de membres.

Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :

commandgetent group shadow # gpasswd -d <user> shadow for each unexpected member
reasonremoving members from the shadow group is deliberate (they lose shadow access)
resourcemanual
pavois harden plan local

où la cible est local, un alias SSH user@hôte, ou un conteneur , Docs

Impact & précautions

Risque si non appliqué : tout membre du groupe shadow peut lire chaque empreinte de mot de passe de l'hôte, permettant le cassage hors-ligne et les déplacements latéraux.

Précautions avant application : vérifiez pourquoi chaque membre a été ajouté, certains outils anciens ou agents de supervision peuvent dépendre de l'accès en lecture à shadow. Déplacez-les vers un assistant setgid dédié ou accordez l'accès de façon ciblée plutôt que de laisser des humains dans le groupe. Retirer des membres ne perturbe pas la connexion elle-même, car les lectures de /etc/shadow par PAM se font en root, pas via le groupe.

Mapping des normes

NormeRéférenceTypeVersionConfiance
CIS7.2.4, 8.3.2directper OS, see the benchmark tablehaute
PCI DSS8.3.2support4.0.1moyenne

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.

Sources & références