Lire des droits Unix
Sous Linux, macOS et les autres systèmes Unix, chaque fichier a un propriétaire et un groupe. Ses droits se répartissent en trois classes : le propriétaire (u, pour user), le groupe (g) et les autres (o), c'est-à-dire tous les comptes restants. Chaque classe reçoit ou non trois droits : lecture (r), écriture (w) et exécution (x).
La commande ls -l les affiche en neuf caractères précédés du type de fichier : -rwxr-xr-x se lit « fichier ordinaire ; propriétaire rwx, groupe r-x, autres r-x ». Un tiret marque un droit absent. Un d en tête signale un dossier.
Le calcul en octal
Chaque droit vaut un nombre ; on les additionne pour obtenir un chiffre par classe, de 0 à 7.
r = 4w = 2x = 1r + w + x, de 0 à 74 + 2 + 1 = 7, puis 4 + 1 = 5 deux fois : chmod 755 script.sh, ou en symbolique chmod u=rwx,g=rx,o=rx script.sh.
rw- pour le propriétaire (6), r-- pour le groupe (4), rien pour les autres (0) : chmod 640 config.php, soit u=rw,g=r,o=.
La forme symbolique de chmod, décrite par la norme POSIX, désigne une classe (u, g, o ou a pour les trois), un opérateur (= fixe, + ajoute, - retire) et des droits : chmod g+w fichier ajoute l'écriture au groupe sans toucher au reste. Le calculateur donne la forme avec =, qui fixe tous les droits d'un coup, comme l'octal.
Les droits les plus courants
| Octal | Symbolique | Usage |
|---|---|---|
| 644 | rw-r--r-- | fichier ordinaire, page web |
| 755 | rwxr-xr-x | script, programme, dossier |
| 600 | rw------- | fichier privé, clé SSH |
| 700 | rwx------ | dossier privé |
| 775 | rwxrwxr-x | dossier partagé en groupe |
Le client OpenSSH refuse une clé privée lisible par d'autres que son propriétaire : d'où le 600, et le 700 couramment recommandé pour le dossier ~/.ssh.
setuid, setgid et sticky bit
Un quatrième chiffre, placé en tête, porte trois bits spéciaux : setuid (4), setgid (2) et sticky (1). Ils s'additionnent comme les autres.
- setuid (4755) : le programme s'exécute avec les droits de son propriétaire, pas de celui qui le lance. C'est ainsi que
passwdpeut modifier le fichier des mots de passe. Linux l'ignore sur les scripts. - setgid (2755) : même principe avec le groupe ; sous Linux, posé sur un dossier, il fait hériter son groupe aux fichiers créés dedans.
- sticky (1777) : dans un dossier ouvert à tous comme
/tmp, chacun ne peut supprimer que ses propres fichiers. ls -l l'affiche rwxrwxrwt.
L'erreur du chmod 777
Quand un site affiche « permission refusée », la tentation est de tout ouvrir en 777. N'importe quel compte de la machine, y compris un script piraté, peut alors modifier ou remplacer le fichier. Cherchez plutôt quel compte doit écrire (souvent celui du serveur web), donnez-lui le fichier avec chown ou mettez-le dans le groupe, puis gardez 755 ou 775 pour les dossiers et 644 ou 664 pour les fichiers.
Questions fréquentes
Que signifie chmod 755 ?
7 pour le propriétaire (4 + 2 + 1 : lecture, écriture, exécution), 5 pour le groupe et 5 pour les autres (4 + 1 : lecture et exécution). C'est rwxr-xr-x : seul le propriétaire modifie, tout le monde lit et exécute.
Quelle différence entre 644 et 755 ?
Le droit d'exécution. 644 (rw-r--r--) convient à un fichier ordinaire, 755 (rwxr-xr-x) à un script ou à un dossier, qu'on ne peut pas traverser sans le droit x.
Que veut dire le x sur un dossier ?
Sur un dossier, r permet d'en lister le contenu, w d'y créer, renommer ou supprimer des fichiers, et x de le traverser pour atteindre ce qu'il contient.
Que signifie un s ou un t dans rwsr-xr-x ou rwxrwxrwt ?
Un s à la place du x du propriétaire ou du groupe signale setuid ou setgid ; un t à la place du dernier x signale le sticky bit. En majuscule (S, T), le bit spécial est posé sans le droit d'exécution.
Comment appliquer des droits à tout un dossier ?
Avec chmod -R, qui descend dans les sous-dossiers. Attention : chmod -R 644 retire le x des dossiers, qui deviennent impossibles à traverser. Pour donner des droits différents aux fichiers et aux dossiers, on passe par find.
Une erreur ? Signalez-la, nous la corrigeons.