18/01/2025

Commandes et Système

Linux : comment gérer les permissions avec la commande chmod ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à gérer les permissions sous Linux grâce à l'utilisation de la commande chmod. Il s'agit d'une commande indispensable que vous devez absolument connaître et maîtriser pour administrer un serveur ou un poste de travail sous Linux (Ubuntu, Debian, AlmaLinux, etc.).

Les permissions sont utilisées pour gérer les accès aux fichiers et aux répertoires. La commande chmod est utilisée pour modifier ces permissions. Nous parlerons du modèle de permissions de Linux, avant d'évoquer l'utilisation de la commande chmod au travers différents exemples. La commande chmod permet de changer les permissions, soit en mode symbolique, soit en mode numérique, donc nous verrons les deux possibilités.

Ce tutoriel est rédigé à partir d'une machine sous Debian 12, mais vous pouvez utiliser une autre distribution Linux.

Version originale de l'article : 27 novembre 2011.

II. Comprendre les permissions sous Linux

Avant d'évoquer l'utilisation de la commande chmod en elle-même, il me semble important d'effectuer quelques rappels sur le fonctionnement des permissions sous Linux. Ici, nous évoquerons uniquement le principe de base via les permissions de lecture, d'écriture et d'exécution.

Chaque fichier ou répertoire est associé à trois types de permissions :

  1. Lecture (r) : voir le contenu d'un fichier ou lister un répertoire.
  2. Écriture (w) : modifier un fichier ou son contenu, ou ajouter/supprimer des fichiers dans un répertoire.
  3. Exécution (x) : exécuter un fichier ou entrer dans un répertoire (permission nécessaire pour exécuter un script Bash, par exemple).

Ces permissions s'appliquent à trois catégories d'utilisateurs :

  • Propriétaire (user) : l'utilisateur qui possède le fichier, donc le propriétaire.
  • Groupe (group) : les membres du groupe associé au fichier.
  • Autres (others) : tous les autres utilisateurs.

À partir de là, il est envisageable de définir l'accès aux données, notamment qui peut lire et/ou modifier un fichier spécifique.

III. Afficher et interpréter les permissions

A. Lire les permissions sur Linux

Pour afficher les permissions d'un fichier ou d'un répertoire, nous devons utiliser la commande ls. Dans un Terminal, exécutez la commande "ls -l" pour afficher les permissions d'un fichier ou d'un répertoire. Par exemple, pour avoir cette information sur le fichier "/etc/shadow" présent sur toutes les machines Linux, nous exécuterons ceci :

ls -l /etc/shadow

Voici une sortie typique pour ce fichier :

-rw-r----- 1 root shadow 1191  3 janv. 11:14 /etc/shadow

Cette ligne permet de prendre connaissance des permissions actuelles définies sur ce fichier (rw-r-----), ainsi que le nom du propriétaire (root) et le nom du groupe (shadow). Voici comment interpréter le résultat de cette commande :

Linux - Interpréter les permissions d'un fichier

B. Les permissions : r,w, x

Ce que vous devez retenir, c'est que les permissions sont définies dans une chaine de 9 caractères divisée en 3 blocs afin de correspondre aux permissions du propriétaire, du groupe et des autres.

  • r : permission de lecture
  • w : permission d'écriture (modification)
  • x : permission d'exécution
  • - : pas de permissions

Les permissions sont toujours construites de cette façon : lecture, écriture, exécution, soit "rwx". Si la permission est "r--" sur un fichier, cela signifie qu'il est possible de lire le fichier, sans pouvoir le modifier (ni l'exécuter). Cette même permission sur un dossier signifie que le contenu du répertoire peut être affiché, mais l'utilisateur ne peut pas créer, modifier ou supprimer un fichier ou dossier dans ce répertoire.

Dans notre cas, nous pouvons donc affirmer que le compte "root" dispose des autorisations de lecture et écriture sur le fichier "/etc/shadow", tandis que les membres du groupe "shadow" peuvent lire son contenu. Tous les autres utilisateurs n'ont aucun accès à ce fichier.

