Linux sans magie #8 — chmod sans peur : symbolique, octal et erreurs classiques

Comprendre chmod sans mémoriser des nombres magiques : permissions symboliques, modes octaux 644, 755 et 750, erreurs classiques et lab Linux reproductible.

Dans les articles précédents, nous avons appris à lire :

-rwxr-xr--

Nous savons maintenant que ces caractères décrivent les droits du propriétaire, du groupe et des autres utilisateurs.

Nous avons également déjà utilisé :

chmod u+x script.sh

Mais tôt ou tard, vous allez rencontrer ceci :

chmod 755 script.sh

Puis :

chmod 644 fichier.txt

Et probablement aussi le célèbre :

chmod 777 quelque-chose

À ce moment-là, Linux peut soudain donner l’impression d’être revenu à la magie.

Pourquoi 755 ? Pourquoi pas 754 ? Pourquoi un fichier texte est souvent associé à 644 alors qu’un script peut être en 755 ? Et surtout : faut-il apprendre tous ces nombres par cœur ?

Non. Nous allons les construire nous-mêmes.

Objectif

À la fin de ce lab, vous saurez utiliser chmod de deux façons :

chmod u+x fichier

et :

chmod 750 fichier

Vous saurez traduire un mode symbolique comme rwxr-x--- en 750 et faire le chemin inverse.

Vous comprendrez aussi pourquoi copier aveuglément chmod 777 est rarement une bonne méthode de dépannage.

Lab — créer notre terrain de jeu

Placez-vous dans votre répertoire personnel :

cd

Créez un lab isolé :

mkdir linux-sans-magie-lab
cd linux-sans-magie-lab

Créons deux fichiers :

touch notes.txt

Puis un petit script :

cat > diagnostic.sh <<'EOF'
#!/bin/bash
echo "Linux sans magie"
EOF

Regardons leur état initial :

ls -l

Le résultat exact dépend de votre système et de votre umask, mais vous pourriez obtenir quelque chose ressemblant à :

-rw-r--r-- 1 alex alex  0 Sep 8 10:00 notes.txt
-rw-r--r-- 1 alex alex 38 Sep 8 10:00 diagnostic.sh

Pour l’instant, nous n’allons rien supposer. Notre règle reste : observer avant de modifier.

Première méthode : le mode symbolique

Commençons par le mode le plus facile à lire.

Rendons notre script exécutable uniquement pour son propriétaire :

chmod u+x diagnostic.sh

Décomposons : u + x.

u signifie user, c’est-à-dire le propriétaire du fichier. + signifie ajouter. x signifie execute.

Vérifions :

ls -l diagnostic.sh

Vous devriez voir le x apparaître dans le bloc du propriétaire, par exemple :

-rwxr--r--

Le mode symbolique peut être lu comme une petite phrase.

Ajouter, retirer ou remplacer

chmod utilise principalement trois opérateurs : +, - et =.

Avec +, nous ajoutons un droit :

chmod g+w notes.txt

Cela signifie : ajouter au groupe le droit d’écriture.

Avec -, nous retirons un droit :

chmod g-w notes.txt

Avec =, nous définissons précisément les droits de la catégorie concernée :

chmod u=rw notes.txt

Cela signifie : le propriétaire doit avoir exactement lecture et écriture.

Vérifiez après chaque manipulation :

ls -l notes.txt

Cette habitude vous évitera beaucoup d’erreurs.

u, g, o et a

Les quatre lettres utiles sont :

u → propriétaire
g → groupe
o → autres utilisateurs
a → tous

Nous pouvons donc écrire :

chmod g+r notes.txt

ou :

chmod o-r notes.txt

ou encore combiner plusieurs opérations :

chmod u=rw,g=r,o= notes.txt

Cette dernière commande définit précisément : propriétaire rw, groupe r, autres aucun droit.

Vérifiez :

ls -l notes.txt

Le résultat devrait ressembler à :

-rw-r-----

Vous venez de construire des permissions précises sans utiliser le moindre nombre.

Maintenant, les fameux nombres

Le mode numérique utilise trois valeurs très simples :

r = 4
w = 2
x = 1

POSIX définit des bits distincts pour les droits de lecture, d’écriture et d’exécution de chaque catégorie d’utilisateur. En pratique, nous pouvons simplement additionner les droits voulus pour chaque bloc.

Prenons rwx :

4 + 2 + 1 = 7

Donc rwx = 7.

Pour rw- :

4 + 2 = 6

Donc rw- = 6.

Pour r-x :

4 + 1 = 5

Et enfin :

r-- = 4
--- = 0

Voilà presque tout le secret.

Traduire rwxr-x---

Découpons en trois groupes :

rwx   r-x   ---

Le propriétaire possède rwx = 7.

Le groupe possède r-x = 5.

