Contactez-nous

Modifier les permissions avec `chmod` (modes octal et symbolique de base)

Apprenez à utiliser la commande `chmod` pour modifier les permissions de fichiers sous Linux, en utilisant les modes octal (chiffres) et symbolique (lettres).

Prendre le contrôle : la commande `chmod` (Change Mode)

Après avoir appris à visualiser les permissions d'un fichier ou d'un répertoire avec ls -l, l'étape suivante est de savoir comment les modifier. C'est le rôle de la commande chmod (abréviation de "change mode"). Cette commande puissante vous permet d'ajuster finement les droits de lecture, d'écriture et d'exécution pour le propriétaire, le groupe et les autres.

La maîtrise de chmod est essentielle pour sécuriser vos fichiers, accorder des accès spécifiques à d'autres utilisateurs ou à des scripts, et assurer le bon fonctionnement de certaines applications qui nécessitent des permissions particulières. Il existe deux manières principales de spécifier les nouvelles permissions avec chmod : le mode symbolique (utilisant des lettres et des opérateurs) et le mode octal (utilisant des chiffres). Les deux aboutissent au même résultat mais offrent des approches différentes.

Ce sous-chapitre vous guidera à travers ces deux modes, en expliquant leur syntaxe et leur logique, avec des exemples concrets pour illustrer leur utilisation. Seul le propriétaire d'un fichier ou l'utilisateur root peut changer les permissions d'un fichier.

Le mode symbolique : une approche descriptive

Le mode symbolique de chmod utilise des lettres pour représenter les catégories d'utilisateurs, les opérateurs pour ajouter, supprimer ou définir des permissions, et les lettres des permissions elles-mêmes.

La syntaxe générale est :

chmod [qui][operateur][permissions] fichier_ou_repertoire
Qui (catégories d'utilisateurs) :
  • u : L'utilisateur propriétaire (user).
  • g : Le groupe propriétaire (group).
  • o : Les autres (others).
  • a : Tous (all), c'est-à-dire u, g, et o combinés. Si aucune catégorie n'est spécifiée, a est souvent implicite, mais le comportement exact peut dépendre de l'umask (que nous n'aborderons pas ici en détail). Il est plus sûr de spécifier la catégorie.
Opérateur :
  • + : Ajoute la permission spécifiée.
  • - : Supprime la permission spécifiée.
  • = : Définit les permissions exactement comme spécifié (et supprime les autres permissions pour cette catégorie).
Permissions :
  • r : Droit de lecture.
  • w : Droit d'écriture.
  • x : Droit d'exécution.
  • X : Droit d'exécution "spécial". Ajoute le droit x uniquement si l'élément est un répertoire ou s'il a déjà le droit x pour au moins une catégorie. Utile avec l'option récursive -R.
  • s : Pour les bits SetUID (avec u) ou SetGID (avec g).
  • t : Pour le sticky bit (généralement avec o, ou implicitement sur les répertoires).

(Nous nous concentrerons sur r, w, x pour les bases.)

Exemples en mode symbolique :
  • Ajouter le droit d'exécution pour le propriétaire (user) sur mon_script.sh :
    chmod u+x mon_script.sh
  • Supprimer le droit d'écriture pour le groupe et les autres sur fichier_sensible.txt :
    chmod go-w fichier_sensible.txt
  • Donner au propriétaire les droits de lecture et d'écriture, et seulement lecture au groupe et aux autres, sur rapport.doc :
    chmod u=rw,go=r rapport.doc
    (Notez la virgule pour séparer plusieurs spécifications.)
  • Ajouter le droit de lecture à tout le monde (all) sur public_info.txt :
    chmod a+r public_info.txt
  • Supprimer tous les droits pour les autres sur document_prive :
    chmod o= document_prive
    (aucun droit après le = signifie aucun droit)

Le mode symbolique est souvent plus intuitif lorsqu'on veut faire des modifications relatives aux permissions existantes (ajouter ou enlever un droit spécifique).

Le mode octal (numérique) : une approche absolue

Le mode octal de chmod utilise des chiffres pour représenter les combinaisons de permissions. Chaque permission (r, w, x) a une valeur numérique :

  • r (lecture) = 4
  • w (écriture) = 2
  • x (exécution) = 1

Pour obtenir la valeur d'un triplet de permissions (pour le propriétaire, le groupe, ou les autres), on additionne les valeurs des permissions accordées :

  • --- (aucun droit) = 0 (0+0+0)
  • --x (exécution seulement) = 1 (0+0+1)
  • -w- (écriture seulement) = 2 (0+2+0)
  • -wx (écriture et exécution) = 3 (0+2+1)
  • r-- (lecture seulement) = 4 (4+0+0)
  • r-x (lecture et exécution) = 5 (4+0+1)
  • rw- (lecture et écriture) = 6 (4+2+0)
  • rwx (tous les droits) = 7 (4+2+1)

Avec chmod en mode octal, on spécifie un nombre à trois chiffres (ou quatre si on inclut les bits spéciaux SetUID, SetGID, Sticky bit, que nous ignorons pour l'instant). Chaque chiffre correspond, de gauche à droite, aux permissions du propriétaire, du groupe, et des autres.

Syntaxe générale :
chmod NNN fichier_ou_repertoire

Où NNN est le nombre à trois chiffres.

Exemples en mode octal :
  • Mettre les permissions rwxr-xr-x (propriétaire : tous droits ; groupe et autres : lecture et exécution) sur mon_programme :
    Propriétaire : rwx = 7
    Groupe : r-x = 5
    Autres : r-x = 5
    Commande :
    chmod 755 mon_programme
  • Mettre les permissions rw-r--r-- (propriétaire : lecture/écriture ; groupe et autres : lecture) sur document.txt (permissions typiques pour un fichier de données) :
    Propriétaire : rw- = 6
    Groupe : r-- = 4
    Autres : r-- = 4
    Commande :
    chmod 644 document.txt
  • Mettre les permissions rw------- (propriétaire : lecture/écriture ; groupe et autres : aucun droit) sur fichier_secret.dat :
    Propriétaire : rw- = 6
    Groupe : --- = 0
    Autres : --- = 0
    Commande :
    chmod 600 fichier_secret.dat
  • Pour un répertoire que seul le propriétaire peut lister, modifier et traverser, et personne d'autre ne peut même y accéder (rwx------) :
    chmod 700 mon_dossier_prive

Le mode octal définit les permissions de manière absolue. Il écrase toutes les permissions précédentes pour les remplacer par celles spécifiées.

Option récursive -R :

Comme avec cp ou rm, l'option -R (ou --recursive) avec chmod applique les changements de permissions à un répertoire et à tout son contenu (fichiers et sous-répertoires).

chmod -R 750 MonProjet/
Soyez très prudent avec chmod -R, surtout si vous utilisez des permissions très restrictives ou très permissives, car cela peut avoir des conséquences importantes sur l'accessibilité ou la sécurité de nombreux fichiers. Par exemple, donner la permission d'exécution à tous les fichiers d'un répertoire contenant des documents texte n'a pas de sens et peut être déroutant. Il est souvent préférable d'utiliser find avec -exec chmod pour appliquer des permissions différentes aux fichiers et aux répertoires de manière sélective (sujet plus avancé).

En résumé, le mode symbolique est pratique pour des ajustements ciblés, tandis que le mode octal est rapide pour définir un ensemble complet de permissions. Les deux sont largement utilisés, et le choix dépend souvent de la préférence personnelle et de la situation.