Calculateur chmod
Convertit les permissions de fichiers Unix entre octal (755), symbolique (rwxr-xr-x) et une grille de cases, avec setuid, setgid et le bit sticky.
| Classe | Lecture | Écriture | Exécution |
|---|---|---|---|
| Propriétaire | |||
| Groupe | |||
| Autres |
chmod 644 filechmod u=rw,g=r,o=r file-rw-r--r--Ce que fait cet outil
Chaque fichier d’un système Unix porte un ensemble de permissions qui décident qui peut le lire, le modifier ou l’exécuter. La commande chmod les définit, et elle accepte ces permissions sous deux écritures assez différentes — un nombre octal à trois chiffres et une chaîne de lettres — qui décrivent exactement la même chose. Cet outil garde les deux écritures synchronisées, ainsi qu’une grille de cases, afin que vous puissiez partir de celle que vous avez et copier celle dont vous avez besoin.
Tout s’exécute dans votre navigateur et relève de l’arithmétique pure : il n’y a pas de serveur et rien de ce que vous saisissez n’est envoyé ailleurs. C’est une calculatrice et une référence, pas un moyen de modifier les permissions sur une vraie machine — pour cela, vous copiez la commande chmod produite et vous l’exécutez vous-même.
Trois groupes, trois permissions
Les permissions s’organisent en trois groupes de trois. Les groupes sont le propriétaire du fichier, le groupe auquel il appartient et tous les autres — « autres ». Dans chaque groupe se trouvent trois permissions : lecture, écriture et exécution.
- Lecture (r) — consulter le contenu du fichier, ou lister les entrées d’un répertoire.
- Écriture (w) — modifier le fichier, ou ajouter et supprimer des entrées dans un répertoire.
- Exécution (x) — lancer le fichier comme programme, ou entrer dans un répertoire et atteindre les fichiers qu’il contient.
L’exécution ne signifie pas la même chose pour un répertoire que pour un fichier, et cela surprend : un répertoire que vous pouvez lire mais pas exécuter vous laisse voir les noms de ce qu’il contient, sans pouvoir en ouvrir aucun.
Comment fonctionne le nombre octal
Les trois permissions de chaque groupe tiennent dans un chiffre octal en additionnant des valeurs fixes : lecture vaut 4, écriture 2 et exécution 1. Lecture-écriture-exécution donne 4+2+1 = 7 ; lecture-exécution donne 4+1 = 5 ; lecture-écriture donne 4+2 = 6. Trois groupes donnent trois chiffres.
755 7 = 4+2+1 # propriétaire : lecture + écriture + exécution 5 = 4+0+1 # groupe : lecture + exécution 5 = 4+0+1 # autres : lecture + exécution
Ainsi 755 signifie « le propriétaire peut tout faire, les autres peuvent lire et exécuter mais pas modifier », le mode habituel d’un programme ou d’un répertoire. 644 — lecture-écriture pour le propriétaire, lecture seule pour les autres — est le mode habituel d’un fichier ordinaire. Une fois le motif familier, les modes courants se lisent d’un coup d’œil.
La chaîne symbolique
L’autre écriture est celle qu’affiche ls -l : neuf caractères, trois par groupe, chacun étant soit sa lettre, soit un tiret. 755 s’écrit rwxr-xr-x ; 644 s’écrit rw-r--r--. Elle contient exactement la même information que le nombre octal, simplement disposée de façon à voir chaque permission au lieu d’additionner des chiffres de tête.
Une ligne de ls -l comporte un dixième caractère au début : un d pour un répertoire, un tiret pour un fichier ordinaire, un l pour un lien symbolique. Ce caractère initial est le type du fichier, pas une permission, et chmod ne peut pas le changer. Vous pouvez coller ici tout le champ de permissions de ls -l : le caractère de type est simplement ignoré.
Les bits spéciaux : setuid, setgid et sticky
Au-dessus des neuf bits ordinaires se trouvent trois bits spéciaux, écrits sous la forme d’un quatrième chiffre octal facultatif en tête — setuid (4), setgid (2) et le bit sticky (1). Ils n’ont pas de colonne propre ; chacun se superpose à une case d’exécution de la chaîne symbolique, d’où viennent les majuscules qui déroutent tant.
- setuid sur un exécutable le fait tourner en tant que propriétaire du fichier plutôt qu’en tant qu’utilisateur qui l’a lancé. C’est ainsi que passwd peut mettre à jour un fichier système où vous ne pouvez pas écrire directement — et pourquoi un programme setuid comportant un bogue est une faille sérieuse.
- setgid sur un exécutable le lance avec le groupe du fichier. Sur un répertoire, il fait quelque chose de plus utile et plus sûr : les nouveaux fichiers créés à l’intérieur héritent de ce groupe au lieu de celui du créateur.
- Le bit sticky sur un répertoire signifie que seul le propriétaire d’un fichier peut le supprimer ou le renommer, même quand tout le monde peut écrire dans le répertoire. C’est ce qui garde /tmp partagé mais sûr. Sur un fichier ordinaire, il ne fait rien.
Dans la chaîne symbolique, un bit spécial actif transforme sa case d’exécution en lettre : s dans la case du propriétaire pour setuid, s dans celle du groupe pour setgid, t dans celle des autres pour sticky. La casse indique si l’exécution est également active — minuscule pour oui, majuscule pour non.
rwsr-xr-x 4755 # setuid, et le propriétaire exécute rwSr-xr-x 4655 # setuid, mais le propriétaire n’exécute PAS rwxrwxrwt 1777 # sticky, et les autres exécutent rwxrwxrwT 1776 # sticky, mais les autres n’exécutent PAS
Un S ou un T majuscule est presque toujours une erreur : cela signifie qu’un bit spécial a été posé sur un fichier non exécutable, si bien que le bit n’a rien sur quoi agir.
Octal ou symbolique en ligne de commande
chmod accepte les deux formes, et cet outil écrit les deux. La forme octale fixe tous les bits d’un coup : chmod 755 file. La forme symbolique avec = fait de même de façon absolue — chmod u=rwx,g=rx,o=rx file — en énumérant chaque groupe afin que le résultat ne dépende pas de l’état initial du fichier.
Il existe une troisième forme, relative, dont la calculatrice n’a pas besoin mais que vous rencontrerez : chmod +x file ajoute l’exécution pour tous, chmod g-w file retire l’écriture au groupe, chmod o= file efface tout pour les autres. Cette forme modifie les bits par rapport au mode courant au lieu de définir l’ensemble, ce qui est pratique en ligne de commande mais n’a pas de « résultat » unique à afficher.
Des modes à ne pas poser
Un outil de permissions devrait aussi dire quand un mode est une mauvaise idée. Deux reviennent sans cesse :
- 777 donne à tout utilisateur la lecture, l’écriture et l’exécution. C’est le correctif réflexe quand quelque chose « ne marche pas », et il échange presque toujours un petit problème contre une vraie faille de sécurité. Le bon mode est presque toujours plus étroit — en général 755 ou 644.
- Tout fichier modifiable par tous (le dernier chiffre incluant 2) permet à n’importe quel compte de la machine d’en réécrire le contenu. Pour ce qui est exécuté, chargé ou considéré comme fiable, c’est une porte d’entrée. Accordez plutôt l’écriture à un groupe, ou gardez-la pour le propriétaire.
L’outil les signale lorsqu’ils apparaissent. Il ne peut pas savoir si votre cible est un fichier ou un répertoire ; il les présente donc comme des points méritant un second regard, non comme des erreurs — le bit sticky est correct sur un répertoire et inutile sur un fichier, et vous seul savez ce que vous avez.
Ce que signifie chmod 755
C’est le mode auquel aboutissent presque tous les scripts, les programmes et les répertoires, et il se lit un groupe à la fois. Chaque chiffre est la somme des trois permissions de ce groupe — lecture 4, écriture 2, exécution 1 — de sorte que 7 vaut les trois et 5 la lecture plus l’exécution, l’écriture mise de côté.
- Propriétaire — 7 = 4+2+1. Lecture, écriture et exécution : vous pouvez modifier le fichier et le lancer.
- Groupe — 5 = 4+0+1. Lecture et exécution, pas d’écriture : les membres du groupe du fichier peuvent le lire et le lancer, et ne peuvent pas le modifier.
- Autres — 5 = 4+0+1. La même chose encore : tout autre compte de la machine peut le lire et le lancer, et aucun ne peut le modifier.
Écrit en entier cela donne rwxr-xr-x, et la commande est chmod 755 file — ou chmod u=rwx,g=rx,o=rx file si les lettres vous conviennent mieux. Sur un répertoire les mêmes bits se lisent autrement, car l’exécution y signifie que vous pouvez entrer et atteindre ce qui s’y trouve : 755 est un répertoire que tout le monde peut lister et traverser, tandis que seul le propriétaire peut ajouter ou retirer des entrées. Sur 755 la calculatrice ne dit rien du tout, et c’est délibéré : c’est le mode le plus étroit qui laisse encore d’autres comptes exécuter ce que vous avez écrit. Si le groupe doit aussi modifier le fichier, le mode qui ajoute l’écriture de groupe est 775, et non 777.
Ce que signifie chmod 644, et pourquoi vos fichiers l’ont déjà
644 est 755 dont on a retiré tous les bits d’exécution : 6 = 4+2 pour le propriétaire, puis 4 = 4+0+0 pour le groupe et encore 4 pour autres, soit rw-r--r--. Personne ne peut le lancer, et c’est exactement ce qu’il faut pour tout ce qui n’est que lu — un document, une page HTML, un fichier de configuration, un fichier source qu’un autre programme compile. Sur un répertoire, en revanche, il n’est pas restrictif mais cassé : sans exécution rien ne peut entrer, donc les noms à l’intérieur se listent et aucun ne s’ouvre.
C’est aussi le mode qu’un fichier neuf porte d’ordinaire avant que quiconque y touche, et la raison s’appelle umask. Un programme qui crée un fichier demande normalement 666 et un programme qui crée un répertoire demande 777 ; l’umask efface ensuite les bits qu’elle nomme, avant même que le fichier existe. Avec l’umask courante 022 — écriture retirée au groupe et à autres — 666 devient 644 et 777 devient 755, ce qui explique que ces deux-là soient partout et qu’ils soient les deux premiers modes que propose cet outil. Tapez umask dans un shell pour voir votre valeur.
- umask 022, la valeur par défaut habituelle — un fichier neuf sort en 644 et un répertoire neuf en 755.
- umask 002, posée là où chaque utilisateur a son propre groupe — 664 et 775, de sorte que les membres du groupe peuvent modifier aussi.
- umask 077, le réglage privé — 600 et 700, que personne d’autre que le propriétaire ne peut même lire.
Les six sont ici des modes préparés, et ce n’est pas un hasard : ce sont les trois umask que les gens posent réellement, appliquées une fois à un fichier et une fois à un répertoire. Les lire comme trois paires plutôt que six valeurs est le plus court chemin pour cesser de chercher les modes.
Ce que signifie chmod 711 : entrer, mais sans regarder
711 est le mode courant qui accorde l’exécution sans la lecture : 7 = 4+2+1 pour le propriétaire, puis 1 = 0+0+1 deux fois, soit rwx--x--x. Il ne prend son sens qu’une fois les deux permissions de répertoire à nouveau séparées — la lecture liste les noms, l’exécution laisse passer — de sorte qu’un répertoire en 711 peut être traversé par quiconque connaît déjà le nom de ce qu’il cherche, et listé par personne.
- Sur un répertoire c’est vraiment utile. Un répertoire personnel en 711 laisse un serveur web, ou un autre compte d’une machine partagée, ouvrir /home/you/public/report.pdf alors que ls /home/you est refusé. Rien n’est caché au propriétaire ; les noms ne peuvent simplement pas être énumérés de l’extérieur.
- Sur un fichier c’est presque inutile. Lancer un script shell veut dire qu’un interpréteur ouvre le fichier et le lit, donc l’exécution sans la lecture échoue ; seul un binaire compilé, que le noyau charge lui-même, fonctionne encore. Si vous vouliez un script que d’autres puissent lancer, vous vouliez 755.
Sur 711 non plus la calculatrice ne dit rien, car il est plus étroit que 755 et non plus large : il n’accorde rien que 755 n’accorde. Ses voisins apparaissent pour la même raison — 751 donne au groupe le listage refusé à autres, et 700 retire jusqu’au passage, ce dont a besoin un répertoire réservé à un seul compte.
777 et 1777 : un bit d’écart et pas le même conseil
Les deux modes qu’un répertoire partagé attire ne diffèrent que d’un bit, et cet outil y répond différemment à dessein. 777 est rwxrwxrwx et revient signalé comme un danger ; 1777 est rwxrwxrwt, revient comme une simple note et fait partie des modes préparés ci-dessus — c’est le mode que /tmp possède réellement.
- 777 — chaque chiffre vaut 4+2+1 : lecture, écriture et exécution pour le propriétaire, le groupe et tous les autres. Il ne reste rien pour protéger quoi que ce soit : n’importe quel compte peut réécrire le fichier, et n’importe quel compte peut supprimer ou remplacer une entrée dans un répertoire qui le porte. C’est le correctif réflexe devant un problème de permissions, et il échange presque toujours un petit problème contre un vrai.
- 1777 — les mêmes neuf bits plus le bit sticky, qui ne permet de supprimer et de renommer une entrée qu’à son propre propriétaire. Cette unique restriction est ce qui rend sûr de laisser un répertoire modifiable par tous, et c’est pourquoi /tmp fonctionne : chacun peut y créer un fichier et personne ne peut retirer celui d’un autre.
La distinction ne tient que là où autres possède aussi l’exécution, et l’outil y est strict. 1666 est rw-rw-rwT — le bit sticky posé là où aucun groupe n’a l’exécution — et rien de cette forme ne peut être un répertoire utilisable ; le bit sticky ne garde donc rien et le mode est signalé comme modifiable par tous avec toute la gravité, exactement comme 666. Le T majuscule dit la même chose en un caractère.
Ainsi un répertoire qui doit être partagé veut 1777, ou mieux encore 775 avec le bon groupe ; et un fichier qui ne s’ouvre pas relève presque toujours d’un problème de propriété et non d’un cas pour 777.
Questions fréquentes
- Quelle est la différence entre 644 et 755 ?
- 644 donne lecture et écriture au propriétaire et lecture seule aux autres, le mode habituel d’un fichier ordinaire. 755 ajoute l’exécution pour les trois groupes, ce dont un programme a besoin pour tourner et un répertoire pour être ouvert. Utilisez 644 pour les documents et les fichiers source, 755 pour les scripts et les répertoires.
- Pourquoi mon mode affiche-t-il un S ou un T majuscule ?
- Parce qu’un bit spécial a été posé sur un groupe qui n’a pas la permission d’exécution. Un s ou un t minuscule signifie que le bit spécial et l’exécution sont tous deux actifs ; la forme majuscule signifie que le bit spécial est actif mais pas l’exécution, ce qui indique en général que le mode n’est pas celui voulu — par exemple 4644 (rwSr--r--) est setuid sur un fichier que personne ne peut exécuter.
- Que fait vraiment chmod 777, et pourquoi le déconseille-t-on ?
- Il accorde lecture, écriture et exécution au propriétaire, au groupe et à tous les autres — un accès total pour chaque compte du système. On le déconseille parce qu’il supprime toutes les protections d’un coup : un fichier que tout le monde peut écrire est un fichier que n’importe qui peut altérer, et un répertoire que tout le monde peut écrire est un répertoire où n’importe qui peut déposer des fichiers. Presque tous les cas qui appellent 777 se résolvent avec 755 ou 644 et la bonne appartenance.
- Le chiffre de tête est-il obligatoire ?
- Non. Quand aucun bit spécial n’est actif, le mode tient en trois chiffres — 755, et non 0755 — et c’est ce qu’affiche cet outil. Un zéro initial est accepté et signifie la même chose ; un 4, un 2 ou un 1 initial active respectivement setuid, setgid ou le bit sticky.
- Puis-je coller une ligne directement depuis ls -l ?
- Oui. Collez le champ de permissions de dix caractères, comme -rwxr-xr-x ou drwxr-xr-x : l’outil retire le caractère de type initial et lit le reste. Le type (fichier, répertoire, lien) n’est pas une permission et chmod ne peut pas le changer, il est donc ignoré.
- Ce que je saisis est-il envoyé à un serveur ?
- Non. Tout l’outil est une arithmétique qui s’exécute dans votre navigateur. Rien n’est téléversé, journalisé ni stocké, et c’est aussi pourquoi il fonctionne sans aucune connexion réseau.
- Que fait chmod 711 ?
- Il donne tout au propriétaire et donne au groupe comme à tous les autres l’exécution seule — rwx--x--x. Sur un répertoire cela veut dire qu’ils peuvent le traverser jusqu’à un chemin qu’ils connaissent déjà mais ne peuvent pas lister ce qu’il contient, ce qu’un répertoire personnel sur une machine partagée veut le plus souvent. Sur un fichier il ne sert à rien : un script shell doit être lu par son interpréteur pour s’exécuter, donc l’exécution sans la lecture échoue simplement.
- Quelle est la différence entre chmod 777 et chmod 1777 ?
- Un bit — le bit sticky, écrit comme le 1 de tête, qui change le dernier caractère de x en t. Les deux donnent à chaque compte lecture, écriture et exécution ; 1777 permet en plus de supprimer ou de renommer une entrée à son seul propriétaire. C’est pourquoi cet outil signale 777 comme presque jamais correct alors qu’il appelle 1777 le mode standard d’un répertoire partagé comme /tmp.
- Pourquoi les nouveaux fichiers sortent-ils en 644 et les nouveaux répertoires en 755 ?
- À cause de l’umask. Un programme qui crée un fichier demande 666 et un programme qui crée un répertoire demande 777, et l’umask en efface des bits avant même que le fichier existe. La valeur habituelle, 022, retire l’écriture au groupe et à autres, ce qui laisse 644 et 755. Lancez umask dans un shell pour voir la vôtre : 002 donne 664 et 775, et 077 donne 600 et 700.
- Que signifie rwxr-xr-x ?
- C’est 755 écrit en entier. Lisez-le trois caractères à la fois : rwx est le propriétaire, avec lecture, écriture et exécution ; r-x est le groupe, avec lecture et exécution mais sans écriture ; r-x encore, ce sont tous les autres. Un tiret signifie que cette permission est éteinte. Collez la chaîne dans le champ « Symbolique » ici et la case « Octal » affichera 755.
Outils connexes
- Calculateur CIDR / de sous-réseaux
Décomposez un réseau, testez l’appartenance, divisez-le.
- Explicateur d’expressions cron
Lire une expression cron, et voir quand elle s’exécute vraiment.
- Quelle est mon adresse IP
Vos adresses IPv4 et IPv6 publiques, et celle que le navigateur a choisie.
- Convertisseur d’horodatage Unix
Convertit le temps epoch en date, et inversement.