Tu viens de tomber sur ce message : Permission denied. Trois mots qui ont le don d’énerver n’importe quel débutant sous Linux. La bonne nouvelle, c’est que deux commandes règlent 95% de ces situations : chmod et chown. Maîtrise-les, et ce message d’erreur deviendra presque un souvenir.
Avant de foncer dans les commandes, il faut comprendre le modèle mental derrière tout ça. Linux est un système multi-utilisateurs depuis le premier jour, contrairement à Windows qui a longtemps géré les droits d’accès comme une option facultative. Chaque fichier appartient à quelqu’un, et cet « quelqu’un » décide de ce qu’on peut en faire. C’est aussi simple que ça, et c’est ce qui rend Linux à la fois solide et parfois déroutant pour un débutant.
Les permissions Linux : comprendre la base avant de toucher quoi que ce soit
Imagine ton système de fichiers comme un immeuble. Chaque appartement (fichier ou dossier) a un propriétaire, une copropriété (le groupe), et des règles pour les visiteurs extérieurs. Le propriétaire peut faire ce qu’il veut chez lui. Les membres du groupe ont des accès définis. Les autres, c’est-à-dire tout le reste du monde, ont des droits encore plus restreints.
Cette logique tient en trois entités : user (le propriétaire du fichier), group (les utilisateurs appartenant au même groupe que le fichier) et others (tout le monde). Pour chacune de ces entités, Linux attribue trois types de droits : lecture (r pour read), écriture (w pour write), et exécution (x pour execute). Un fichier script que tu peux lire mais pas lancer, ça arrive exactement pour cette raison : le droit x manque.
Pour voir les permissions d’un fichier, la commande de base reste ls -l. Si tu débutes avec les commandes de navigation, l’article sur les ls cd mkdir rm commandes linux explique tout ça avec des exemples très concrets. Le résultat ressemble à ça :
-rwxr-xr-- 1 julien devs 4096 Mar 8 10:00 script.sh
Décryptage de cette ligne : le premier caractère (-) indique le type (fichier normal, d pour dossier). Ensuite, trois blocs de trois caractères : rwx pour le propriétaire (lecture, écriture, exécution), r-x pour le groupe (lecture et exécution, pas d’écriture), r-- pour les autres (lecture uniquement). Puis vient le nombre de liens, le nom du propriétaire (julien), le nom du groupe (devs), la taille, la date, et enfin le nom du fichier.
chmod : modifier les permissions d’un fichier ou dossier
chmod, c’est la commande qui change les droits. Elle ne touche pas au propriétaire, juste aux permissions. Deux façons de l’utiliser coexistent, et les deux ont leur utilité selon le contexte.
La notation symbolique : lisible, intuitive
La notation symbolique utilise des lettres et des opérateurs. Le principe : tu cibles qui (u pour user, g pour group, o pour others, a pour all), tu ajoutes (+), supprimes (-) ou affectes (=) un droit, et tu précises lequel (r, w, x).
chmod u+x script.sh # Ajoute le droit d'exécution pour le propriétaire
chmod g-w rapport.txt # Supprime le droit d'écriture pour le groupe
chmod o=r document.pdf # Le groupe "others" peut seulement lire
chmod a+r fichier.conf # Tout le monde peut lire
Ce mode est parfait quand tu sais exactement ce que tu veux changer sans toucher au reste.
La notation numérique (octale) : rapide, précise
La notation numérique remplace chaque triplet rwx par un chiffre de 0 à 7. La logique : r vaut 4, w vaut 2, x vaut 1. On additionne pour obtenir le chiffre du triplet. rwx = 4+2+1 = 7, r-x = 4+0+1 = 5, r-- = 4+0+0 = 4.
Un chmod 755 signifie donc : propriétaire peut tout faire (7), groupe peut lire et exécuter (5), autres peuvent lire et exécuter (5). C’est la permission classique pour un script ou un exécutable partagé. chmod 644 correspond à un fichier normal : propriétaire lit et écrit (6), tout le monde lit seulement (4+0+0 = 4).
chmod 755 script.sh # Classique pour un script exécutable
chmod 644 document.txt # Classique pour un fichier texte
chmod 700 cle_privee # Uniquement toi, personne d'autre
Et chmod 777 ? Tout le monde peut tout faire sur ce fichier. Sur un serveur ou dans un projet partagé, c’est une invitation à la catastrophe. Pour un débutant qui teste sur sa machine locale, c’est sans danger immédiat, mais l’habitude est mauvaise à prendre.
Cas concret : « je ne peux pas lancer mon script »
Tu télécharges un script, tu essaies de le lancer avec ./monscript.sh, et Linux te répond Permission denied. Le fichier existe, tu le vois avec ls, mais il refuse de s’exécuter. Explication : le bit d’exécution manque. Solution en une commande :
chmod +x monscript.sh
./monscript.sh # Ça fonctionne maintenant
Le +x sans préciser u, g ou o ajoute l’exécution pour tout le monde. Si tu veux restreindre à toi seul : chmod u+x monscript.sh.
chown : changer le propriétaire (et le groupe) d’un fichier
Si chmod gère les droits, chown gère l’identité. Changer le propriétaire d’un fichier, c’est changer de qui il « appartient ». Cette commande nécessite presque toujours les droits root, donc un sudo devant.
Syntaxe de chown
chown nouveauproprietaire fichier.txt
chown utilisateur:groupe fichier.txt # Changer propriétaire ET groupe
chown :nouveaugroupe fichier.txt # Changer uniquement le groupe
chown -R utilisateur:groupe dossier/ # Récursif sur tout un dossier
Le -R (récursif) est ton meilleur allié quand tu travailles sur un dossier entier, par exemple après avoir déposé des fichiers de projet avec un utilisateur différent.
La différence fondamentale avec chmod
Pour fixer les idées : chmod répond à la question « qui peut faire quoi ? », chown répond à « à qui appartient ce fichier ? ». Un fichier peut appartenir à root avec des permissions ouvertes à tout le monde. Il peut aussi appartenir à ton utilisateur mais être en lecture seule pour tout le monde sauf toi. Ce sont deux dimensions indépendantes.
Cas classique du débutant : tu as copié des fichiers depuis un support externe ou via sudo, et maintenant tout appartient à root alors que tu voulais les éditer en tant qu’utilisateur normal. La solution :
sudo chown -R tonnom:tonnom /home/tonnom/mondossier/
Cette commande redonne la propriété complète du dossier et de tout son contenu à ton utilisateur.
Les pièges courants de chown
Premier piège : oublier le -R sur un dossier. chown sans récursivité change seulement le dossier parent, pas son contenu. Tu modifies les droits du conteneur mais les fichiers à l’intérieur restent sous l’ancienne propriété.
Deuxième piège : utiliser chown sur des fichiers système. Changer le propriétaire de /etc/passwd ou d’un binaire système peut rendre ton Linux instable voire inutilisable. La règle simple : chown ne touche qu’aux fichiers dans ton répertoire home et dans les dossiers de tes projets.
Bonnes pratiques et sécurité : ce que le débutant doit retenir
Le reflexe « je vais faire chmod 777 pour que ça marche » est compréhensible. Ça fonctionne, le problème disparaît. Mais c’est comme laisser la porte de ton appartement ouverte pour ne plus jamais avoir à chercher tes clés. Sur un serveur accessible depuis internet, chmod 777 sur un fichier de configuration ou un script peut ouvrir des failles graves. Sur ta machine de bureau, le risque immédiat est faible, mais l’habitude reste dangereuse à cultiver.
La règle du moindre privilège s’applique partout : donne exactement les droits nécessaires, pas plus. Un script que seul toi utilises ? chmod 700. Un fichier de configuration que ton serveur web doit lire ? chmod 644. Un dossier partagé entre plusieurs utilisateurs d’un même groupe ? chmod 775 avec le bon groupe assigné via chown.
Concernant sudo avec chmod et chown : sudo est nécessaire pour changer le propriétaire d’un fichier qui n’appartient pas à ton utilisateur, ou pour modifier des fichiers système. Sur tes propres fichiers dans ton home, sudo est inutile et même risqué, car tu pourrais accidentellement changer les droits de fichiers système si tu te trompes de chemin.
Si un fichier reste inaccessible malgré tes tentatives, voilà un diagnostic rapide à suivre :
- Lance
ls -l fichierpour voir les permissions actuelles - Lance
whoamipour confirmer ton identité en cours - Compare : est-ce que tu es le propriétaire ? Membre du groupe ? Sinon, tu tombes dans « others »
- Utilise
sudo chown ton_nom fichierpour reprendre la propriété, puischmodpour ajuster les droits
Une situation résiste encore ? Le dossier parent peut bloquer l’accès même si le fichier a les bons droits. Pour accéder à un fichier, Linux vérifie les permissions de chaque dossier sur le chemin. Un dossier en 700 appartenant à root bloque tout le monde même si le fichier dedans est en 777.
Tableau récapitulatif : les permissions en un coup d’œil
| Valeur octale | Symbolique | Signification | Cas d’usage typique |
|---|---|---|---|
| 777 | rwxrwxrwx | Tout pour tout le monde | À éviter sauf test rapide local |
| 755 | rwxr-xr-x | Propriétaire tout, autres: lire/exécuter | Scripts, dossiers partagés |
| 644 | rw-r–r– | Propriétaire: lire/écrire, autres: lire | Fichiers texte, configs |
| 700 | rwx—— | Uniquement le propriétaire | Clés privées, scripts sensibles |
| 600 | rw——- | Propriétaire: lire/écrire, personne d’autre | Fichiers de config privés |
Questions fréquentes des débutants
Comment savoir si j’ai la permission de modifier un fichier ? Lance ls -l nom_du_fichier. Si tu es le propriétaire et que le champ w est présent dans le premier triplet, tu peux modifier. Sinon, tu peux utiliser sudo chown ton_nom fichier pour prendre la propriété, puis ajuster avec chmod.
Comment remettre les permissions d’origine sur un dossier ? Les permissions « d’origine » varient selon ce qu’il contient. Pour un dossier dans ton home, chmod 755 dossier est la valeur standard. Pour les fichiers à l’intérieur : chmod 644 pour les fichiers texte et chmod 755 pour les exécutables. La commande find dossier/ -type f -exec chmod 644 {} \; applique 644 à tous les fichiers récursivement, et find dossier/ -type d -exec chmod 755 {} \; remet 755 sur tous les sous-dossiers.
Pour aller plus loin dans ta maîtrise du terminal, explore les commandes linux debutant qui couvrent l’ensemble des commandes essentielles à connaître. Si tu sens que le terminal t’intimide encore, l’article sur le terminal linux debutant explique son fonctionnement de façon très accessible. Et si tu veux une vision d’ensemble de ta progression, le guide linux debutant structure tout le parcours depuis l’installation jusqu’aux usages quotidiens.
chmod et chown, finalement, c’est moins une question de mémoriser des chiffres qu’une question de changer sa façon de voir les fichiers. Sous Linux, rien n’existe sans propriétaire, sans groupe, sans droits. C’est cette philosophie qui fait la solidité du système, et une fois qu’elle est intégrée, les erreurs de permission deviennent un détail à régler en dix secondes. Le prochain Permission denied que tu croiseras, tu sauras exactement quoi faire.