Permissions de fichiers Linux : chmod 755, 644 et 777
Les permissions de fichiers Linux déterminent qui peut lire, écrire ou exécuter chaque fichier et dossier du système. Chaque élément possède trois classes d’utilisateurs (le propriétaire, un groupe et tous les autres), et chaque classe reçoit trois bits de permission : lecture (r), écriture (w) et exécution (x). Cela fait neuf bits par fichier. chmod les définit, et l’abréviation que l’on croise partout est l’octal : les rwx de chaque classe se réduisent à un seul chiffre de 0 à 7 (lecture 4 + écriture 2 + exécution 1).
Trois modes couvrent presque tout ce que vous taperez un jour :
- 755 (
rwxr-xr-x) — répertoires et scripts : le propriétaire peut les modifier, tous les autres peuvent les lire et les exécuter. - 644 (
rw-r--r--) — fichiers ordinaires : le propriétaire écrit, tous les autres lisent. - 777 (
rwxrwxrwx) — accès complet pour tout le monde. Presque toujours une erreur ; c’est une faille de sécurité, pas une solution.
Activez n’importe quelle combinaison dans le calculateur chmod gratuit et regardez l’octal, la chaîne rwx et la commande exacte se mettre à jour ensemble. Le reste de ce guide explique comment ces chiffres fonctionnent et où chacun a sa place.
Les permissions de fichiers Linux en 30 secondes
| Octal | Symbolique | Usage typique |
|---|---|---|
| 400 | r-------- | Clé privée SSH, lecture seule |
| 600 | rw------- | Fichiers privés, clés SSH, .env |
| 644 | rw-r--r-- | Pages web, configuration, la plupart des fichiers |
| 700 | rwx------ | Répertoires privés (~/.ssh) |
| 755 | rwxr-xr-x | Scripts, binaires, répertoires web |
| 775 | rwxrwxr-x | Répertoires partagés par groupe |
| 777 | rwxrwxrwx | Tout le monde, tout — à éviter |
| 1777 | rwxrwxrwt | Répertoires temporaires partagés comme /tmp |
Règle générale : 644 pour les fichiers, 755 pour les répertoires, puis resserrez à partir de là. N’assouplissez un mode que lorsque quelque chose de concret casse, jamais de manière préventive.
Le modèle de permissions : propriétaire, groupe, autres
Trois classes se partagent un même fichier. Le propriétaire (généralement celui qui l’a créé), un seul groupe, et les autres, c’est-à-dire tous les comptes qui ne sont ni le propriétaire ni membre du groupe. Chaque classe reçoit indépendamment la lecture, l’écriture et l’exécution :
- lecture (r) — consulter le contenu d’un fichier, ou lister les entrées d’un répertoire.
- écriture (w) — modifier un fichier, ou ajouter et supprimer des entrées dans un répertoire.
- exécution (x) — lancer un fichier comme un programme, ou entrer (
cd) dans un répertoire.
Le piège qui déroute tout le monde : sur un répertoire, les bits ont un sens différent. r vous permet de lister les noms, w de créer et supprimer les entrées à l’intérieur, et x de le traverser, d’atteindre les fichiers en dessous pour pouvoir y entrer avec cd. Vous pouvez détenir r sans x sur un répertoire, y lancer ls et obtenir malgré tout « Permission denied » au moment où vous essayez d’entrer. C’est précisément pourquoi les répertoires sont en 755, et non en 644.
Lire une ligne ls -l
Lancez ls -l et chaque entrée commence par un bloc de dix caractères :
$ ls -l
-rw-r--r-- 1 jack staff 1400 Jul 17 10:00 index.html
drwxr-xr-x 5 jack staff 160 Jul 17 10:00 assets
Lisez-la de gauche à droite. Le premier caractère est le type de fichier, pas une permission : - est un fichier ordinaire, d un répertoire, l un lien symbolique, c ou b un périphérique, p un tube nommé, s un socket. Les neuf caractères suivants forment trois groupes de rwx : propriétaire, groupe, autres. Ainsi, -rw-r--r-- est un fichier ordinaire où le propriétaire lit et écrit (rw-) tandis que le groupe et les autres ne font que lire (r-- r--), soit 644. drwxr-xr-x est un répertoire en 755.
Certains systèmes ajoutent un marqueur après les neuf bits. Un . final signale un contexte SELinux, un + indique qu’une ACL ajoute des règles au-delà des bits de base, et sur macOS un @ marque des attributs étendus. Aucun d’eux ne change l’octal. Ignorez le marqueur et lisez les neuf caractères.
Notation octale : comment 755 devient rwxr-xr-x
Les permissions de fichiers en octal fonctionnent parce que chaque permission est une puissance de deux :
- lecture = 4
- écriture = 2
- exécution = 1
Additionnez les bits que détient une classe et vous obtenez son chiffre. rwx vaut 4 + 2 + 1 = 7. r-x vaut 4 + 1 = 5. r-- vaut 4. Ainsi, rwxr-xr-x se lit, par groupes de trois, comme 7 5 5. Faites de même pour rw-r--r-- et vous obtenez 4 + 2, 4, 4 → 644. C’est toute l’astuce ; les permissions en octal ne sont rien de plus que trois sommes indépendantes.
Les chiffres de permission 0–7 en un coup d’œil
| Chiffre | Binaire | Permissions |
|---|---|---|
| 0 | 000 | Aucune permission |
| 1 | 001 | Exécution seule |
| 2 | 010 | Écriture seule |
| 3 | 011 | Écriture + exécution |
| 4 | 100 | Lecture seule |
| 5 | 101 | Lecture + exécution |
| 6 | 110 | Lecture + écriture |
| 7 | 111 | Lecture + écriture + exécution |
L’octal n’est rien d’autre que la base 8, si bien que chaque chiffre regroupe trois bits sans déborder sur la classe suivante. Si l’arithmétique positionnelle vous semble un peu lointaine, le convertisseur de base montre comment la base 8 se projette sur le binaire, exactement comme le fait chaque chiffre de permission.
chmod 755 vs 644 vs 777 : les modes que vous taperez vraiment
Voici le comparatif direct pour chmod 755 vs 644 vs 777 :
| Octal | Symbolique | Propriétaire | Groupe | Autres | Usage typique | Risque |
|---|---|---|---|---|---|---|
| 644 | rw-r--r-- | lecture/écriture | lecture | lecture | Fichiers ordinaires | Valeur sûre par défaut |
| 755 | rwxr-xr-x | tout | lecture/exéc | lecture/exéc | Répertoires, scripts | Valeur sûre par défaut |
| 600 | rw------- | lecture/écriture | — | — | Fichiers privés, clés | Très sûr |
| 700 | rwx------ | tout | — | — | Répertoires privés | Très sûr |
| 775 | rwxrwxr-x | tout | tout | lecture/exéc | Répertoires partagés par groupe | Le groupe peut écrire |
| 777 | rwxrwxrwx | tout | tout | tout | (à éviter) | Accessible en écriture par tous |
La différence entre 755 et 644 tient à un seul bit : l’exécution. Les répertoires, les scripts et les binaires ont besoin de x pour être ouverts ou lancés, ils se retrouvent donc en 755. Un fichier ordinaire comme une page HTML, une image ou un fichier de configuration n’a aucune raison d’être exécutable, il reste donc en 644. Confondre les deux est à l’origine de la plupart des erreurs de permissions du quotidien.
Pourquoi 777 est dangereux. Ce mode accorde l’accès en écriture à tous les comptes de la machine, y compris un compte de service compromis ou un processus web détourné. Une racine de documents accessible en écriture par tous est le chemin classique vers un site défiguré ou un malware injecté, car quiconque l’atteint peut réécrire votre code. Quand un message de forum vous dit de faire chmod 777 sur quelque chose « pour que ça marche », le vrai problème relève presque toujours de la propriété, abordée plus bas.
L’exception 1777. /tmp est accessible en écriture par tous à dessein, mais avec un garde-fou. Le mode 1777 ajoute le sticky bit, qui laisse chacun créer des fichiers tout en empêchant les utilisateurs de supprimer ou de renommer des fichiers qui ne leur appartiennent pas. C’est pourquoi les répertoires temporaires partagés sont sûrs en 1777 mais jamais en simple 777. Tapez 777 dans le calculateur chmod et le panneau de risque le signale immédiatement, tandis qu’il reconnaît 1777 comme le motif standard des répertoires partagés.
Mode numérique ou symbolique
chmod accepte les mêmes bits de deux manières.
Le mode numérique (absolu) énonce le résultat complet. chmod 755 file fixe les neuf bits à rwxr-xr-x quel que soit leur état antérieur. C’est ce que vous voulez dans les scripts et le déploiement, là où vous imposez un état connu et validé.
Le mode symbolique (relatif) décrit une modification. chmod u+x file bascule un seul bit (ajoute l’exécution pour le propriétaire) et laisse tout le reste intact. chmod u=rwx,go=rx file définit explicitement des classes entières. Le mode symbolique convient aux ajustements ponctuels où réénoncer le mode complet serait excessif.
# Numeric: overwrite the whole mode
$ chmod 644 report.txt
# Symbolic: change only what you name
$ chmod u+x deploy.sh # add execute for the owner
$ chmod go-w shared.conf # remove write from group and others
$ chmod u=rw,go=r notes.md # set each class explicitly → 644
Un piège avec le mode symbolique : chmod +x sans classe est filtré par votre umask. Avec l’umask courant 022, chmod +x script.sh ajoute l’exécution pour tout le monde, ce qui équivaut à chmod a+x. Sous un umask plus strict comme 077, il n’affecte que le propriétaire. Quand vous voulez un résultat garanti, nommez la classe : u+x pour le seul propriétaire, a+x pour tout le monde.
Permissions spéciales : setuid, setgid et le sticky bit
Au-delà des neuf bits standards, un quatrième chiffre octal, en tête, porte trois modes spéciaux, le trio setuid, setgid et sticky bit :
- setuid = 4000 — le programme s’exécute avec les privilèges du propriétaire du fichier, et non ceux de l’appelant. C’est ainsi que
passwd, dont le propriétaire est root, permet à un utilisateur ordinaire de mettre à jour une base de mots de passe appartenant à root. - setgid = 2000 — la même idée pour le groupe. Sur un répertoire, il fait aussi hériter les nouveaux fichiers du groupe du répertoire, ce qui maintient un projet partagé sous une propriété de groupe cohérente.
- sticky bit = 1000 — sur un répertoire partagé, restreint la suppression pour que les utilisateurs ne puissent effacer que leurs propres fichiers.
/tmpen 1777 en est l’exemple canonique.
$ chmod 4755 /usr/local/bin/mytool # setuid
$ chmod 2775 /srv/shared # setgid on a shared dir
$ chmod 1777 /tmp # sticky bit
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59976 Jul 17 10:00 /usr/bin/passwd
La règle de casse s/S et t/T
Dans ls -l, les bits spéciaux réutilisent l’emplacement du bit d’exécution, et la casse vous indique si l’exécution est également activée. Un s minuscule (setuid/setgid) ou un t minuscule (sticky) signifie que le bit spécial et l’exécution sont actifs, c’est le cas normal. Un S ou un T majuscule signifie que le bit spécial est activé mais que l’exécution ne l’est pas, ce qui est généralement une erreur, car un bit spécial sur un fichier non exécutable ne sert à rien.
Comparez rwsr-xr-x (4755, setuid avec exécution, correct) à rwSr--r-- (4644, setuid sans exécution, suspect). Chaque fois que vous voyez un S ou un T majuscule, vérifiez si quelqu’un n’a pas retiré le bit d’exécution par accident.
Le piège des répertoires sous GNU coreutils
C’est la différence de plateforme que la plupart des tutoriels présentent de travers. Sur Linux (GNU coreutils), un chmod 755 dir numérique n’efface pas un bit setuid ou setgid existant sur ce répertoire. Il le préserve. Si un répertoire est déjà en 2755 (setgid) et que vous lancez chmod 755 en espérant repartir de zéro, le bit setgid reste, et le répertoire est en réalité toujours en 2755.
Pour l’effacer réellement, soyez explicite :
$ chmod 00755 dir # five-digit form zeroes the special digit
$ chmod =755 dir # = clears every bit not listed
$ chmod u-s,g-s dir # remove setuid and setgid by name
BSD et macOS font l’inverse : un chmod 755 numérique efface les bits spéciaux par défaut. Ainsi, un script de déploiement qui « réinitialise » les permissions avec chmod -R 755 se comporte différemment sur un portable Mac et sur un serveur Linux. Cette conservation est documentée dans le manuel GNU coreutils ; en cas de doute, utilisez la forme à cinq chiffres ou u-s,g-s pour que le résultat soit identique partout.
umask : ce qu’obtiennent les fichiers nouvellement créés
Vous faites rarement chmod sur chaque fichier à la main ; la plupart reçoivent leur mode à la création, et c’est umask qui le décide. Un umask est un ensemble de bits à désactiver. Les nouveaux fichiers partent de la base 666 et les nouveaux répertoires de 777, et l’umask retire des bits par masquage :
effective mode = base & ~umask
Les fichiers commencent à 666, et non à 777, parce qu’un fichier tout neuf n’a aucune raison d’être exécutable par défaut. Ce bit s’ajoute délibérément avec chmod +x.
| umask | Nouveaux fichiers | Nouveaux répertoires | Signification |
|---|---|---|---|
| 022 | 644 | 755 | Par défaut — les autres lisent, sans écrire |
| 077 | 600 | 700 | Privé au propriétaire |
| 002 | 664 | 775 | Collaboration de groupe |
Déroulez l’umask 022 par défaut à la main : 666 & ~022 = 666 & 755 = 644, et 777 & ~022 = 755. Vérifiez votre valeur actuelle avec umask, et définissez une valeur par défaut de session avec, par exemple, umask 077 sur une machine où rien ne doit être lisible par le groupe ou par tous.
chmod ou chown : permissions et propriété
chmod et chown répondent à des questions différentes. chmod change ce que le propriétaire, le groupe et les autres ont le droit de faire : les bits de permission. chown change qui sont réellement le propriétaire et le groupe. Recourir à 777 est souvent un problème de propriété déguisé en problème de permissions.
Le cas classique : un serveur web fonctionnant sous www-data ne peut pas écrire dans son répertoire de téléversement. chmod 777 fait disparaître l’erreur en laissant le monde entier écrire, et laisse une faille derrière lui. La bonne solution attribue la propriété au processus qui en a besoin :
# Wrong: opens the directory to every account on the box
$ sudo chmod -R 777 /var/www/uploads
# Right: give it to the web user, keep a tight mode
$ sudo chown -R www-data:www-data /var/www/uploads
$ sudo find /var/www/uploads -type d -exec chmod 755 {} +
$ sudo find /var/www/uploads -type f -exec chmod 644 {} +
Ordre de diagnostic quand quelque chose est illisible de façon inattendue : lancez ls -l pour voir à qui il appartient d’abord, décodez le mode ensuite, puis décidez si la solution est chown, chmod, ou l’ajout d’un utilisateur à un groupe.
Les permissions récursives bien faites
Un chmod -R 755 . appliqué sans distinction marque tous les fichiers ordinaires comme exécutables, ce qui est au mieux du bruit et au pire un risque silencieux. Récursez plutôt par type :
$ find . -type d -exec chmod 755 {} + # directories → 755
$ find . -type f -exec chmod 644 {} + # files → 644
GNU chmod propose un raccourci en une ligne avec le X majuscule, qui ajoute l’exécution uniquement aux répertoires et aux fichiers qui portent déjà un bit d’exécution :
$ chmod -R u+rwX,go+rX .
Le calculateur chmod génère les commandes find réservées aux répertoires et celles réservées aux fichiers pour n’importe quel mode que vous choisissez, ce qui vous permet de copier la bonne répartition au lieu de recourir à un simple -R.
Bonnes pratiques pour les permissions de fichiers Linux
- Accordez le moindre privilège qui fonctionne. Partez du mode le plus strict et n’ouvrez que ce qui casse. Chaque bit d’écriture supplémentaire est une surface d’attaque.
- Adoptez par défaut des fichiers en 644 dans des répertoires en 755. Cet appariement convient à presque toutes les racines web et récupérations de dépôt. Les fichiers ordinaires ont rarement besoin de l’exécution ; les répertoires en ont toujours besoin.
- Ne laissez jamais 777 sur quoi que ce soit qu’un serveur peut atteindre. Si plusieurs comptes doivent écrire, utilisez un groupe partagé avec 775 ou 2775 (setgid maintient une propriété de groupe cohérente) plutôt que d’ouvrir le mode au monde entier.
- Gardez les clés privées SSH en 600, ou 400 une fois définitives. OpenSSH refuse catégoriquement les clés privées lisibles par le groupe ou par tous. Consultez le manuel OpenSSH pour l’exigence exacte relative aux fichiers de clés. Les clés publiques et
authorized_keysconviennent en 644. - Combinez les modes de fichiers avec d’autres contrôles. Les permissions sont la base ; associez-les à une authentification basique issue du générateur htpasswd quand un dossier nécessite une connexion, et considérez les modes de fichiers comme un élément parmi d’autres du tableau couvert dans notre guide des bonnes pratiques de sécurité web.
FAQ
Que signifie le d ou le l au début de drwxr-xr-x ?
Le premier caractère d’une ligne ls -l est le type de fichier, pas une permission. d désigne un répertoire, l un lien symbolique, - un fichier ordinaire, c ou b un périphérique, p un tube nommé, et s un socket. Seuls les neuf caractères qui le suivent encodent les véritables bits de lecture, d’écriture et d’exécution.
Quelle est la différence entre un s minuscule et un S majuscule dans les permissions ?
Un s minuscule et un S majuscule signifient tous deux que le bit setuid ou setgid est activé. Le s minuscule indique que l’exécution est elle aussi activée, le cas de fonctionnement normal. Le S majuscule indique que le bit spécial est activé mais que l’exécution est désactivée (comme dans 4644), ce qui est presque toujours une mauvaise configuration, puisqu’un bit spécial n’a aucun sens sans exécution.
Qu’est-ce que umask et comment détermine-t-il les permissions par défaut ?
umask est l’ensemble des bits de permission désactivés à la création d’un fichier. Les nouveaux fichiers partent de la base 666 et les répertoires de 777, puis effective = base & ~umask retire les bits masqués. La valeur par défaut 022 donne des fichiers en 644 et des répertoires en 755 ; lancez umask pour voir la vôtre, ou umask 077 pour une valeur par défaut plus privée.
Quand faut-il utiliser 400 ou 700 plutôt que 644 ou 755 ?
Utilisez 400 ou 700 quand un fichier ou un répertoire doit rester entièrement privé. 400 (r--------) est un fichier privé en lecture seule, idéal pour une clé privée SSH finalisée que vous ne modifiez jamais. 700 (rwx------) est un répertoire où seul le propriétaire peut entrer, comme ~/.ssh ou ~/.gnupg. Contrairement à 644 et 755, ils n’accordent rien à personne d’autre.
Pourquoi puis-je lister un répertoire sans pouvoir y entrer avec cd ?
Les permissions de répertoire séparent le listage de la traversée : le bit r vous permet de lister les noms, le bit x vous permet d’entrer. Un répertoire avec r mais sans x (un répertoire en 644) affiche ses noms sous ls mais bloque cd et tout accès aux fichiers à l’intérieur. Ajoutez l’exécution (passez-le en 755) pour le rendre accessible.
Les permissions de fichiers fonctionnent-elles de la même façon sur macOS et sur Linux ?
Les permissions de fichiers partagent le même modèle fondamental rwx et octal sur les deux, car tous deux suivent POSIX, mais les détails diffèrent. BSD et macOS effacent par défaut le setuid/setgid d’un répertoire lors d’un chmod numérique, tandis que Linux le préserve. La lecture d’un mode diffère aussi : stat -c '%a' file sur Linux, stat -f '%Lp' file sur macOS, et macOS ajoute des ACL et des indicateurs de fichier (file flags).
Puis-je changer les permissions de fichiers sans la ligne de commande ?
Vous pouvez calculer et décoder les permissions sans terminal. Le calculateur chmod gratuit vous laisse cocher une matrice de permissions, saisir une valeur octale ou coller une ligne ls -l, puis vous renvoie la commande chmod exacte. L’appliquer à un vrai fichier requiert malgré tout cette commande sur le serveur, ou une interface graphique ou un client FTP qui expose les champs de permission.