C. Permissions spéciales : setuid, setgid, et sticky bit

Pour terminer, et de façon succincte, car ce n'est pas le sujet principal de cet article, nous allons évoquer les permissions spéciales. Il est possible de rencontrer ces valeurs au niveau de la troisième valeur d'un groupe de permissions (à la place du "x").

Ces bits spéciaux ajoutent des fonctionnalités supplémentaires :

  • Setuid : exécute un fichier avec les privilèges du propriétaire.
  • Setgid : les fichiers créés dans un répertoire héritent du groupe du répertoire.
  • Sticky bit : empêche les utilisateurs de supprimer des fichiers dans un répertoire sauf s’ils en sont propriétaires.

Voici un exemple où le "Setuid" est défini sur un binaire :

ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 68248 23 mars   2023 /usr/bin/passwd

Par conséquent, la valeur "x" est remplacée par "s". Il est susceptible de rencontrer d'autres valeurs : s, S, t, T.

IV. Modifier les permissions avec chmod : mode symbolique

A. Chmod : la syntaxe du mode symbolique

En mode symbolique, nous utilisons la commande chmod en spécifiant les permissions avec du texte, c'est-à-dire que pour ajouter les permissions de lecture, nous pourrons spécifier "+r". À l'inverse, pour supprimer les permissions d'écriture, nous pouvons écrire "-w".

La syntaxe générale est :

chmod [OPTIONS] [PERMISSIONS] fichier
chmod [OPTIONS] [ugoa][-+=][rwx...] fichier

Le premier ensemble de flags ([ugoa]) correspond aux utilisateurs :

Nom du flagCorrespondance
uL'utilisateur propriétaire
gLe groupe (et donc les utilisateurs membres du groupe)
oTous les autres utilisateurs
aTous les utilisateurs (équivalent de "ugo")

Remarque : si cet indicateur n'est pas spécifié dans la commande chmod, l'indicateur utilisé par défaut est "a". Il n'y a que les permissions définies par umask qui ne sont pas affectées.

Le second ensemble de flags ([-+=]) correspond à l'opération à effectuer sur les permissions :

Nom du flagCorrespondance
-Retire la permission précisée
+Ajoute la permission précisée
=Modifie la permission actuelle avec la permission spécifiée (écraser)
aTous les utilisateurs (équivalent de "ugo")

Le troisième ensemble de flags ([rwx]) correspond à la permission :

Nom du flagCorrespondance
rPermission de lecture
wPermission d'écriture
xPermission d'exécution
s, S, etc...Permissions spéciales

B. Exemples d'utilisation de chmod

Voici quelques exemples d'utilisation de la commande chmod.

Vous pouvez créer un fichier vierge sur votre machine pour vous exercer.

cd /tmp
touch fichier.txt
  • Donner les permissions de lecture au groupe sur le fichier "fichier.txt" :
chmod g+r fichier.txt
  • Supprimer la permission d'exécution pour tous les utilisateurs sur le script "script.sh" :
chmod a-x script.sh
  • Ajouter les permissions de lecture, écriture et exécution au propriétaire :
chmod u+rwx script.sh
  • Retirer toutes les permissions pour les autres utilisateurs :
chmod o= fichier.txt
  • Ajouter le droit de lecture, d'écriture et d'exécution au propriétaire, de lecture seule au groupe et aucun droit aux autres :
chmod u=rwx,g=r,o= fichier.txt

V. Modifier les permissions avec chmod : mode numérique

A. Chmod : la syntaxe du mode numérique

Il y a une autre façon d'utiliser la commande chmod : le mode numérique. Ici, nous utilisons uniquement des valeurs numériques pour définir les permissions.

La syntaxe générale est :

chmod [OPTIONS] [NOMBRE] fichier

Le nombre est en fait une valeur constituée de 3 ou 4 chiffres. Chaque valeur sert à spécifier les permissions de l'utilisateur, puis du groupe et des autres (dans l'ordre habituel).

Voici un tableau récapitulatif avec les trois permissions de base :

Nom de la permissionCorrespondance
lecture4
écriture2
exécution1
aucun0

