Chmod

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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.

Voir aussi

  • Chown — changer le propriétaire et le groupe d'un fichier
  • Umask — droits appliqués par défaut à la création d'un fichier