Aller au contenu
Allin

Comment fonctionnent les permissions Unix : lire 755 sans deviner

Publié le 24/04/2026 · 7 min de lecture · Outils pour développeurs

Daniel Okonkwo

Daniel OkonkwoDéveloppeur front-end et rédacteur Tech chez Allin

Performance web · Formats de fichiers

Vérifié à partir de 2 sources

Voir le profil
En bref

Un mode de permissions Unix, ce sont trois chiffres octaux : un pour le propriétaire du fichier, un pour son groupe, un pour tous les autres. À l'intérieur d'un chiffre, la lecture vaut 4, l'écriture 2, l'exécution 1, et on les additionne — 7 c'est rwx, 6 c'est rw-, 5 c'est r-x, 4 c'est r--. Donc 755 vaut rwxr-xr-x : le propriétaire peut lire, écrire et exécuter, tous les autres peuvent lire et exécuter. Sur un fichier ordinaire, le bit d'exécution autorise le noyau à le lancer. Sur un répertoire, il signifie tout autre chose : il donne le droit de traverser le répertoire, c'est-à-dire d'atteindre une entrée par son nom. La lecture sur un répertoire ne permet que de lister les noms ; sans le bit d'exécution tu ne peux ni ouvrir, ni consulter, ni entrer dans aucune d'elles. Un quatrième chiffre facultatif en tête porte setuid (4000), setgid (2000) et le sticky bit (1000) — d'où /tmp en 1777.

Lecture 4, écriture 2, exécution 1, et chacun des trois chiffres décrit une partie différente. Ce que la plupart des explications ratent : ce que fait le bit d'exécution sur un répertoire — il accorde la traversée, pas le droit de lancer quoi que ce soit.

Trois chiffres, trois parties, et une seule s'applique

Dans la sortie de `ls -l`, le premier caractère indique le type — un tiret pour un fichier ordinaire, d pour un répertoire, l pour un lien symbolique — et les neuf suivants forment trois groupes de trois : propriétaire, groupe, autres. Ce qui surprend, c'est que ces droits ne s'additionnent pas. Le noyau retient la première classe à laquelle tu appartiens et s'arrête là. Si tu es propriétaire d'un fichier en 477, tu obtiens r-- et rien d'autre, même si les bits du groupe et des autres sont grands ouverts : la classe propriétaire a correspondu en premier, le reste n'est jamais consulté.

Il y a deux façons d'écrire une modification, et elles ne sont pas équivalentes. L'octal est absolu : `chmod 644 notes.txt` fixe le mode entier et efface ce qui existait avant. Le symbolique est relatif : `chmod u+x script.sh` ajoute un bit et laisse les huit autres intacts. Dans un script de déploiement, tu veux presque toujours la forme octale, parce qu'elle produit le même état final quel que soit l'état du fichier à son arrivée.

Sur un répertoire, le bit d'exécution est un tout autre droit

Rien n'est jamais exécuté parce qu'on a donné le bit x à un répertoire. Sur un répertoire, ce bit est un droit de recherche : il permet à un processus de résoudre un nom à l'intérieur et d'atteindre ce qui se cache derrière. La séparation se voit facilement. Passe un répertoire en 400 et `ls` affichera volontiers les noms qu'il contient, mais chaque consultation échoue et `cat dir/fichier` est refusé — tu vois les étiquettes et ne touche à rien. Passe-le en 100 et c'est l'inverse : tu ne peux rien lister, mais si tu connais déjà le chemin exact, tu ouvres le fichier. Cette asymétrie explique qu'un répertoire personnel en 711 fonctionne : les autres atteignent ~/public_html sans pouvoir énumérer le reste.

La même logique explique un résultat qui ressemble à un bug. Supprimer un fichier n'est pas une modification du fichier : c'est une modification du répertoire qui le référence. La permission qui décide de la suppression est donc l'écriture plus l'exécution sur le répertoire contenant, et le mode du fichier lui-même n'y change rien. Un fichier en 444 placé dans un répertoire en 777 peut être supprimé par n'importe qui sur la machine. C'est précisément le trou que le sticky bit a été inventé pour boucher, d'où /tmp en 1777 plutôt qu'en 0777.

Le quatrième chiffre, et pourquoi umask n'est pas une permission

Trois bits spéciaux logent dans un chiffre de tête facultatif. Setuid vaut 4000 : sur un binaire exécutable, il fait tourner le programme avec l'identité du propriétaire — c'est ainsi que passwd modifie un fichier que tu ne peux pas toucher. Sous Linux il est ignoré en silence sur les scripts interprétés, et il n'a aucun sens sur un répertoire. Setgid vaut 2000 : sur un binaire il fait de même pour le groupe, et sur un répertoire il rend un service bien plus utile — les nouvelles entrées héritent du groupe du répertoire au lieu de celui du créateur, et les nouveaux sous-répertoires héritent aussi du bit setgid, façon standard de garder cohérente une arborescence de projet partagée. Le sticky vaut 1000 : sur un répertoire, il réserve la suppression et le renommage d'une entrée au propriétaire de l'entrée, au propriétaire du répertoire ou à root.

