Linux : comment gérer les permissions avec la commande chmod ?
Sommaire
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 :
- Lecture (r) : voir le contenu d'un fichier ou lister un répertoire.
- Écriture (w) : modifier un fichier ou son contenu, ou ajouter/supprimer des fichiers dans un répertoire.
- 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 :
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 flag | Correspondance |
---|---|
u | L'utilisateur propriétaire |
g | Le groupe (et donc les utilisateurs membres du groupe) |
o | Tous les autres utilisateurs |
a | Tous 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 flag | Correspondance |
---|---|
- | Retire la permission précisée |
+ | Ajoute la permission précisée |
= | Modifie la permission actuelle avec la permission spécifiée (écraser) |
a | Tous les utilisateurs (équivalent de "ugo") |
Le troisième ensemble de flags ([rwx]) correspond à la permission :
Nom du flag | Correspondance |
---|---|
r | Permission de lecture |
w | Permission d'écriture |
x | Permission 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 permission | Correspondance |
---|---|
lecture | 4 |
écriture | 2 |
exécution | 1 |
aucun | 0 |
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 :
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éciale | Correspondance |
---|---|
SetUid | 4 |
SetGid | 2 |
StickyBit | 1 |
Aucun changement | 0 |
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".
chmod +X *
droit que pour les répertoires (pour pouvoir les ouvrir !)
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