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 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 '' }
endComment 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 :
| command | for 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 |
|---|---|
| reason | fixing dot-file group is per-user, verify before chgrp'ing a user's files |
| resource | manual |
pavois harden plan localoù 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
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R50 | direct | 2.0 | haute |
| CIS | 7.2.10, 7.2.9 | 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.