Chaque permission est affectée à un chiffre spécifique. Selon les permissions à définir, il est nécessaire d'effectuer un "calcul" pour additionner la valeur correspondante à chaque permission.

Voici un exemple pour vous aider à comprendre cette logique :

Linux - Les permissions en mode numérique

Ici, il s'agit d'un exemple avec un nombre constitué de 3 chiffres. Si vous passez sur 4 chiffres, le premier peut être utilisé pour déterminer une permission spéciale.

Nom de la permission spécialeCorrespondance
SetUid4
SetGid2
StickyBit1
Aucun changement0

Cela signifie que les valeurs "0750" et "750" sont identiques lorsque la commande chmod est utilisée en mode numérique. À l'inverse, la valeur "1777" sert à déterminer le sticky bit sur un répertoire.

Remarque : le sticky bit est un attribut appliqué à un répertoire qui permet de restreindre la suppression ou le renommage de fichiers à leur propriétaire, au propriétaire du répertoire, ou à un administrateur. Ceci est vrai même si d'autres utilisateurs ont des permissions d'écriture sur ce répertoire.

Enfin, de façon générale, vous devez éviter l'utilisation de la valeur "777" car elle donne les permissions en lecture, écriture et exécution à tous les utilisateurs : c'est une permission très dangereuse.

B. Exemples d'utilisation de chmod

Désormais, nous allons voir quelques exemples d'utilisation de la commande chmod avec le mode numérique.

  • Attribuer les permissions "rwx" au propriétaire, "rx" au groupe et "r" aux autres :
chmod 754 fichier.txt
  • Définir les permissions "rwx" au propriétaire pour un répertoire, de façon récursive (modifier en masse les permissions d'une arborescence) :
chmod -R 700 dossier/
  • Attribuer les droits de lecture et d'écriture au propriétaire d'un dossier, et un accès en lecture uniquement pour les membres du groupe et tous les autres utilisateurs :
chmod 644 dossier/

VI. Modifier des permissions en masse sous Linux

En guise de bonus, terminons avec un exemple pour modifier des permissions en masse sur une machine Linux. Au-delà d'utiliser la commande chmod, nous allons aussi utiliser la commande find pour identifier les fichiers sur lesquels nous souhaitons agir. Ceci peut s'appliquer sur des fichiers ou des dossiers.

Ici, nous définissons les permissions de lecture/écriture pour le propriétaire et une permission de lecture pour le groupe et les autres, sur tous les fichiers présents dans le répertoire "/var/www/application".

# Méthode symbolique
find /var/www/application -type f -exec chmod 644 {} \;

# Méthode numérique
find /var/www/application -type f -exec chmod u=rw,go=r {} \;

Pour cibler plutôt les répertoires à la place des fichiers, remplacez "-type f" par "-type d" dans la commande find.

VII. Conclusion

Grâce à ce tutoriel, vous devriez être en mesure de mieux comprendre le fonctionnement des permissions sous Linux, mais aussi de définir les permissions sur un répertoire, un fichier ou un ensemble d'éléments selon vos besoins. Pour plus d'informations sur la commande chmod, consultez la page de manuel avec "man chmod".

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

2 commentaires sur “Linux : comment gérer les permissions avec la commande chmod ?

  • chmod +X *

    droit que pour les répertoires (pour pouvoir les ouvrir !)

    Répondre
  • J’ai essayé même des choses bizares mais Makefile reste toujours en lecture seule: je ne sais plus que faire
    [pierre@Linux-fedora envoyer]$ sudo chmod 777 Makefile
    [pierre@Linux-fedora envoyer]$ sudo chmod -777 Makefile
    [pierre@Linux-fedora envoyer]$ sudo chmod -r -777 Makefile
    [pierre@Linux-fedora envoyer]$ sudo chmod -777 -r Makefile
    [pierre@Linux-fedora envoyer]$ sudo chmod -R -777 Makefile
    [pierre@Linux-fedora envoyer]$ sudo chmod -777 -R Makefile
    Merci si vous avez la réponse

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.