Les autres n’ont aucun droit : --- = 0.

Nous obtenons donc :

750

Ce n’est pas un nombre magique. C’est simplement :

rwx r-x ---
 7   5   0

Mettons-le en pratique

Sur notre script :

chmod 750 diagnostic.sh

Vérifiez :

ls -l diagnostic.sh

Vous devriez obtenir quelque chose ressemblant à :

-rwxr-x---

Traduisez-le vous-même avant de continuer.

Propriétaire ? rwx7

Groupe ? r-x5

Autres ? ---0

Nous retrouvons bien 750.

Pourquoi voit-on souvent 644 ?

Prenons :

644

Décomposons :

6 → rw-
4 → r--
4 → r--

Donc :

644 = rw-r--r--

Appliquons-le à notre fichier texte :

chmod 644 notes.txt

Vérifiez :

ls -l notes.txt

Résultat attendu :

-rw-r--r--

Le propriétaire peut lire et modifier le fichier. Le groupe et les autres peuvent seulement le lire.

Cela correspond à un cas fréquent pour un fichier ordinaire, mais ne prenez pas 644 comme une règle universelle : les droits appropriés dépendent de l’usage réel du fichier.

Et 755 ?

Construisons-le :

7 → rwx
5 → r-x
5 → r-x

Donc :

755 = rwxr-xr-x

Essayons :

chmod 755 diagnostic.sh

Puis :

ls -l diagnostic.sh

Vous devriez voir :

-rwxr-xr-x

Le propriétaire peut lire, modifier et exécuter. Le groupe et les autres peuvent lire et exécuter, mais pas modifier.

Petit exercice mental

Sans taper de commande, traduisez :

rw-------

Le propriétaire possède rw- = 6. Le groupe et les autres ont --- = 0.

La réponse est donc :

600

C’est un mode que vous rencontrerez souvent pour des fichiers qui doivent rester privés. L’important n’est pas de mémoriser 600, mais de savoir le reconstruire.

L’erreur classique : chmod 777

Imaginons qu’un programme affiche :

Permission denied

Quelqu’un sur Internet propose :

chmod 777 fichier

Cela peut sembler efficace parce que :

777 = rwxrwxrwx

Autrement dit, le propriétaire, le groupe et tous les autres utilisateurs obtiennent lecture, écriture et exécution.

Le problème n’est pas que 777 serait une commande interdite. Le problème est qu’elle accorde énormément de droits sans avoir d’abord identifié le besoin.

Pour diagnostiquer un problème de permissions, commencez plutôt par :

ls -l fichier

Puis demandez-vous :

Qui doit réellement lire ce fichier ?

Qui doit pouvoir le modifier ?

Doit-il vraiment être exécutable ?

Le problème concerne-t-il le propriétaire, le groupe ou les autres ?

Ensuite seulement, modifiez le droit nécessaire. C’est le principe du moindre privilège appliqué très simplement.

Une autre erreur : rendre tout exécutable

Prenons notre fichier notes.txt.

Nous pourrions techniquement lui ajouter :

chmod u+x notes.txt

Mais cela ne transforme pas automatiquement son contenu en programme valable.

Le droit x signifie que les permissions autorisent l’exécution. Il ne change pas la nature ou le contenu du fichier.

C’est exactement ce que nous avons découvert dans l’article précédent.

Attention aux répertoires

Créons un répertoire :

mkdir documents

Regardons ses droits :

ls -ld documents

Sur un répertoire, les lettres r, w et x gardent la même notation, mais leur effet n’est pas identique à celui d’un fichier ordinaire.

Le droit x sur un répertoire correspond notamment au droit de le traverser, c’est-à-dire d’accéder aux entrées qu’il contient lorsque les autres permissions nécessaires sont également satisfaites.

C’est pourquoi retirer x d’un répertoire peut produire des comportements qui semblent étranges au début.

Nous approfondirons les permissions des répertoires dans un article dédié. Pour l’instant, retenez simplement : x sur un fichier et x sur un répertoire ne doivent pas être interprétés exactement de la même façon.

Provoquons une erreur contrôlée

Nous allons rendre notre script non exécutable pour le propriétaire :

chmod u-x diagnostic.sh

Vérifiez :

ls -l diagnostic.sh

Puis :

./diagnostic.sh

Dans un environnement classique, l’exécution directe devrait être refusée si aucune autre catégorie applicable ne vous accorde l’exécution.

Au lieu de répondre immédiatement avec un gros changement de permissions, regardons :

ls -l diagnostic.sh

Le diagnostic montre l’absence de x dans la catégorie pertinente.

Nous pouvons alors corriger précisément :

chmod u+x diagnostic.sh

Puis vérifier :

ls -l diagnostic.sh
./diagnostic.sh

Nous avons corrigé un droit précis, pas ouvert toutes les permissions.

