← Toutes les règles
SOCLE-CLD-IAM-011// Accounts (home dirs)moyenneétat du système de fichiers

Les fichiers d'initialisation utilisateur doivent appartenir au groupe primaire

Garantit que les fichiers cachés (par ex. .bashrc, .profile) à la racine du home de chaque utilisateur interactif appartiennent au groupe primaire de cet utilisateur.

Vérifié sur les métadonnées d’un chemin, mode, propriétaire, groupe, SUID/SGID.

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

Les fichiers d'initialisation locaux configurent l'environnement shell de l'utilisateur à la connexion. Si un fichier caché appartient à un groupe que l'utilisateur ne maîtrise pas, un membre de ce groupe pourrait modifier le fichier et exécuter du code dans la session de la victime à sa prochaine connexion, une compromission du compte au logon.

Ce que vérifie Pavois

Pavois lit le /etc/passwd réel pour connaître l'UID, le GID primaire et le home de chaque utilisateur interactif, puis exécute find -maxdepth 1 -type f -name '.[^.]*' ! -gid "$g" sur le home présent sur disque. Il compare au GID primaire effectif issu de passwd, détectant ainsi les fichiers cachés appartenant à un groupe obsolète ou partagé, quel que soit le modèle de squelette.

describe command('awk -F: \'($3>=1000 && $3!=65534 && $6!="/"){print $3":"$4":"$6}\' /etc/passwd | while IFS=: read u g h; do [ -d "$h" ] && timeout 60 find -P "$h" -maxdepth 1 -type f -name \'.[^.]*\' ! -gid "$g" -print 2>/dev/null; done | head -1') do
  its('exit_status') { should_not cmp 124 }  # timeout killed the scan: no evidence, not a pass
  its('stdout.strip') { should eq '' }
end

Comment vérifier qu’elle est appliquée

Pour un utilisateur, exécutez find ~user -maxdepth 1 -type f -name '.[^.]*' ! -gid $(id -g user) -printf '%p %g\n'. Attendu : aucune sortie (chaque fichier caché appartient au groupe primaire).

Inspecter et investiguer

Il n'y a pas de journal d'événements ; l'appartenance est inspectée directement. Auditez avec ls -la ~user | grep '^\.' ou stat -c '%U %G %n' ~user/.*. Si l'audit d'intégrité des fichiers est actif, les changements de groupe (chgrp) sur ces chemins apparaissent dans /var/log/audit/audit.log sous la clé de surveillance concernée.

Remédiation

Aucune remédiation automatique n'est fournie (remediation est vide) : appliquez manuellement. Pour chaque utilisateur signalé, réaffectez le groupe de ses fichiers cachés de premier niveau au groupe primaire, par ex. find ~user -maxdepth 1 -type f -name '.[^.]*' ! -gid $(id -g user) -exec chgrp $(id -gn user) {} +.

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

commandfor d in $(awk -F: '($3>=1000){print $6}' /etc/passwd); do find "$d" -maxdepth 1 -name '.*' 2>/dev/null; done # chgrp <user-group> per file after review
reasonfixing dot-file group is per-user, verify before chgrp'ing a user's files
resourcemanual
pavois harden plan local

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

Impact & précautions

Laisser des fichiers cachés appartenant à un groupe partagé permet l'exécution de code dans la session d'un autre utilisateur au logon. Précautions avant application : confirmez d'abord le groupe primaire voulu avec id -gn <user>, certains environnements utilisent volontairement un groupe de collaboration partagé ; lancer chgrp aveuglément pourrait casser des flux de travail ou retirer un accès de groupe nécessaire. Appliquez par utilisateur et évitez de descendre dans des sous-arbres montés ou liés par lien symbolique.

Mapping des normes

NormeRéférenceTypeVersionConfiance
ANSSI BP-028R50direct2.0haute
CIS7.2.10, 7.2.9directper OS, see the benchmark tablehaute

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