L'umask est la pièce qu'on inverse le plus souvent. Ce n'est pas la permission que reçoivent les nouveaux fichiers : c'est un masque de bits à retirer de ce que le programme créateur a demandé. Les programmes demandent 666 pour un fichier et 777 pour un répertoire, et chaque bit posé dans l'umask est désactivé. Avec l'umask courant 022, tu obtiens donc 644 pour les fichiers et 755 pour les répertoires. Et il efface plutôt qu'il ne soustrait : umask 023 donne toujours 644 sur un nouveau fichier, pas 643, parce que le fichier n'a jamais demandé le bit d'exécution et qu'il n'y a rien à retrancher. Autre parent proche : `chmod +x` sans lettre de classe n'équivaut pas à `chmod a+x`, car la forme nue respecte elle aussi ton umask — sous umask 077 elle n'accorde l'exécution qu'au propriétaire.

Ce que signifie chaque chiffre octal — et comment il change sur un répertoire
ChiffreSymboliqueSur un fichierSur un répertoire
0---Aucun accèsAucun accès
1--xPeut être lancé par le noyauTraversée seule : atteindre une entrée dont on connaît déjà le nom exact, sans jamais lister le contenu
2-w-Peut être modifié ou tronquéInutile seul — créer ou supprimer une entrée exige aussi le bit d'exécution
3-wxModifier et lancer, mais pas lireCréer, supprimer et renommer des entrées sans pouvoir les lister — une boîte de dépôt
4r--Peut être luLister les noms seulement — toute tentative de consulter ou d'ouvrir une entrée est refusée
5r-xLire et lancerLister et traverser — le réglage normal d'un répertoire que d'autres doivent parcourir
6rw-Lire et modifier — le défaut d'un nouveau fichierLister les noms, n'atteindre rien, et ne rien créer non plus — l'écriture sans exécution ne sert à rien
7rwxLire, modifier et lancerContrôle complet : lister, traverser, créer, renommer et supprimer des entrées
Calculateur de permissions Unix (chmod)Convertis entre permissions Unix octales, symboliques et rwx, avec bits spéciaux et commande chmod.Essayer l'outil

Questions fréquentes

Pourquoi chmod 777 est-il la mauvaise solution ?
Il donne un accès en écriture à tous les comptes de la machine, y compris à l'identité sous laquelle tourne ton serveur web ou un processus compromis, et un code accessible en écriture à tous est un code que n'importe qui peut remplacer. Il passe aussi le plus souvent à côté de la vraie cause, qui tient plus souvent à une mauvaise appartenance ou à un bit d'exécution manquant sur un répertoire parent qu'à une permission trop étroite. Certains logiciels refusent carrément de coopérer : OpenSSH ignore une clé privée ou un fichier authorized_keys accessible en écriture au groupe ou à tous.
chmod 755 rend-il un script exécutable ?
Il accorde la permission d'essayer, ce qui n'est pas la même chose que de le faire fonctionner. Un fichier texte a aussi besoin d'une ligne shebang désignant un interpréteur existant, sinon le noyau n'a rien à qui le confier. Deux autres éléments l'emportent totalement sur le mode : un système de fichiers monté avec l'option noexec refuse de lancer quoi que ce soit, quels que soient les bits, et chaque répertoire du chemin menant au fichier a besoin de son propre bit d'exécution pour que le fichier soit seulement atteignable.
Pourquoi quelqu'un peut-il supprimer un fichier que j'ai mis en lecture seule ?
Parce que la suppression modifie le répertoire, pas le fichier. Le noyau vérifie l'écriture et l'exécution sur le répertoire qui porte le nom, et ne regarde jamais le mode du fichier. Pour l'empêcher, resserre le répertoire ou pose-y le sticky bit, qui limite suppression et renommage au propriétaire de l'entrée, au propriétaire du répertoire et à root — la raison pour laquelle un /tmp partagé est en 1777.

Articles qui pourraient t'intéresser

Tous les guides
TutorielComment écrire une expression cron : cinq champs et la règle du OU dont personne ne parleMinute, heure, jour du mois, mois, jour de la semaine. Les pièges : un pas est une progression dans une plage et non un intervalle, et les deux champs de jour sont combinés par OU — si bien que 0 0 1 * 1 se déclenche le 1er et tous les lundis.ExplicationQu'est-ce qu'une expression cron ?Une expression cron planifie l'exécution automatique d'une tâche à des moments définis. Voici à quoi elle sert, ses cinq champs, comment la lire, et les pièges courants.TutorielCombien de photos tiennent sur une carte mémoire ? Photos, musiques et vidéosEstime combien de photos, de musiques ou d'heures de vidéo tiennent sur une carte en divisant sa capacité par la taille moyenne des fichiers.GuideLes codes de statut HTTP expliqués : ceux qu'on confond vraiment301 contre 308, 302 contre 307, 401 contre 403, 404 contre 410 — plus ce que promet réellement Retry-After sur un 429 ou un 503. Les paires où choisir le mauvais code change le comportement, pas seulement la formulation.ExplicationComment fonctionnent les masques de sous-réseau : CIDR, bits réseau et hôtes utilisablesComprends comment un masque de sous-réseau divise une adresse IP en parties réseau et hôte, ce que signifie /24 et comment compter les hôtes utilisables.ExplicationQu'est-ce qu'un timestamp Unix ?Un timestamp Unix compte les secondes depuis le 1er janvier 1970 UTC. Pourquoi les ordinateurs l'utilisent, comment le convertir, et le bug de 2038.

Outils similaires

Sources

Tu as repéré une erreur dans cet article ?