La commande chmod modifie les droits de lecture (r), d’écriture (w) et d’exécution (x) d’un fichier ou d’un répertoire, pour son propriétaire, son groupe et les autres utilisateurs. En pratique, chmod 755 convient à un script ou à un dossier accessible, chmod 644 à un fichier ordinaire et chmod 600 à une clé privée.
Lire et calculer ces valeurs prend une minute ; les pièges se concentrent sur chmod -R et chmod 777.
L’essentiel
Commande clé : chmod 755 script.sh (rwx pour le propriétaire, r-x pour le groupe et les autres).
Prérequis : un terminal ; sudo pour les fichiers qui ne vous appartiennent pas.
Portée : toutes distributions. chmod vient de GNU coreutils sur la plupart d’entre elles, de BusyBox sur Alpine, et de rust-coreutils (uutils) sur Ubuntu 26.04 LTS.
Vérifié le 2 octobre 2026 : chaque commande chmod a été exécutée avec GNU coreutils 9.4 et uutils 0.10.0 (détail en fin d’article).
Lire les permissions d’un fichier avec ls -l et stat
Avant de modifier des droits, affichez-les. ls -l les montre en notation symbolique, stat en notation octale :
# Notation symbolique
ls -l script.sh
# Notation octale et symbolique côte à côte
stat -c '%a %A %n' script.sh
Exemple de sortie :
-rwxr-xr-- 1 alice alice 18 oct. 2 17:05 script.sh
754 -rwxr-xr-- script.sh
Les dix premiers caractères se lisent ainsi :
-rwxr-xr--
│└┬┘└┬┘└┬┘
│ │ │ └── autres (o) : r--
│ │ └───── groupe (g) : r-x
│ └──────── propriétaire (u) : rwx
└────────── type : - fichier, d répertoire, l lien symbolique
Sur un répertoire, le sens des lettres change. r permet de lister les noms qu’il contient, w d’y créer ou supprimer des fichiers, x d’y entrer et d’accéder à son contenu. Avec r sans x, vous voyez les noms des fichiers mais ne pouvez ni les ouvrir ni entrer dans le dossier.
Pour un répertoire, ajoutez -d à ls, sinon la commande affiche son contenu au lieu de ses droits : ls -ld /var/www.
Convertir rwx en octal pour chmod
Chaque droit a une valeur : r = 4, w = 2, x = 1. On additionne les droits d’une catégorie pour obtenir un chiffre de 0 à 7, puis on écrit trois chiffres dans l’ordre propriétaire, groupe, autres.
| Chiffre | Calcul | Droits |
|---|---|---|
| 0 | 0 | --- aucun |
| 1 | 1 | --x exécution |
| 2 | 2 | -w- écriture |
| 3 | 2+1 | -wx écriture et exécution |
| 4 | 4 | r-- lecture |
| 5 | 4+1 | r-x lecture et exécution |
| 6 | 4+2 | rw- lecture et écriture |
| 7 | 4+2+1 | rwx tous les droits |
Exemple : rwxr-x--- donne 4+2+1 = 7 pour le propriétaire, 4+1 = 5 pour le groupe et 0 pour les autres. Le résultat est chmod 750.
Les valeurs chmod courantes et quand les utiliser
| Valeur | Notation | Usage typique | Risque |
|---|---|---|---|
| 400 | r-------- | Fichier en lecture seule stricte (clé de sauvegarde) | Aucun |
| 600 | rw------- | Clé SSH privée, fichier de mots de passe | Aucun |
| 644 | rw-r--r-- | Fichier ordinaire, page web, configuration | Lisible par tous |
| 664 | rw-rw-r-- | Fichier modifié à plusieurs dans un groupe | Groupe en écriture |
| 666 | rw-rw-rw- | Rarement justifié | Modifiable par tous |
| 700 | rwx------ | Dossier ou script strictement personnel | Aucun |
| 744 | rwxr--r-- | Script que vous seul exécutez, lisible par les autres | Faible |
| 750 | rwxr-x--- | Script ou dossier réservé au propriétaire et au groupe | Faible |
| 755 | rwxr-xr-x | Script, programme, dossier accessible à tous | Faible |
| 775 | rwxrwxr-x | Dossier de travail partagé par un groupe | Groupe en écriture |
| 777 | rwxrwxrwx | À éviter (voir plus bas) | Élevé |
chmod 755 : la valeur des scripts et des dossiers
chmod 755 donne tous les droits au propriétaire, et la lecture et l’exécution au groupe et aux autres. Tout le monde peut lancer le script ou ouvrir le dossier, mais seul le propriétaire peut les modifier. C’est la valeur standard des répertoires d’un site web et des scripts partagés.
chmod 644 et chmod 600 : les fichiers
chmod 644 rend un fichier modifiable par son propriétaire et lisible par tous : c’est la valeur par défaut d’un fichier créé avec l’umask courant 022. chmod 600 le rend illisible pour les autres. OpenSSH exige qu’une clé privée ne soit accessible à personne d’autre que son propriétaire : 600 ou 400 conviennent.
chmod 775 ou 755 : quand le groupe doit écrire
La seule différence est le droit d’écriture du groupe. Choisissez 775 pour un dossier où plusieurs membres d’un même groupe créent des fichiers. Gardez 755 partout ailleurs.
chmod 700 : un dossier personnel
chmod 700 ferme complètement un dossier ou un script aux autres utilisateurs. OpenSSH recommande cette valeur pour le répertoire ~/.ssh.
chmod 777 : ce que ça fait, pourquoi l’éviter, comment réparer
chmod 777 donne la lecture, l’écriture et l’exécution à tous les utilisateurs du système, y compris les services comme le serveur web. Sur un dossier, n’importe quel processus peut y déposer, modifier ou supprimer des fichiers. Sur un serveur, une faille dans une application web suffit alors à écrire un script malveillant puis à l’exécuter.
Attention. Ne lancez jamais chmod -R 777 sur un dossier système ou sur un site en production. Un problème d’accès se règle par le bon propriétaire (chown) ou par un groupe partagé, pas en ouvrant tout.
Donner l’accès à un dossier partagé sans chmod 777
La méthode propre : un groupe dédié, et le bit setgid sur le dossier pour que chaque nouveau fichier hérite de ce groupe.
# Créer le groupe et y ajouter l'utilisateur (reconnexion nécessaire)
sudo groupadd equipe
sudo usermod -aG equipe alice
# Confier le dossier au groupe, avec écriture de groupe et setgid (le 2)
sudo mkdir -p /srv/partage
sudo chgrp equipe /srv/partage
sudo chmod 2775 /srv/partage
drwxrwsr-x 2 root equipe 4096 oct. 2 17:05 /srv/partage
Le s à la place du x du groupe confirme le setgid. Pour que les fichiers créés soient aussi modifiables par le groupe, les utilisateurs concernés doivent avoir un umask 002 plutôt que 022. Si un seul utilisateur précis doit accéder au dossier, les ACL (setfacl) sont plus fines qu’un groupe.
Réparer après un chmod -R 777
Rétablissez des droits standard en distinguant répertoires et fichiers :
# Répertoires en 755, fichiers en 644
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
# Contrôler qu'il ne reste aucun fichier en 777
sudo find /var/www/html -type f -perm 777
# Variante : tout fichier modifiable par les autres
sudo find /var/www/html -type f -perm -o+w
Remettez ensuite en 755 les scripts qui doivent rester exécutables. Pour comprendre les tests -type et -perm, voyez comment sélectionner fichiers et dossiers avec find.
Le mode symbolique de chmod : u, g, o, a et + − =
Le mode symbolique modifie un droit sans réécrire les autres. On combine une cible (u propriétaire, g groupe, o autres, a tous), un opérateur (+ ajouter, - retirer, = définir exactement) et des droits.
# Ajouter l'exécution pour le propriétaire seulement
chmod u+x script.sh
# Retirer l'écriture au groupe et aux autres
chmod go-w fichier.txt
# Définir exactement : rw pour le propriétaire, r pour les autres (= 644)
chmod u=rw,go=r fichier.conf
# Plusieurs changements en une fois
chmod u+x,g-w,o= script.sh
Le X majuscule ajoute l’exécution seulement aux répertoires et aux fichiers déjà exécutables pour au moins un utilisateur, selon le manuel de GNU coreutils. Il sert à rendre une arborescence traversable sans rendre exécutables les fichiers ordinaires :
chmod -R a+X /srv/documents
Testé sur un répertoire en 644, un fichier en 644 et un fichier en 744 : le répertoire passe en 755, le fichier en 644 ne change pas, le fichier en 744 passe en 755.
chmod +x ou chmod 755 : quelle différence ?
chmod 755 impose exactement rwxr-xr-x, quels que soient les droits précédents. chmod +x ajoute seulement le droit d’exécution, sans toucher au reste, et en tenant compte de votre umask quand aucune cible (u, g, o, a) n’est précisée.
Résultat mesuré sur un fichier en 600 :
| Commande | umask 022 | umask 077 |
|---|---|---|
chmod +x | 711 rwx--x--x | 700 rwx------ |
chmod a+x | 711 rwx--x--x | 711 rwx--x--x |
chmod 755 | 755 rwxr-xr-x | 755 rwxr-xr-x |
chmod +x ne produit donc pas forcément 755. Pour rendre exécutable un script que vous avez écrit, chmod +x suffit. Pour imposer un résultat identique sur toutes les machines, donnez la valeur octale.
chmod récursif (-R) sans casser une arborescence
L’option -R applique le même mode à un répertoire et à tout son contenu, fichiers compris.
Attention. chmod -R sur une arborescence système (/etc, /usr, /var) peut rendre le système inutilisable. GNU chmod ne protège pas / par défaut, contrairement à rm : ajoutez --preserve-root dans vos scripts.
# Même mode partout : tous les fichiers deviennent exécutables
chmod -R 755 /srv/site
# Méthode recommandée : répertoires et fichiers séparément
find /srv/site -type d -exec chmod 755 {} \;
find /srv/site -type f -exec chmod 644 {} \;
# Garde-fou contre une erreur de chemin dans un script
chmod -R --preserve-root 755 "$CIBLE"
Avec --preserve-root, une cible égale à / est refusée :
chmod: il est dangereux d'opérer récursivement sur '/'
chmod: utilisez --no-preserve-root pour inhiber cette mesure de sécurité
Deux comportements à connaître :
chmod -R 644peut s’arrêter en route. En utilisateur non root, il retire lexd’un dossier avant d’avoir parcouru son contenu, puis ne peut plus y descendre (« impossible d’accéder à… : Permission non accordée »). La correction est expliquée dans la section des erreurs.- Les liens symboliques sont ignorés en récursif. Un lien passé directement en argument fait modifier le fichier qu’il désigne, mais un lien rencontré pendant
-Rest sauté (manuel GNU coreutils, vérifié en test).
Permissions spéciales : setuid, setgid et sticky bit
Trois bits spéciaux se placent en quatrième chiffre, devant les trois autres : setuid = 4, setgid = 2, sticky bit = 1.
Setuid (4) : exécuter avec les droits du propriétaire
Un exécutable setuid tourne avec les droits de son propriétaire, quel que soit l’utilisateur qui le lance. C’est ce qui permet à passwd de modifier /etc/shadow :
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 64152 mai 30 2024 /usr/bin/passwd
Le s remplace le x du propriétaire ; stat affiche 4755. Linux ignore ce bit sur un script (fichier commençant par #!) : il ne sert que sur un binaire, et un binaire setuid root mal écrit devient une porte d’élévation de privilèges.
Setgid (2) : hériter du groupe dans un dossier
Sur un répertoire, le setgid fait hériter chaque nouveau fichier du groupe du dossier, comme dans l’exemple du dossier partagé plus haut (chmod 2775 ou chmod g+s).
Sticky bit (1) : protéger les fichiers d’un dossier ouvert
Sur un répertoire où tout le monde écrit, le sticky bit empêche un utilisateur de supprimer les fichiers des autres. /tmp en est l’exemple :
drwxrwxrwt 10 root root 4096 oct. 2 17:04 /tmp
On l’active avec chmod +t dossier ou chmod 1777 dossier.
Piège : chmod 755 ne retire pas le setgid d’un répertoire
Sur un répertoire, chmod conserve les bits setuid et setgid avec un mode octal comme 755 ou 0755, sauf demande explicite (man chmod) : il faut 00755, =755 ou g-s pour les retirer. Un dossier en 2775 passé en 755 devient donc 2755, pas 755.
# Point de départ : un dossier en 2775
chmod 755 partage # devient 2755 : le setgid reste
chmod g-s partage # retire le setgid : devient 755
# Ou directement, depuis 2775, en une commande
chmod 00755 partage # devient 755 (GNU chmod et uutils)
Cas pratiques avec chmod
Rendre un script exécutable
chmod +x mon-script.sh
./mon-script.sh
Protéger une clé SSH privée
OpenSSH refuse une clé privée lisible par d’autres utilisateurs. Placez la clé en 600 et le dossier en 700 :
chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/.ssh
Ces droits ne règlent que la clé côté client. La configuration du serveur est traitée dans le guide pour sécuriser l’accès SSH par clé.
Droits d’un site web (Apache ou Nginx)
Répertoires en 755, fichiers en 644, et le bon propriétaire, c’est-à-dire le compte sous lequel tourne le serveur web (www-data sur Debian et Ubuntu).
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
Le propriétaire se règle avec une autre commande : voir comment changer le propriétaire avec chown.
Erreurs courantes avec chmod
« Permission non accordée » en lançant un script
bash: ./script.sh: Permission non accordée
Le fichier n’a pas le droit d’exécution. Ajoutez-le avec chmod +x script.sh. Sur un système en anglais, le message est « Permission denied ».
« UNPROTECTED PRIVATE KEY FILE » avec SSH
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "id_ed25519": bad permissions
La clé est lisible par d’autres. Corrigez avec chmod 600 ~/.ssh/id_ed25519.
Dossier inaccessible après chmod -R 644
$ chmod -R 644 projet
chmod: impossible d'accéder à 'projet/sous': Permission non accordée
$ ls -ld projet
drw-r--r-- 3 alice alice 4096 oct. 2 17:05 projet
$ cd projet/sous
bash: cd: projet/sous: Permission non accordée
Le -R 644 a retiré le x des répertoires, qui ne sont plus traversables. Remettez d’abord le dossier de tête en 755, puis séparez répertoires et fichiers :
chmod 755 projet
find projet -type d -exec chmod 755 {} \;
find projet -type f -exec chmod 644 {} \;
« Opération non permise »
chmod: modification des droits de '/etc/hostname': Opération non permise
Seuls le propriétaire du fichier et root peuvent changer ses droits. Utilisez sudo si la modification est légitime. Si l’erreur persiste en root, le fichier porte peut-être l’attribut immuable i : lsattr fichier l’affiche, sudo chattr -i fichier le retire.
Options de la commande chmod
| Option | Effet |
|---|---|
-R | Applique le mode au répertoire et à tout son contenu |
-v | Décrit l’action pour chaque fichier, modifié ou non |
-c | Ne décrit que les fichiers dont les droits changent réellement |
-f | N’affiche pas les erreurs sur les fichiers non modifiables |
--reference=FICHIER | Copie les droits d’un fichier de référence |
--preserve-root | Refuse d’agir récursivement sur / |
Exemple de sortie avec -c :
le mode de 'c1' a été modifié de 0644 (rw-r--r--) en 0600 (rw-------)
chmod sur Ubuntu 26.04 : rust-coreutils (uutils)
Depuis Ubuntu 26.04 LTS, les commandes de base sont fournies par défaut par rust-coreutils, une réécriture en Rust. Canonical précise que seuls cp, mv et rm restent fournis par GNU coreutils (annonce d’avril 2026) : chmod ne figurant pas parmi ces exceptions, il vient de rust-coreutils.
Sur nos tests (uutils uu_chmod 0.10.0, même version que celle distribuée pour 26.04, mais compilé depuis crates.io), chmod a donné exactement les mêmes résultats que GNU chmod. Seule différence observée sur ce build : les messages s’affichaient en anglais malgré une session en français.
Pour savoir quelle implémentation vous utilisez :
chmod --version | head -1
readlink -f /usr/bin/chmod
chmod (uutils coreutils) indique rust-coreutils, chmod (GNU coreutils) la version GNU. Les syntaxes de ce guide fonctionnent avec les deux.
chmod, chown, umask et ACL : qui fait quoi
- chmod fixe ce que chaque catégorie peut faire avec le fichier.
- chown change le propriétaire et le groupe : c’est souvent lui qu’il faut corriger quand un service ne peut pas écrire.
- umask fixe les droits par défaut des nouveaux fichiers. Avec l’umask courant 022, un fichier naît en 644 et un dossier en 755.
- Les ACL (
setfacl,getfacl) accordent des droits à un utilisateur ou un groupe précis, au-delà du modèle propriétaire, groupe, autres.
Un script lancé par cron se garde de préférence en 700 s’il contient des chemins ou des identifiants.
FAQ sur chmod
Faut-il chmod 755 ou 644 pour un site web ?
Les deux : 755 pour les répertoires, qui doivent être traversables, et 644 pour les fichiers, qui n’ont pas besoin d’être exécutables. Appliquez-les séparément avec find -type d et find -type f.
chmod modifie-t-il les liens symboliques ?
Non. chmod ne change jamais les droits d’un lien symbolique, qui s’affichent toujours lrwxrwxrwx sous Linux. Un lien passé en argument fait modifier sa cible ; un lien rencontré pendant chmod -R est ignoré.
Comment annuler un chmod ?
chmod ne garde aucun historique. Réappliquez les valeurs attendues : 755 et 644 pour une arborescence web, ou les droits d’un fichier sain avec chmod --reference=fichier_sain fichier. Pour des fichiers système, une sauvegarde ou la réinstallation du paquet concerné reste la solution fiable.
Pourquoi les droits d’une clé USB ne suivent-ils pas mon chmod ?
Sur une clé formatée en FAT (vfat), le propriétaire et les droits sont fixés au montage par les options uid, gid, umask, dmask et fmask. Par défaut, elles reprennent l’utilisateur et l’umask du processus qui monte la clé (documentation du noyau).
C’est donc sur ces options de montage qu’il faut agir. Vérifiez d’abord le système de fichiers avec findmnt -no FSTYPE --target suivi du chemin de la clé.
Quel est le lien entre umask et chmod ?
umask décide des droits à la création d’un fichier, chmod les modifie ensuite. umask influence aussi chmod +x sans cible : avec un umask 077, il n’ajoute l’exécution que pour le propriétaire.
Conclusion
Pour la plupart des besoins, trois valeurs suffisent : 755 pour les scripts et les répertoires, 644 pour les fichiers, 600 pour tout ce qui est secret. Vérifiez toujours le résultat avec ls -l ou stat avant de passer à la suite. Sur une arborescence, préférez find à chmod -R pour traiter séparément répertoires et fichiers, et ajoutez --preserve-root dans les scripts.
Quand vous êtes tenté par un chmod 777, la bonne réponse est presque toujours un propriétaire corrigé avec chown ou un groupe partagé avec setgid. Pour aller plus loin, protégez vos clés et votre serveur SSH ou appliquez ces droits à un script de sauvegarde automatisé.
Comment ces commandes ont été vérifiées
| Élément | Niveau | Vérification |
|---|---|---|
| Valeurs 400 à 777 et leur notation | Testé | chmod puis stat -c '%a %A' sur chaque valeur |
chmod +x, a+x et 755 selon l’umask | Testé | Fichier en 600, umask 022 puis 077 |
| X majuscule | Testé | Répertoire en 644, fichiers en 644 et 744 |
Setgid conservé par chmod 755, retiré par g-s et 00755 | Testé | Répertoire en 2775 |
Liens symboliques en argument et en -R | Testé | Lien vers un fichier hors de l’arborescence |
Dossier partagé chgrp + chmod 2775 | Testé | Création d’un fichier et d’un dossier par un membre du groupe |
Messages « Permission non accordée », « Opération non permise », -c, --preserve-root | Testé | Utilisateur non root, locale fr_FR.UTF-8 |
| Avertissement de clé SSH en 644 | Testé | OpenSSH 9.6p1, ssh-keygen -y |
chmod refusé en root sur un fichier immuable (chattr +i) | Testé | « Opération non permise », puis chattr -i |
Réparation par find -type d / -type f et find -perm | Testé | Arborescence en -R 644 puis fichiers en 777 |
Setuid ignoré sur un script #! | Testé | Script root en 4755 lancé par un utilisateur : id -u renvoie son propre UID |
| Ubuntu 26.04 fournit chmod par rust-coreutils | Conforme à la documentation | Annonce Canonical d’avril 2026 : seuls cp, mv, rm restent GNU |
| Options de montage FAT | Conforme à la documentation | Documentation du noyau Linux (vfat) |
Banc de test : Ubuntu 24.04 LTS, GNU coreutils 9.4, uutils uu_chmod 0.10.0 compilé depuis crates.io (et non le paquet Ubuntu lui-même), OpenSSH 9.6p1. Les commandes ont été exécutées en utilisateur non root, sauf celles précédées de sudo.