Sur Linux, chaque fichier et répertoire possède trois groupes de permissions : propriétaire (u), groupe (g) et autres (o). Chaque groupe combine lecture (r), écriture (w) et exécution (x).
Notation octale
Chaque droit vaut une valeur : r = 4, w = 2, x = 1. On additionne par groupe :
| Octal | Symbolique | Usage typique |
|---|---|---|
| 644 | rw-r--r-- | fichier de données, config non sensible |
| 600 | rw------- | clé privée SSH, fichier de secrets |
| 755 | rwxr-xr-x | exécutable, répertoire public |
| 700 | rwx------ | répertoire personnel (~/.ssh) |
| 775 | rwxrwxr-x | dossier partagé d'équipe |
Modification en pratique
chmod 640 /etc/app/secrets.env
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chown app:app /opt/app/data
Pour appliquer des droits différents aux fichiers et répertoires :
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;
Notation symbolique
chmod u+x script.sh # ajoute l'exécution au propriétaire
chmod g-w,o-rwx dossier # retire l'écriture au groupe et tout aux autres
chmod a+r rapport.pdf # tout le monde peut lire
Utilisez le calculateur chmod pour vérifier une combinaison avant de l'appliquer.
Bits spéciaux
- setuid (4) : le programme s'exécute avec les droits de son propriétaire. Nécessaire pour
passwd, risqué ailleurs. - setgid (2) : sur un répertoire, les nouveaux fichiers héritent du groupe — pratique pour un dossier partagé.
- sticky (1) : seul le propriétaire peut supprimer ses fichiers, comme dans
/tmp(1777).
Recherchez les setuid anormaux :
find / -perm -4000 -type f 2>/dev/null
umask : les droits par défaut
umask retire des droits à la création. Avec umask 022, un fichier créé obtient 644 et un répertoire 755. Pour un serveur, umask 027 dans /etc/profile durcit l'ensemble.
À retenir
- Ne mettez jamais 777 en production : c'est une invitation à l'exécution de code arbitraire.
- Les secrets (clés, tokens,
.env) restent en 600 et appartiennent à l'utilisateur du service. - Vérifiez régulièrement les fichiers modifiables par tous :
find / -perm -o+w -type f 2>/dev/null.