Linux / Commande chmod : modifier et vérifier les permissions des fichiers

chmod change les permissions de lecture, d'écriture et d'exécution des fichiers et des répertoires. Utilisez un mode symbolique pour ajouter ou retirer des droits précis, ou un mode numérique pour définir les permissions ordinaires voulues. Vérifiez le chemin et le mode actuel avant de modifier un fichier existant.

Lire les permissions avant de les changer

chmod [options] mode fichier…

Les permissions distinguent le propriétaire, le groupe du fichier et les autres utilisateurs. chmod ne change pas ce propriétaire ni ce groupe : ce rôle appartient à chown et chgrp. Vous devez être propriétaire du fichier ou disposer des privilèges appropriés pour changer son mode.

ls -l report.txt
stat -c '%a %n' report.txt

Dans la sortie de ls -l, les trois triplets après le caractère de type représentent les permissions du propriétaire, du groupe et des autres. r signifie lecture, w écriture et x exécution ; un tiret indique l'absence du droit correspondant. Le format stat -c utilisé ici est celui de GNU stat.

Ajouter ou retirer des droits avec un mode symbolique

Les lettres u, g et o sélectionnent respectivement le propriétaire, le groupe et les autres ; a les sélectionne tous. L'opérateur + ajoute, - retire et = fixe les droits de la catégorie sélectionnée.

chmod u+x script.sh
chmod g+w report.txt
chmod go-rwx report.txt

La première commande ajoute seulement le bit d'exécution du propriétaire ; elle ne valide ni le contenu ni les dépendances du script. La deuxième ajoute l'écriture pour le groupe. La troisième retire lecture, écriture et exécution au groupe et aux autres, sans modifier les permissions ordinaires du propriétaire.

Ces trois commandes illustrent des objectifs différents : choisissez celle qui correspond à votre besoin. Préciser la catégorie évite aussi de confondre un changement explicitement ciblé avec un mode symbolique sans catégorie, qui peut être influencé par le masque de création.

Comprendre 644, 640 et 755

Dans un mode octal à trois chiffres, chaque position correspond au propriétaire, au groupe puis aux autres. Additionnez lecture = 4, écriture = 2 et exécution = 1 pour chaque catégorie.

Mode Propriétaire Groupe Autres
644 Lecture, écriture Lecture Lecture
640 Lecture, écriture Lecture Aucun droit
755 Lecture, écriture, exécution Lecture, exécution Lecture, exécution
chmod 644 report.txt

Un mode numérique définit les permissions ordinaires de toutes les catégories, alors que g+w ne demande qu'un ajout ciblé. Des bits spéciaux, notamment setgid sur un répertoire, suivent des règles supplémentaires : ne considérez pas trois chiffres comme une remise à zéro universelle de tous les attributs.

Essayer sur un fichier créé pour l'exercice

Le bloc suivant crée un répertoire temporaire neuf dans votre dossier personnel, puis un fichier de démonstration. Il enregistre son mode initial, applique 640, affiche le résultat et rétablit ce mode initial :

chmod_lab=$(mktemp -d "$HOME/chmod-demo.XXXXXX") || exit 1
cd "$chmod_lab" || exit 1
printf 'demo\n' > demo.txt
initial_mode=$(stat -c '%a' demo.txt) || exit 1
chmod 640 demo.txt
stat -c '%a %n' demo.txt
chmod "$initial_mode" demo.txt
stat -c '%a %n' demo.txt

Sur un système Linux qui applique ces permissions, le premier contrôle doit afficher 640 demo.txt. Le second retrouve le mode enregistré avant le changement, qui dépend de votre environnement. Une modification réussie de chmod reste généralement silencieuse : vérifiez la valeur avec stat plutôt que d'attendre un message.

Le répertoire d'exercice reste présent. Les systèmes de fichiers qui ne prennent pas en charge ces permissions ou les couches de compatibilité peuvent représenter les modes différemment ; un retour sans erreur ne remplace pas le contrôle du mode obtenu.

Tenir compte des répertoires et des changements récursifs

Pour un répertoire, r permet d'en lister les noms, x permet de le traverser et d'accéder aux entrées nommées, et w intervient dans la création et la suppression d'entrées. Les droits doivent se combiner : disposer de l'écriture sans pouvoir traverser le répertoire ne suffit pas aux opérations usuelles. Les répertoires parents comptent également.

Appliquer 644 à un répertoire retire sa traversée aux utilisateurs ordinaires concernés. À l'inverse, rendre un document exécutable n'aide pas à le lire. Séparez donc les besoins des fichiers de ceux des répertoires avant toute opération globale.

Option GNU Rôle
-R Parcourt les répertoires et change aussi leurs contenus : contrôlez tout le périmètre avant de l'utiliser.
--reference=fichier Utilise le mode d'un fichier de référence. Cela ne copie ni son propriétaire ni tout son contrôle d'accès.
-c Décrit les fichiers dont les permissions changent effectivement.

Évitez de résoudre un refus d'accès en donnant systématiquement tous les droits à tous les utilisateurs. Inspectez les cibles avec ls ou find avant une récursion et méfiez-vous des liens symboliques. Une liste de contrôle d'accès (ACL), SELinux, un attribut d'immutabilité ou un montage en lecture seule peut également expliquer un refus malgré des bits ordinaires apparemment suffisants.

Le manuel de GNU chmod précise les options ; les pages sur les modes numériques et la signification des permissions des fichiers et répertoires complètent leur interprétation.