Linux sans magie #9 — Pourquoi « Permission denied » n’est pas une catastrophe

Apprendre à diagnostiquer Permission denied sous Linux sans sudo ni chmod 777 : utilisateur, propriétaire, groupe, droits rwx et répertoires du chemin.

Permission denied est probablement l’un des messages les plus intimidants lorsqu’on débute sous Linux.

Pourtant, il signifie généralement quelque chose de beaucoup plus simple : Linux a compris ce que vous vouliez faire, mais les règles d’accès actuelles ne vous l’autorisent pas.

Dans cet article, nous allons apprendre à ne plus corriger ce message au hasard.

Notre méthode sera toujours la même : observer → identifier l’utilisateur → inspecter le chemin → comprendre le droit manquant → corriger uniquement ce qui est nécessaire → vérifier.

Objectif

À la fin du lab, vous saurez diagnostiquer plusieurs causes classiques de Permission denied sans dégainer automatiquement sudo ou chmod 777.

Vous utiliserez essentiellement :

whoami
id
ls -l
ls -ld

L’idée n’est pas d’apprendre une commande miracle, mais de construire un réflexe de troubleshooting.

Lab — préparer notre terrain de diagnostic

Placez-vous dans votre répertoire personnel :

cd

Créez un répertoire dédié :

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

Créons un fichier :

echo "Linux sans magie" > rapport.txt

Puis observons-le :

ls -l rapport.txt

Vous pourriez obtenir quelque chose ressemblant à :

-rw-r--r-- 1 alex alex 18 Sep 9 09:00 rapport.txt

Le nom de l’utilisateur, du groupe, la taille et l’heure seront différents sur votre machine. Ce qui nous intéresse surtout est la colonne des permissions et l’identité du propriétaire et du groupe.

Premier Permission denied

Retirons volontairement au propriétaire le droit d’écriture :

chmod u-w rapport.txt

Vérifiez :

ls -l rapport.txt

Vous pourriez maintenant voir :

-r--r--r-- 1 alex alex 18 Sep 9 09:01 rapport.txt

Essayons d’ajouter du texte :

echo "Nouvelle ligne" >> rapport.txt

Votre shell devrait refuser l’opération avec un message contenant :

Permission denied

Nous venons de provoquer notre panne de manière contrôlée.

Ne corrigez rien tout de suite

Face à cette erreur, deux réflexes fréquents seraient :

sudo ...

ou :

chmod 777 rapport.txt

Nous ne ferons ni l’un ni l’autre.

La première question est : qui suis-je ?

whoami

Puis :

id

whoami affiche l’utilisateur courant. id fournit notamment son UID, son groupe principal et ses groupes supplémentaires.

Maintenant, observons le fichier :

ls -l rapport.txt

Supposons que nous voyions :

-r--r--r-- 1 alex alex 18 Sep 9 09:01 rapport.txt

Si whoami retourne alex, nous sommes le propriétaire. Le premier bloc de permissions nous concerne donc :

r--

Nous pouvons lire le fichier, mais pas l’écrire.

Le diagnostic est presque terminé.

Corriger précisément

Nous voulons permettre au propriétaire de modifier le fichier.

La correction minimale est :

chmod u+w rapport.txt

Vérifiez :

ls -l rapport.txt

Nous retrouvons :

-rw-r--r--

Réessayez :

echo "Nouvelle ligne" >> rapport.txt
cat rapport.txt

Vous devriez voir :

Linux sans magie
Nouvelle ligne

Nous avons corrigé exactement un droit. Pas de 777, pas de changement de propriétaire, pas de privilèges supplémentaires.

Ce que Permission denied ne vous dit pas

Le message indique qu’une opération a été refusée, mais il ne vous dit pas automatiquement où se situe le problème.

Le fichier final n’est pas toujours responsable. Sous Linux, l’accès à un fichier dépend aussi des répertoires qui composent son chemin. Le droit x sur un répertoire autorise notamment sa traversée, c’est-à-dire la recherche d’entrées à l’intérieur lorsque les autres conditions d’accès sont satisfaites.

Nous allons le constater.

Deuxième panne : le fichier semble pourtant correct

Créons un répertoire :

mkdir coffre

Puis un fichier à l’intérieur :

echo "secret de lab" > coffre/secret.txt

Regardons ses permissions :

ls -l coffre/secret.txt

Le fichier devrait être lisible par son propriétaire. Testez :

cat coffre/secret.txt

Cela fonctionne.

Maintenant, retirons le droit x du répertoire pour son propriétaire :

chmod u-x coffre

Regardez le répertoire :

ls -ld coffre

Puis essayez à nouveau :

cat coffre/secret.txt

Dans un environnement Linux classique, l’accès est refusé. Pourtant, les permissions de secret.txt n’ont pas changé.

Pourquoi ?

Sur un fichier ordinaire, x signifie exécution. Sur un répertoire, x correspond notamment au droit de rechercher et de traverser ce répertoire.

Linux doit pouvoir franchir les répertoires du chemin avant d’atteindre le fichier final.

Ici, ce n’est donc pas secret.txt qui bloque : c’est coffre.

Inspectons :

ls -ld coffre
ls -l coffre/secret.txt

La correction minimale est :

chmod u+x coffre

Testez :

cat coffre/secret.txt

L’accès doit fonctionner de nouveau.

Propriétaire, groupe et autres

Les permissions seules ne suffisent pas. Il faut aussi savoir à qui elles s’appliquent.

Prenons :

-rw-r--r-- 1 alex devops 32 Sep 9 09:10 rapport.txt

Nous avons trois blocs :

rw- | r-- | r--