Symbolique ou octal : lequel utiliser ?

Les deux méthodes sont valides.

Le mode symbolique est particulièrement pratique lorsque vous voulez modifier une permission sans toucher aux autres :

chmod u+x diagnostic.sh

Le mode numérique est pratique lorsque vous voulez définir clairement un état complet :

chmod 750 diagnostic.sh

Avec l’expérience, vous utiliserez naturellement les deux. Mais au début, si un mode octal vous semble obscur, traduisez-le.

Par exemple :

740

devient :

7 → rwx
4 → r--
0 → ---

soit :

rwxr-----

Aucune mémorisation aveugle nécessaire.

Pourquoi écrire u+x plutôt que simplement +x ?

GNU chmod autorise aussi :

chmod +x diagnostic.sh

Mais lorsqu’aucune catégorie u, g, o ou a n’est indiquée, chmod applique les règles liées au umask pour déterminer quels bits sont concernés.

À ce stade de la série, écrire :

chmod u+x diagnostic.sh

est beaucoup plus explicite. Nous disons exactement : ajouter le droit d’exécution au propriétaire.

Le umask mérite son propre article. Nous ne l’introduirons pas en détail aujourd’hui.

Petit défi

Sans regarder la réponse, créez les permissions suivantes sur notes.txt :

  • propriétaire : lecture et écriture ;
  • groupe : lecture uniquement ;
  • autres : aucun droit.

Commencez avec la méthode symbolique.

Vérifiez avec :

ls -l notes.txt

Vous devez obtenir :

-rw-r-----

Maintenant, trouvez le mode octal équivalent.

Propriétaire : rw- = 6.

Groupe : r-- = 4.

Autres : --- = 0.

La réponse est :

chmod 640 notes.txt

Vérifiez à nouveau :

ls -l notes.txt

Si vous obtenez toujours :

-rw-r-----

vous venez de démontrer que vous savez traduire dans les deux sens.

Aller plus loin

Vous pourrez rencontrer des permissions avec quatre chiffres, par exemple 2755, ou des caractères comme s et t.

Ils correspondent notamment aux mécanismes setuid, setgid et sticky bit.

Ils sont importants en administration Linux, mais les introduire maintenant brouillerait inutilement le concept principal. Nous les traiterons lorsqu’ils auront un vrai rôle dans un lab.

Même chose pour les ACL : les permissions classiques ne sont pas le seul mécanisme pouvant influencer l’accès à un fichier.

Pour aujourd’hui, restons sur les trois blocs classiques :

user | group | others

Sécurité

Les permissions sont un mécanisme de sécurité. Accorder plus de droits que nécessaire augmente inutilement la surface d’accès.

Avant un chmod, vérifiez toujours l’état initial avec ls -l, identifiez la catégorie concernée et n’ajoutez que le droit nécessaire.

Évitez particulièrement les corrections réflexes de type chmod 777 sur des fichiers de configuration, des scripts ou des répertoires applicatifs.

Coûts

Ce lab ne nécessite aucun service payant ni aucune ressource cloud.

Nettoyage / rollback

Revenez dans votre répertoire personnel :

cd

Vérifiez :

pwd

Puis supprimez uniquement le lab :

rm -r linux-sans-magie-lab

Vérifiez :

ls

Le répertoire linux-sans-magie-lab doit avoir disparu.

Ce qu’il faut retenir

chmod n’est pas une collection de nombres à mémoriser.

Le mode symbolique permet d’écrire des intentions très lisibles :

chmod u+x fichier
chmod g-w fichier
chmod o-r fichier

Le mode octal repose sur seulement trois valeurs :

r = 4
w = 2
x = 1

Ainsi :

rwx = 7
rw- = 6
r-x = 5
r-- = 4
--- = 0

Et :

rwxr-x--- = 750
rw-r--r-- = 644
rw-r----- = 640

La règle importante n’est pas : « quand ça bloque, essayer 777 ».

C’est : observer → comprendre le droit nécessaire → modifier seulement ce droit → vérifier.

Références officielles

  • GNU Coreutils — Changing File Permissions: https://www.gnu.org/software/coreutils/manual/html_node/Changing-File-Permissions.html
  • POSIX chmod(1p) — Linux man-pages: https://man7.org/linux/man-pages/man1/chmod.1p.html

Conclusion

Vous savez maintenant lire un mode comme 750 sans le considérer comme un code mystérieux.

Vous savez le reconstruire :

7 = rwx
5 = r-x
0 = ---

et obtenir :

rwxr-x---

Vous savez également choisir entre une modification ciblée :

chmod u+x fichier

et la définition d’un état complet :

chmod 750 fichier

Le prochain article de la séquence sera : Linux sans magie #9 — Pourquoi « Permission denied » n’est pas une catastrophe.