Sections du handbook

Permissions et propriété des fichiers

Revu le

Des fichiers sensibles comme /etc/shadow, les clés SSH et les tâches cron ne valent que ce que valent leurs bits de permission. Resserrez les droits, posez un UMASK strict, éliminez les fichiers modifiables par tous et passez en revue les SUID/SGID pour qu'un compte peu privilégié ne puisse ni lire de secrets ni s'élever.

La menace : un bit de permission relâché transforme un pied dans la place en compromission

Le contrôle d'accès discrétionnaire est la dernière ligne de défense quand un attaquant a déjà un compte sur la machine. Une permission relâchée transforme un pied dans la place en compromission : un /etc/shadow lisible par tous livre tous les hachages de mots de passe pour un cassage hors-ligne ; un /etc/passwd, /etc/sudoers ou /etc/crontab modifiable par le groupe permet à un utilisateur non privilégié de réécrire les identités, la politique sudo ou une tâche cron root et de s'élever à volonté. Les fichiers modifiables par tous (-rw-rw-rw-) dans des chemins partagés comme /tmp sont un vecteur classique d'attaques par lien symbolique et par injection de configuration. Les binaires SUID/SGID s'exécutent avec les privilèges du propriétaire quel que soit l'appelant : un seul binaire setuid-root mal placé est un chemin direct vers root. Et des clés d'hôte ou clés privées SSH lisibles par other minent toute la chaîne de confiance.

Pourquoi le durcir

Les permissions sont faciles à rater et catastrophiques quand elles le sont. Aucun exploit à écrire : l'attaquant lit simplement le fichier ou exécute le binaire que le noyau l'autorise déjà à toucher. Durcir ce domaine garantit que, même après la compromission d'un compte, les secrets restent illisibles, les fichiers de politique restent intouchables et qu'il n'existe aucun chemin surprise vers root, réduisant le rayon d'impact de toute autre faille.

Principes de défense appliqués

  • Moindre privilège : les secrets reçoivent le mode minimal. /etc/shadow et /etc/gshadow illisibles par le groupe/les autres (0000 ou 0640), /etc/sudoers réservé à root (0440), /etc/passwd//etc/group en 0644, journaux d'audit en 0640 ou plus strict.
  • Réduction de la surface d'attaque : aucun fichier modifiable par tous non autorisé ; aucun bit SUID/SGID parasite là où il est inutile.
  • Intégrité plutôt que confidentialité quand il le faut : /etc/passwd doit rester lisible par tous pour fonctionner, la règle est donc qu'il soit non modifiable par le groupe/les autres ; les fichiers d'identifiants reçoivent les deux.
  • Traçabilité : les fichiers journaux sous /var/log sont verrouillés pour qu'un attaquant ne puisse ni lire ni altérer les traces.
  • Contrôle fin avec les ACL : quand les modes propriétaire/groupe/autres sont trop grossiers, les ACL POSIX (setfacl/getfacl) accordent à un utilisateur précis exactement l'accès nécessaire.

Poser un défaut strict avec UMASK 027

Chaque fichier créé par un processus hérite d'un mode masqué par le UMASK. Le défaut permissif 022 rend les nouveaux fichiers lisibles par tous ; 027 retire tout accès aux autres (et l'écriture au groupe), si bien qu'un journal, une clé ou une config fraîchement écrits sont privés par défaut. Posez-le dans /etc/login.defs (UMASK 027), renforcez-le via PAM (pam_umask), et dans /etc/profile//etc/bashrc. C'est un filet de sécurité à l'échelle du système : il corrige les fichiers que vous oubliez, pas seulement ceux que vous chmodez.

Traquer les fichiers dangereux

# Fichiers modifiables par tous (et repertoires sans sticky bit)
find / -xdev -type f -perm -0002 -ls
find / -xdev -type d -perm -0002 ! -perm -1000 -ls

# Inventaire SUID / SGID : a comparer a une baseline connue
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -ls

# Fichiers sans proprietaire : l'UID d'un utilisateur supprime les possede encore
find / -xdev \( -nouser -o -nogroup \) -ls

Un fichier sans propriétaire est dangereux car un nouveau compte réutilisant cet UID en hérite silencieusement. Un binaire SUID surprise est le chemin d'escalade le plus court ; comparez l'inventaire à l'ensemble attendu de la distribution et faites chmod u-s sur tout ce qui est inattendu.

Ce que Pavois audite : le mode réel sur la cible

Les règles Permissions des fichiers de Pavois résolvent le mode et la propriété réels sur la cible (via la ressource file de CINC), pas ce qu'un modèle prétend. Il vérifie les fichiers d'identifiants/identité (/etc/shadow, /etc/gshadow ne portent aucun accès ; /etc/passwd, /etc/group sont non modifiables par le groupe/les autres, ainsi que leurs .bak), la politique de privilèges (/etc/sudoers, /etc/sudoers.d/), toute la surface cron/at, le matériel SSH (/etc/ssh, clés d'hôte, *.pub, sshd_config.d/), les fichiers du chargeur d'amorçage et les traces de journalisation. Chaque règle vérifie que les bits setuid/setgid/sticky sont absents là où ils doivent l'être, et une sentinelle modifiable par tous dédiée confirme que les chemins partagés comme /tmp ne sont pas modifiables par other. Ces contrôles sont mappés sur les sections permissions du CIS et ANSSI BP-028 R29/R50.

Pièges

  • Un chmod -R global casse des choses : resserrer /etc récursivement peut retirer les bits d'exécution des répertoires. Ciblez des fichiers précis.
  • Retirer un bit SUID légitime casse un outil (passwd, sudo, ping historiquement) : revoyez, ne retirez pas à l'aveugle.
  • Le UMASK à un seul endroit ne suffit pas : un shell de connexion, une tâche cron et un service systemd peuvent avoir chacun un umask différent ; posez-le dans login.defs et PAM.
  • /etc/passwd en 0600 casse la résolution des noms : il doit rester 0644 (lisible), seulement non modifiable par les autres.

FAQ

Pourquoi 0000/0640 sur /etc/shadow et pas 0644 ? Parce qu'il contient les hachages de mots de passe ; seul root (et le groupe shadow sur certaines distributions) en a besoin. Un shadow lisible par tous, c'est le cassage hors-ligne offert.

UMASK 022 ou 027 ? 027 pour un hôte durci : les nouveaux fichiers sont privés au propriétaire et au groupe, refusés aux autres. 022 les laisse lisibles par tous.

Comment trouver les chemins d'escalade oubliés ? Inventoriez les SUID/SGID (find -perm -4000), les fichiers modifiables par tous et les fichiers sans propriétaire ; comparez à la baseline de la distribution et à vos attentes.