Ils correspondent respectivement au propriétaire, au groupe et aux autres utilisateurs.

Linux détermine donc d’abord votre relation avec le fichier, puis applique le bloc de droits correspondant.

C’est pourquoi whoami, id et ls -l forment un trio aussi utile pour diagnostiquer un refus d’accès.

Une méthode simple de diagnostic

Quand une commande renvoie Permission denied, commencez par quatre questions.

1. Qui exécute la commande ?

whoami
id

2. À qui appartient l’objet ?

ls -l fichier

Pour un répertoire :

ls -ld repertoire

3. Quels droits s’appliquent réellement à cet utilisateur ?

Relisez le bloc pertinent : propriétaire, groupe ou autres.

4. Un répertoire du chemin bloque-t-il l’accès ?

Inspectez les répertoires concernés au lieu de regarder uniquement le fichier final.

Cette démarche évite beaucoup de modifications inutiles.

Pourquoi sudo n’est pas un outil de diagnostic

sudo permet d’exécuter une commande avec des privilèges supplémentaires lorsque la configuration l’autorise.

Mais transformer chaque Permission denied en sudo ... masque souvent la vraie question : pourquoi mon utilisateur normal n’a-t-il pas accès à cette ressource ?

Dans certains cas, l’absence d’accès est parfaitement volontaire : données privées, fichiers système, fichiers appartenant à un service ou séparation entre utilisateurs.

Le but n’est donc pas toujours de supprimer le refus. Parfois, le refus est le comportement attendu.

Pourquoi chmod 777 est un mauvais réflexe

Nous avons vu dans l’article précédent que :

777 = rwxrwxrwx

Utiliser :

chmod 777 fichier

pour résoudre une erreur revient à accorder tous les droits classiques au propriétaire, au groupe et aux autres, sans déterminer lequel était réellement nécessaire.

Une correction pertinente pourrait n’être que :

chmod u+w fichier

ou :

chmod u+x script.sh

ou parfois aucune modification du tout.

Le principe du moindre privilège consiste précisément à n’accorder que ce qui est nécessaire.

Et si chmod lui-même refuse ?

chmod n’est pas un passe-partout. Le propriétaire du fichier, ou un processus disposant des privilèges nécessaires, peut modifier ses bits de mode. Si le fichier ne vous appartient pas, votre tentative de modification peut elle-même être refusée.

Dans ce cas, commencez encore par :

whoami
ls -l fichier

Puis demandez-vous pourquoi ce fichier appartient à cet utilisateur avant d’essayer de changer son propriétaire ou ses droits.

Et si ls -l semble correct ?

Les permissions classiques ne sont pas le seul mécanisme de contrôle d’accès possible sous Linux.

Des ACL peuvent ajouter des règles concernant des utilisateurs ou groupes nommés. Si l’outil est installé sur votre système, vous pouvez inspecter ces règles avec :

getfacl fichier

Nous n’allons pas apprendre les ACL dans cet article. Retenez simplement qu’elles constituent une piste lorsque les permissions classiques semblent cohérentes mais que le comportement reste inattendu.

Petit défi

Créez :

mkdir atelier
echo "test" > atelier/resultat.txt

Vérifiez :

cat atelier/resultat.txt

Puis retirez une permission au répertoire :

chmod u-x atelier

Essayez :

cat atelier/resultat.txt

Votre mission : ne touchez pas au fichier resultat.txt.

Utilisez uniquement :

whoami
ls -ld atelier
ls -l atelier/resultat.txt

et expliquez pourquoi le fichier n’est plus accessible.

Ensuite seulement, restaurez le droit nécessaire :

chmod u+x atelier

Vérifiez :

cat atelier/resultat.txt

Le contenu doit redevenir accessible.

Nettoyage / rollback

Restaurons d’abord le droit de traversée au cas où vous auriez interrompu le lab au milieu :

chmod u+x coffre atelier 2>/dev/null

Revenez ensuite dans votre répertoire personnel :

cd
pwd

Puis supprimez uniquement notre lab :

rm -r linux-sans-magie-lab

Ce qu’il faut retenir

Permission denied ne signifie pas « Linux est cassé ».

Il signifie qu’une règle d’accès empêche l’opération demandée.

Votre méthode de diagnostic peut tenir en quelques commandes :

whoami
id
ls -l fichier
ls -ld repertoire

Puis raisonnez :

utilisateur
↓
propriétaire / groupe / autres
↓
r / w / x
↓
répertoires du chemin
↓
correction minimale
↓
vérification

C’est une vraie méthode de troubleshooting Linux, et elle fonctionne bien au-delà de ce petit lab.

Références officielles

  • GNU Coreutils — File permissions : https://www.gnu.org/software/coreutils/manual/html_node/File-permissions.html
  • GNU Coreutils — Setting permissions : https://www.gnu.org/software/coreutils/manual/html_node/Setting-Permissions.html
  • Linux man-pages — access(2) : https://man7.org/linux/man-pages/man2/access.2.html
  • Linux man-pages — chmod(2) : https://man7.org/linux/man-pages/man2/chmod.2.html
  • Linux man-pages — getfacl(1) : https://man7.org/linux/man-pages/man1/getfacl.1.html

Conclusion

Nous avons franchi une étape importante.

Jusqu’ici, nous apprenions surtout à lire et modifier les permissions. Maintenant, nous commençons à les utiliser pour diagnostiquer un problème.

Lorsque vous verrez :

Permission denied

la question ne sera plus : « Quelle commande dois-je copier pour que ça marche ? »

Elle deviendra : « Quelle règle vient de refuser cette opération ? »

C’est exactement le réflexe que nous voulons construire dans Linux sans magie.