L'antisèche chmod et chown que vous dégainez vraiment commence par ce que tout le monde google : vous avez lancé un script, Bash a répondu Permission denied, et il vous faut le remède. C'est chmod +x script.sh, vous copiez et vous changez le nom du fichier. À partir de là, cette carte range les recettes par objectif. Les deux nombres à mémoriser sont 755 pour ce qu'on exécute ou visite et 644 pour les fichiers simples qu'on lit seulement. Verrouillez un secret avec chmod 600. Changez la propriété avec chown, et confiez toute une racine web au compte serveur avec chown -R. Lecture vaut 4, écriture vaut 2, exécution vaut 1, additionnés par case, et une fois que ça clique vous arrêtez de mémoriser des nombres magiques.
The short answer
Rendez un script lançable avec chmod +x script.sh, ensuite ./script.sh tourne enfin.
Dégainez chmod 755 pour ce qu'on exécute ou visite et chmod 644 pour les fichiers
simples qu'on lit seulement. Verrouillez un secret avec chmod 600 secret.key. Confiez
toute une racine web au compte serveur avec chown -R www-data:www-data /var/www. Le code
des chiffres : lecture vaut 4, écriture vaut 2, exécution vaut 1, additionnés par case.
Vous avez récupéré un script. Vous l'avez lancé. Bash vous a répondu "Permission denied" et vous voilà ici. C'est neuf fois sur dix la raison qui pousse les gens à googler chmod, donc la solution à ce problème précis est tout en haut. Vous copiez, vous changez le nom du fichier, c'est réglé. Le truc pénible avec chmod, c'est que c'est deux outils dans un seul manteau : il y a le petit nombre à trois chiffres que tout le monde retient à moitié, et il y a une syntaxe en lettres bien plus propre que presque personne n'utilise. On va faire les deux.
Une carte rapide avant les recettes. chmod change les permissions, ce qu'on peut faire à un fichier. chown change la propriété, à qui le fichier appartient. Deux boulots différents, faciles à confondre. Et les permissions se découpent en trois : l'utilisateur qui possède le fichier, le groupe, et tous les autres (le fameux "other"). Gardez ces deux idées au clair et le reste n'est plus que de la notation.
Rendre un script exécutable (le remède au "permission refusée")
C'est celle-là. Vous avez écrit un fichier .sh, ou vous l'avez tiré d'internet, et le shell refuse net de le lancer. Le fichier n'a juste pas son bit d'exécution, c'est tout. chmod +x script.sh allume ce bit et ./script.sh prend vie. Aucun nombre à chercher, aucune réflexion. Juste +x.
| Commande | Ce qu'elle fait |
|---|---|
chmod +x script.sh | Ajoute l'exécution pour tout le monde, le remède express au "Permission denied" |
chmod u+x script.sh | Ajoute l'exécution pour vous seul, le propriétaire, et personne d'autre |
chmod u+x,go-w file | Le rendre exécutable par vous et retirer l'écriture au groupe et aux autres d'un coup |
chmod -x script.sh | Reprend le bit d'exécution quand vous voulez le tuer |
+x tout seul accorde l'exécution aux trois cases à la fois, ce qui convient en général à un script de service dans votre dossier perso. Si vous êtes plus regardant, ou que c'est une machine partagée, u+x ne donne le droit qu'à vous. Franchement, je pars sur +x et je deviens précis seulement quand quelque chose me le réclame. La troisième, u+x,go-w, c'est la syntaxe en lettres qui fait ses muscles : des changements séparés par des virgules, chacun visant une case précise. On va s'appuyer dessus dans une minute.
Le code des chiffres : pourquoi 755 et 644 reviennent sans arrêt
Voici le modèle qui débloque tous les chmod numériques que vous taperez un jour. Chaque permission a une valeur. Lecture vaut 4, écriture vaut 2, exécution vaut 1. On les additionne pour obtenir un chiffre, et on écrit trois chiffres, un par case : utilisateur, groupe, autres. Donc 7 veut dire 4+2+1, tout, rwx. 6 c'est 4+2, lecture et écriture, pas d'exécution. 5 c'est 4+1, lecture et exécution. 4 c'est lecture seule. Voilà toute l'astuce, et une fois que ça clique, vous arrêtez de mémoriser des nombres magiques et vous vous mettez à les lire.
| Commande | Ce qu'elle fait |
|---|---|
chmod 755 file | rwx pour vous, rx pour le groupe et les autres. Scripts, binaires, dossiers où l'on entre |
chmod 644 file | rw pour vous, lecture pour le reste. Le défaut des fichiers normaux |
chmod 600 secret | rw pour vous, rien pour les autres. Clés, jetons, fichiers de mots de passe |
chmod 700 dir | rwx pour vous, fermé à tous les autres. Un dossier privé |
Pourquoi un dossier a-t-il besoin d'exécution ? Ça semble faux au début. Sur un dossier, le bit d'exécution veut dire "vous avez le droit d'y entrer et d'atteindre ce qu'il y a dedans". Pas de x sur un dossier et vous ne pouvez pas cd dedans, même si vous pouvez techniquement lire son nom. C'est exactement pour ça que 755 revient tant sur les dossiers : le 5 (lecture plus exécution) laisse les gens lister et traverser sans les laisser écrire. Les fichiers n'ont pas besoin de x sauf s'ils sont faits pour tourner, ce qui est toute la raison pour laquelle 644, et pas 755, convient à un texte ou une image.
Vous voulez éviter le calcul mental ? Notre calculateur de permissions chmod transforme des cases à cocher en nombre exact et en commande exacte. Je m'en sers encore quand je suis à moitié endormi et que je me demande si c'était 640 ou 644 que je voulais.
Changer la propriété avec chown (et le coup du -R sur la racine web)
Les permissions décident ce qu'on peut faire. La propriété décide qui le fait. chown réattribue le propriétaire, et au passage le groupe, d'un seul geste. Le cas classique : vous avez copié un site dans /var/www en root, et maintenant le serveur web ne peut pas y écrire parce que root possède tout. Confiez l'arborescence au compte de service et le problème s'évapore.
| Commande | Ce qu'elle fait |
|---|---|
chown user file | Change juste le propriétaire en user, laisse le groupe tranquille |
chown user:group file | Fixe propriétaire et groupe ensemble avec le deux-points |
chown -R www-data:www-data /var/www | Récursivement, confie tout un arbre au compte du serveur web |
chown :group file | Change seulement le groupe, propriétaire intact (notez le deux-points en tête) |
chgrp group file | L'outil dédié au groupe seul, même effet que chown :group |
Le -R est celui que vous dégainerez sur les racines web, les dossiers de déploiement, tout ce qui a des dossiers imbriqués. Il parcourt tout l'arbre et réattribue chaque fichier et dossier en dessous. C'est puissant et un peu effrayant, ce qui m'amène à l'avertissement que tout le monde apprend à la dure : -R sur le mauvais chemin est une vraie catastrophe. Lancez chown -R vous / avec une espace en trop ou une variable mal tapée et vous venez de réécrire la propriété sur tout le système, ce qui peut casser le login, sudo, tout le bazar. Regardez le chemin deux fois avant d'appuyer sur entrée. Je suis sérieux.
Permissions récursives sans bousiller vos fichiers
Voici où la plupart des gens font un petit dégât discret. Vous avez une arborescence, les permissions sont en pagaille, et vous voulez les réparer en masse. Le réflexe paresseux, c'est chmod -R 755 dir, et ça marche, en quelque sorte, sauf que ça vient de coller le bit d'exécution sur chaque fichier simple là-dedans aussi. Voilà vos fichiers de conf et vos images tous marqués exécutables sans aucune raison. À peu près inoffensif, mais sale, et un linter ou un scan de sécurité vous le reprochera.
| Commande | Ce qu'elle fait |
|---|---|
chmod -R 755 dir | Met 755 sur tout, fichiers compris, même ceux qui ne devraient pas tourner |
chmod -R u=rwX,go=rX dir | Le récursif malin : le X majuscule n'ajoute l'exécution qu'aux dossiers et aux fichiers déjà exécutables |
chmod o-rwx file | Retire tout accès aux "autres", laisse utilisateur et groupe tels quels |
chmod g+w file | Ajoute l'écriture pour le groupe, un réglage courant de dossier partagé |
Ce X majuscule est la vedette sous-estimée de tout l'outillage, et presque personne ne sait qu'il existe. Le x minuscule veut dire "exécution, toujours". Le X majuscule veut dire "exécution, mais seulement sur les dossiers, ou sur les fichiers qui avaient déjà un bit d'exécution quelque part". Donc chmod -R u=rwX,go=rX dir donne aux dossiers leur bit de traversée nécessaire et laisse vos fichiers simples tranquilles. Ça répare le dégât exact que crée -R 755. Une fois que vous l'avez utilisé, revenir au 755 à l'aveugle paraît négligent.
Mon avis : chmod 777 est une odeur suspecte, pas une solution, et le X majuscule mérite un post-it. Quand un truc refuse de marcher et qu'un forum vous dit de le chmod 777, par pitié non, ou au moins ne vous arrêtez pas là. 777 veut dire que chaque utilisateur de la machine peut lire, écrire et exécuter ce fichier, ce qui n'est presque jamais ce dont vous avez vraiment besoin et c'est un cadeau pour quiconque fouine. Neuf fois sur dix la vraie solution, c'est la propriété (un chown vers le bon utilisateur) ou un 755 ou 644 raisonnable, pas d'ouvrir les portes en grand. 777 fait disparaître le message d'erreur en faisant en sorte que le système de permissions cesse de compter, et ça, c'est une odeur de sécurité à chaque fois que je le vois dans un tuto. Le revers, ce que j'aimerais que plus de gens dégainent : le X majuscule dans un changement récursif. chmod -R u=rwX,go=rX fait la bonne chose pour les dossiers et les fichiers en une passe, sans dégâts collatéraux. Je suis peut-être un poil trop évangéliste sur une lettre obscure, je l'assume. Mais ça m'a évité de recasser des permissions tellement de fois que je pense sincèrement que c'est le flag le plus sous-utilisé que chmod embarque.
Un mot rapide sur umask
Vous vous êtes déjà demandé pourquoi un fichier tout neuf apparaît en 644 sans que vous touchiez à chmod ? C'est umask. C'est un masque qui soustrait des permissions au défaut au moment où les fichiers sont créés. Un umask typique de 022 retire l'écriture au groupe et aux autres, et c'est comme ça qu'on tombe sur 644 pour les fichiers et 755 pour les dossiers automatiquement. Vous avez rarement besoin de le régler à la main. Sachez juste que c'est la raison pour laquelle vos défauts ont cette tête, et si tout un dossier de nouveaux fichiers sort avec des permissions que vous n'attendiez pas, umask est le suspect habituel. Tapez umask sans argument pour voir la valeur actuelle.
Et après
Voilà l'ensemble qui sert. Allumer le bit d'exécution avec +x, lire les chiffres (4, 2, 1, additionnés par case), dégainer 755 et 644 au réflexe, verrouiller les secrets à 600, réparer la propriété avec chown et son -R, et utiliser le X majuscule pour les jobs récursifs pour ne pas bombarder les fichiers du bit d'exécution. Tenez-vous loin de 777. Ça couvre presque tout ce que je fais avec les permissions dans une semaine normale.
Questions fréquentes
Comment rendre un fichier exécutable sous Linux ?
Lancez chmod +x script.sh, puis exécutez-le avec ./script.sh. Le +x ajoute le bit d'exécution, ce qui manque chaque fois que le shell affiche Permission denied sur un script que vous savez correct. Si vous voulez être le seul à pouvoir le lancer sur une machine partagée, utilisez plutôt chmod u+x script.sh, qui accorde l'exécution au propriétaire seul et laisse groupe et autres sans.
Quelle est la différence entre chmod 755 et 644 ?
Les deux viennent du modèle numérique où lecture vaut 4, écriture vaut 2 et exécution vaut 1, additionnés par case pour utilisateur, groupe et autres. 755 c'est rwx pour vous et rx pour tout le monde, donc ça convient aux scripts, aux programmes et aux dossiers où les gens doivent entrer. 644 c'est rw pour vous et lecture pour le reste, sans exécution nulle part, ce qui est l'état des fichiers simples comme les textes et les images. La version courte : 755 si ça tourne ou se traverse, 644 si ça se lit seulement.
À quoi sert chmod 777, et est-ce sûr ?
777 accorde lecture, écriture et exécution au propriétaire, au groupe et à tous les autres, donc chaque compte de la machine peut tout faire à ce fichier. C'est rarement la bonne solution et c'est une erreur de sécurité courante. Quand un truc refuse de marcher, la vraie cause est d'habitude une mauvaise propriété ou un mode trop strict, donc un chown vers le bon utilisateur ou un 755 ou 644 raisonnable règle ça sans ouvrir le fichier au système entier. Voyez un 777 dans un tuto comme un signal d'alarme, pas comme un conseil.
Comment changer le propriétaire d'un fichier ou d'un dossier ?
Utilisez chown user file pour fixer le propriétaire, ou chown user:group file pour fixer propriétaire et groupe ensemble avec un deux-points. Pour toute une arborescence, ajoutez -R, comme dans chown -R www-data:www-data /var/www, le geste habituel pour confier une racine web au compte du serveur. Méfiez-vous du -R : le lancer sur le mauvais chemin, genre la racine du système à cause d'une faute ou d'une espace en trop, peut casser les connexions et sudo, donc vérifiez le chemin avant d'appuyer sur entrée.
Comment poser des permissions récursivement sans rendre chaque fichier exécutable ?
Utilisez chmod -R u=rwX,go=rX dir avec un X majuscule. Le X majuscule n'ajoute le bit d'exécution qu'aux dossiers et aux fichiers déjà exécutables, donc vos fichiers simples restent non exécutables pendant que les dossiers gardent le bit de traversée dont ils ont besoin. Ça évite le dégât que crée chmod -R 755 dir, qui marque chaque fichier exécutable, y compris les confs et les images qui ne devraient jamais tourner. Le x minuscule appliquerait l'exécution à tout, ce que vous cherchez justement à éviter.