Chmod
| Fiche express | |
|---|---|
| Domaine | Permissions fichiers/dossiers |
| Commande | chmod
|
| Contexte | Unix/Linux, toutes distributions |
| Voir aussi | Chown (propriétaire), Umask (droits par défaut) |
chmod (change mode) modifie les droits d'accès (lecture, écriture, exécution) d'un fichier ou d'un répertoire, pour trois catégories d'utilisateurs : le propriétaire (user), le groupe propriétaire (group) et les autres (others).
Vérifier les droits actuels
ls -l fichier.txt
ls -l /chemin/vers/dossier
Résultat typique :
drwxr-xr-x 4 root root 4096 jun 23 15:24 home
-rw-r--r-- 1 root root 220 jun 23 15:24 fichier.txt
Les 10 premiers caractères se lisent : type de fichier (d = dossier,
- = fichier, l = lien symbolique), puis trois blocs de trois
lettres (rwx) pour user / group / others.
Notation symbolique
On ajoute (+), retire (-) ou fixe (=) des droits
pour une ou plusieurs catégories (u, g, o, ou
a pour toutes) :
chmod g+r fichier.txt # ajoute la lecture au groupe
chmod g+rw fichier.txt # ajoute lecture + écriture au groupe
chmod u+x fichier.txt # ajoute l'exécution au propriétaire
chmod o-w fichier.txt # retire l'écriture aux autres
chmod a+x script.sh # ajoute l'exécution à tout le monde
chmod -R g+w dossier/ # applique récursivement à un dossier et son contenu
Notation numérique (octale)
Chaque droit a une valeur : lecture (r) = 4, écriture (w) = 2, exécution (x) = 1. On additionne les valeurs voulues pour chaque catégorie (user, group, others), ce qui donne un chiffre de 0 à 7 par catégorie :
4+2+1 = 7 = rwx
4+2+0 = 6 = rw-
4+0+1 = 5 = r-x
4+0+0 = 4 = r--
0+0+0 = 0 = ---
Exemple : droits rwx pour le propriétaire, r-- pour le groupe,
rien pour les autres :
chmod 740 fichier.txt
Droits spéciaux : SUID, SGID, sticky bit
Un quatrième chiffre (en préfixe) permet de fixer les droits spéciaux :
chmod 4755 /root/shell/script.sh # SUID : exécuté avec les droits du propriétaire
chmod 2755 /root/shell/script.sh # SGID : exécuté avec les droits du groupe
chmod 1777 /tmp # sticky bit : seul le propriétaire d'un fichier
# peut l'effacer dans ce dossier partagé
Équivalents en notation symbolique :
chmod u+s script.sh # SUID
chmod g+s script.sh # SGID
chmod +t /tmp # sticky bit (catégorie "others", pas de lettre u/g/o à préciser)
SUID : quand un exécutable appartenant à root est SUID, il tourne avec les droits
de root quel que soit l'utilisateur qui le lance — c'est le cas de passwd,
qui doit pouvoir écrire dans /etc/shadow alors que seul root y a accès en
écriture. SGID fonctionne pareil mais avec les droits du groupe propriétaire (utile
aussi sur un dossier : les nouveaux fichiers créés dedans héritent alors du groupe du
dossier). Le sticky bit sur un dossier partagé en écriture (comme /tmp)
empêche un utilisateur d'effacer les fichiers d'un autre, même s'il a le droit d'écriture
sur le dossier.
⚠️ u+t n'a aucun effet : le sticky bit ne se fixe que via +t ou
o+t, jamais sur la catégorie user.