La commande chmod Linux permet de modifier les permissions d’accès d’un fichier ou d’un répertoire. La commande chmod est une base essentielle pour administrer un système Linux, sécuriser un serveur ou corriger une erreur de droits. Ce mémo couvre la syntaxe octale, le mode symbolique, le X majuscule, les permissions spéciales, le dépannage et la FAQ.
L’essentiel
Commande clé : chmod 755 fichier (rwx propriétaire, r-x groupe et autres).
Prérequis : accès terminal, sudo pour les fichiers système.
Portée : universelle, toutes distributions (GNU coreutils).
Sources : documentation officielle des projets cités, consultée le 20 juillet 2026.
Comprendre les permissions Linux
Chaque fichier et répertoire possède trois niveaux de permissions appliqués à trois catégories d’utilisateurs. Utilisez la commande suivante pour afficher les permissions du fichier :
ls -l script.sh
Exemple de sortie annoté :
-rwxr-xr-- 1 utilisateur groupe 4096 … script.sh
Décomposition des 10 premiers caractères :
-rwxr-xr--
│└┬┘└┬┘└┬┘
│ │ │ └─ autres (o) : r--
│ │ └──── groupe (g) : r-x
│ └─────── propriétaire (u) : rwx
└───────── type : fichier ordinaire (-)
Le premier caractère désigne le type : - fichier ordinaire, d répertoire, l lien symbolique. Les 9 suivants se lisent en trois groupes de trois : u (user/propriétaire), g (group/groupe), o (others/autres). Chaque permission a une valeur numérique : r = 4, w = 2, x = 1. On additionne pour obtenir la valeur octale du groupe.
| Groupe | Symboles | Valeur octale | Signification |
|---|---|---|---|
| Propriétaire (u) | rwx | 7 (4+2+1) | Lecture + écriture + exécution |
| Groupe (g) | r-x | 5 (4+0+1) | Lecture + exécution |
| Autres (o) | r– | 4 (4+0+0) | Lecture seule |
Permission spéciale pour les répertoires : le bit x sur un répertoire ne l’« exécute » pas. Il permet d’y entrer et de traverser ses sous-répertoires. Sans x, même la permission r seule ne permet pas de lister le contenu.
Commande chmod Linux : syntaxe et modes
chmod [options] mode fichier_ou_répertoire
Mode numérique (octale) — le plus rapide
# Script exécutable par tous, modifiable uniquement par le propriétaire
chmod 755 script.sh
# Fichier de configuration : lecture/écriture propriétaire, lecture seule pour les autres
chmod 644 fichier.conf
# Fichier privé (clé SSH, token, mot de passe)
chmod 600 ~/.ssh/id_ed25519
# Répertoire strictement privé
chmod 700 ~/privé
| Valeur | Notation symbolique | Usage typique |
|---|---|---|
| 755 | rwxr-xr-x | Scripts, répertoires web publics |
| 644 | rw-r–r– | Fichiers HTML, configs, logs |
| 600 | rw——- | Clés SSH, fichiers privés |
| 700 | rwx—— | Répertoires privés |
| 400 | r——– | Lecture seule stricte |
| 750 | rwxr-x— | Script propriétaire + groupe, invisible pour les autres |
| 777 | rwxrwxrwx | ⚠️ À éviter absolument en production |
Mode symbolique — le plus lisible
Avec la commande chmod Linux, le mode symbolique modifie les permissions existantes sans tout réécrire. On utilise u (user), g (group), o (others), a (all) avec les opérateurs + (ajouter), - (retirer), = (définir exactement).
# Rendre exécutable uniquement pour le propriétaire
chmod u+x script.sh
# Retirer l'écriture pour le groupe et les autres
chmod go-w fichier.txt
# Définir exactement : propriétaire rw, tous les autres r
chmod u=rw,go=r fichier.conf
# Ajouter l'exécution pour tout le monde
chmod a+x script.sh
# X majuscule : ajoute x uniquement aux répertoires (pas aux fichiers)
chmod -R a+X /var/www/html
Astuce : le X majuscule est particulièrement utile en récursif. Il ajoute le droit d’exécution uniquement aux répertoires (pour pouvoir les traverser), sans rendre tous vos fichiers exécutables par erreur.
Commande chmod Linux récursive : -R et combinaison avec find
# Appliquer 755 récursivement (attention : rend TOUS les fichiers exécutables)
chmod -R 755 /var/www/html
# Méthode recommandée : cibler fichiers et répertoires séparément
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# Copier les permissions d'un fichier de référence
chmod --reference=fichier_modele.conf nouveau_fichier.conf
Règle d’or avec la commande chmod Linux : ne jamais utiliser chmod -R 777 sur un serveur web. C’est la première erreur de sécurité des débutants et elle expose à des injections de code malveillant. Préférez toujours la combinaison find + chmod pour distinguer fichiers (644) et répertoires (755).
Cas pratiques avec la commande chmod Linux
Rendre un script exécutable
chmod +x mon-script.sh
./mon-script.sh
Sécuriser une clé SSH privée
SSH refuse de démarrer si la clé privée est trop permissive (« bad permissions »). La solution :
chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/.ssh
Ces deux commandes ne suffisent que si SSH est déjà installé et configuré. Pour partir de zéro — installation d’OpenSSH, fichier sshd_config, authentification par clés et hardening — consulte le guide complet pour configurer SSH sur Linux.
Permissions correctes pour un serveur web (Apache/Nginx)
# Standard : 755 répertoires, 644 fichiers
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# WordPress : le propriétaire doit être www-data (ou le user PHP)
chown -R www-data:www-data /var/www/html
Vérifier les permissions d’un fichier
# Format symbolique (-rwxr-xr-x)
ls -l fichier.txt
# Format octal (affiche directement 755, 644...)
stat -c "%a %n" fichier.txt
# Tous les fichiers d'un répertoire en format octal
find /var/www/html -exec stat -c "%a %n" {} \;
Permissions spéciales : setuid, setgid et sticky bit
Au-delà des permissions classiques rwx, Linux dispose de trois bits spéciaux. Ils s’ajoutent en préfixe de la valeur octale : setuid = 4, setgid = 2, sticky bit = 1.
Setuid (4) — exécution avec les droits du propriétaire
Quand le setuid est positionné sur un exécutable, le programme tourne avec les droits de son propriétaire (souvent root), quel que soit l’utilisateur qui le lance. C’est ainsi que /usr/bin/passwd peut modifier /etc/shadow même pour un utilisateur normal.
# Activer le setuid (en mode symbolique)
chmod u+s /usr/bin/monprogramme
# ou en mode octal (le 4 préfixe les permissions normales)
chmod 4755 /usr/bin/monprogramme
# Vérification : 's' remplace 'x' du propriétaire
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root 59976 ... /usr/bin/passwd
Setgid (2) — héritage de groupe sur les répertoires partagés
Sur un répertoire, le setgid force tous les nouveaux fichiers créés à hériter du groupe du répertoire, pas du groupe primaire de l’utilisateur créateur. Ideal pour les dossiers partagés entre collègues — bien plus propre qu’un chmod 777.
# Partage d'équipe : tous les fichiers créés héritent du groupe 'devteam'
chmod g+s /var/projet/shared
# ou en octal
chmod 2755 /var/projet/shared
# Vérification : 's' remplace 'x' du groupe
ls -ld /var/projet/shared
# drwxr-sr-x 2 root devteam 4096 ... /var/projet/shared
Sticky bit (1) — protection des fichiers en répertoire partagé
Sur un répertoire accessible en écriture à tous (type /tmp), le sticky bit empêche un utilisateur de supprimer les fichiers des autres. Seul le propriétaire du fichier (ou root) peut le supprimer.
# /tmp a toujours le sticky bit activé nativement
ls -ld /tmp
# drwxrwxrwt 20 root root 4096 ... /tmp
# (le 't' indique le sticky bit actif)
# Activer le sticky bit sur un répertoire partagé
chmod +t /var/partage
# ou en octal
chmod 1777 /var/partage
Dépannage des erreurs courantes
bash: permission denied — script non exécutable
$ ./mon-script.sh
bash: ./mon-script.sh: Permission denied
# Solution : ajouter le bit exécution
chmod +x mon-script.sh
SSH : « bad permissions » sur la clé privée
$ ssh user@serveur
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# Solution : clé privée en 600, répertoire .ssh en 700
chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/.ssh
Répertoire inaccessible après chmod -R
# Problème : chmod -R 644 a retiré le x des répertoires
# Les répertoires nécessitent le bit x pour être traversés
ls -la /mon/repertoire
# drw-r--r-- (pas de x = inaccessible !)
# Solution : rétablir x sur les répertoires
find /mon/repertoire -type d -exec chmod 755 {} \;
Erreur « Operation not permitted »
$ chmod 755 /etc/fichier_systeme
chmod: changing permissions of '/etc/fichier_systeme': Operation not permitted
# Solution : utiliser sudo pour les fichiers système
sudo chmod 755 /etc/fichier_systeme
Options de la commande chmod Linux
| Option | Description |
|---|---|
-R | Récursif : applique aux sous-dossiers et fichiers |
-v | Verbeux : affiche chaque fichier modifié |
-c | Comme -v mais n’affiche que les fichiers vraiment modifiés |
--reference=fichier | Copie les permissions d’un fichier de référence |
chmod, chown, umask et ACL : l’écosystème complet
La commande chmod Linux définit ce que l’on peut faire avec un fichier. Pour maîtriser complètement la gestion des droits Linux, quatre outils se complètent. Les permissions se gèrent aussi au quotidien dans des scripts planifiés : voyez notre guide pour automatiser des sauvegardes avec rsync et crontab, où le script doit être en mode 700.
- chown — change le propriétaire et le groupe d’un fichier
- umask — définit les permissions par défaut appliquées à la création de tout nouveau fichier
- setfacl / getfacl — les ACL (Access Control Lists) permettent des permissions précises par utilisateur ou groupe, au-delà du modèle u/g/o classique
- grep — pour rechercher un motif dans un fichier avant d’en modifier les droits
- chattr / lsattr — attributs de fichier étendus (ex : rendre un fichier immuable même pour root)
Pour aller plus loin, consultez la documentation officielle GNU coreutils et le man chmod (linux.man7.org).
Conclusion
Maîtriser chmod revient à comprendre le triptyque propriétaire, groupe et autres, puis à choisir les droits les plus restrictifs compatibles avec l’usage prévu. Utilisez couramment 755 pour les répertoires accessibles, 644 pour les fichiers ordinaires et 600 pour les données sensibles, puis vérifiez le résultat avec ls -l ou stat. Évitez chmod -R 777 : dans une arborescence, ciblez séparément les fichiers et les répertoires avec find afin de conserver un système fonctionnel et sûr.
FAQ — Questions fréquentes sur la commande chmod Linux
Quelle est la différence entre chmod 755 et chmod 644 ?
chmod 755 donne au propriétaire les droits lecture + écriture + exécution (rwx), et au groupe et aux autres lecture + exécution (r-x). C’est le standard pour les scripts exécutables et les répertoires web. chmod 644 donne au propriétaire lecture + écriture (rw-) et aux autres lecture seule (r–). C’est le standard pour les fichiers de configuration et les pages HTML.
chmod 777 est-il dangereux ?
Oui, chmod 777 est à proscrire en production. Il accorde lecture, écriture et exécution à tous les utilisateurs du système, y compris les processus web et les utilisateurs inconnus. Sur un serveur web, cela permet à n’importe quel script PHP maléfique d’écrire ou d’exécuter des fichiers. Utilisez 755 pour les répertoires et 644 pour les fichiers.
Comment réappliquer les permissions d’origine sur /var/www ?
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
chown -R www-data:www-data /var/www/html
chmod modifie-t-il les permissions des liens symboliques ?
Non. chmod suit les liens symboliques et modifie les permissions du fichier cible, pas celles du lien lui-même. Les permissions affichées sur un lien symbolique (lrwxrwxrwx) sont toujours 777 mais n’ont aucun effet — ce sont les permissions du fichier pointé qui comptent.
Comment trouver tous les fichiers avec chmod 777 sur le système ?
# Lister tous les fichiers avec permissions 777
find / -perm 777 -type f 2>/dev/null
# Lister les fichiers avec le bit setuid actif (potentielle faille sécurité)
find / -perm -4000 -type f 2>/dev/null
Dernière vérification des commandes et des procédures : 20 juillet 2026, d’après la documentation officielle des projets et distributions cités.