Commande chmod Linux — terminal montrant chmod 755, 644, 600 avec explication des permissions

Chmod sous Linux : lire, calculer et modifier les permissions (755, 644, 777, +x)

User avatar placeholder
Écrit par Vincent

Mis à jour le 2 octobre 2026

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).

Table des matières

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.

ChiffreCalculDroits
00--- aucun
11--x exécution
22-w- écriture
32+1-wx écriture et exécution
44r-- lecture
54+1r-x lecture et exécution
64+2rw- lecture et écriture
74+2+1rwx 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

ValeurNotationUsage typiqueRisque
400r--------Fichier en lecture seule stricte (clé de sauvegarde)Aucun
600rw-------Clé SSH privée, fichier de mots de passeAucun
644rw-r--r--Fichier ordinaire, page web, configurationLisible par tous
664rw-rw-r--Fichier modifié à plusieurs dans un groupeGroupe en écriture
666rw-rw-rw-Rarement justifiéModifiable par tous
700rwx------Dossier ou script strictement personnelAucun
744rwxr--r--Script que vous seul exécutez, lisible par les autresFaible
750rwxr-x---Script ou dossier réservé au propriétaire et au groupeFaible
755rwxr-xr-xScript, programme, dossier accessible à tousFaible
775rwxrwxr-xDossier de travail partagé par un groupeGroupe en écriture
777rwxrwxrwxÀ é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 :

Commandeumask 022umask 077
chmod +x711 rwx--x--x700 rwx------
chmod a+x711 rwx--x--x711 rwx--x--x
chmod 755755 rwxr-xr-x755 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 644 peut s’arrêter en route. En utilisateur non root, il retire le x d’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 -R est 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

OptionEffet
-RApplique le mode au répertoire et à tout son contenu
-vDécrit l’action pour chaque fichier, modifié ou non
-cNe décrit que les fichiers dont les droits changent réellement
-fN’affiche pas les erreurs sur les fichiers non modifiables
--reference=FICHIERCopie les droits d’un fichier de référence
--preserve-rootRefuse 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émentNiveauVérification
Valeurs 400 à 777 et leur notationTestéchmod puis stat -c '%a %A' sur chaque valeur
chmod +x, a+x et 755 selon l’umaskTestéFichier en 600, umask 022 puis 077
X majusculeTestéRépertoire en 644, fichiers en 644 et 744
Setgid conservé par chmod 755, retiré par g-s et 00755TestéRépertoire en 2775
Liens symboliques en argument et en -RTestéLien vers un fichier hors de l’arborescence
Dossier partagé chgrp + chmod 2775Testé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-rootTestéUtilisateur non root, locale fr_FR.UTF-8
Avertissement de clé SSH en 644Testé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 -permTesté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-coreutilsConforme à la documentationAnnonce Canonical d’avril 2026 : seuls cp, mv, rm restent GNU
Options de montage FATConforme à la documentationDocumentation 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.

Sources officielles

Vincent

Vincent est le créateur de MémoLinux. Venu de Windows par curiosité, il est resté sur Linux pour sa logique et le plaisir de comprendre ce qui se passe sous le capot. Il documente ici les commandes et les procédures qu’il utilise lui-même, avec leurs sources officielles et leur date de vérification.

Laisser un commentaire