Comprendre les permissions Linux sans prise de tête
Les lettres rwx ressemblent à un code secret ? En réalité, elles répondent à trois questions simples : qui agit, sur quoi, et avec quel droit. À la fin de ce guide, vous saurez lire, modifier et dépanner les permissions sans dégainer un dangereux chmod 777.
1. Le modèle : un propriétaire, un groupe, les autres
Sous Linux, chaque fichier et chaque dossier possède un utilisateur propriétaire et un groupe propriétaire. Les permissions classiques sont rangées en trois catégories :
u(user) : l’utilisateur propriétaire ;g(group) : les membres du groupe propriétaire ;o(others) : tous les autres utilisateurs.
Pour connaître votre identité et vos groupes, utilisez :
$ id
uid=1000/alice gid=1000/alice groupes=1000/alice,27/sudo,1001/redaction
2. Lire rwx et la sortie de ls -l
Prenons une ligne typique :
$ ls -l rapport.txt
-rw-r----- 1 alice redaction 4820 juil. 29 10:15 rapport.txt
-type : fichier ordinairerw-propriétairer--groupe---autresLe premier caractère indique le type : - pour un fichier ordinaire, d pour un dossier, l pour un lien symbolique. Viennent ensuite neuf caractères, trois par catégorie. Dans notre exemple, Alice peut lire et modifier le fichier ; le groupe redaction peut seulement le lire ; les autres n’y ont aucun accès.
Les lettres signifient read (r, lecture), write (w, écriture) et execute (x, exécution ou traversée). Un tiret - signifie que le droit est absent.
3. Fichier ou dossier : les lettres changent de sens
| Droit | Sur un fichier | Sur un dossier |
|---|---|---|
r | Lire son contenu. | Lister les noms qu’il contient, par exemple avec ls. |
w | Modifier ou tronquer son contenu. | Créer, supprimer ou renommer des entrées ; en pratique, x est aussi nécessaire. |
x | Demander son exécution. Un script doit aussi être lisible par l’interpréteur concerné. | Traverser le dossier, atteindre un élément connu et consulter ses métadonnées. |
Conséquence étonnante : supprimer notes.txt dépend surtout des droits w et x sur son dossier parent, pas du droit w sur le fichier. À l’inverse, r sans x sur un dossier permet éventuellement d’en voir certains noms, mais pas d’accéder normalement aux fichiers.
4. Modifier les droits avec chmod
chmod accepte deux écritures complémentaires : la notation symbolique, très lisible pour une modification ciblée, et la notation octale, compacte pour fixer un état complet.
Notation symbolique : qui, opération, droit
La forme est [ugoa][+-=][rwxX]. + ajoute, - retire et = remplace les droits de la catégorie visée.
$ ls -l script.sh
-rw-r--r-- 1 alice redaction 220 juil. 29 10:30 script.sh
$ chmod u+x script.sh
$ ls -l script.sh
-rwxr--r-- 1 alice redaction 220 juil. 29 10:30 script.sh
$ chmod go-rwx script.sh
$ ls -l script.sh
-rwx------ 1 alice redaction 220 juil. 29 10:30 script.sh
Autres exemples utiles : chmod g+w fichier autorise l’écriture au groupe ; chmod a=r fichier fixe la lecture seule pour tous ; chmod u=rw,go=r fichier produit l’équivalent de 644. La lettre majuscule X ajoute l’exécution seulement aux dossiers et aux fichiers qui sont déjà exécutables pour quelqu’un : elle est plus sûre pour une arborescence mixte.
Notation octale : additionner 4, 2 et 1
Chaque triplet devient un chiffre : r=4, w=2, x=1. On additionne séparément pour le propriétaire, le groupe et les autres.
| Chiffre | Droits | Usage courant |
|---|---|---|
7 | rwx (4+2+1) | Contrôle complet |
6 | rw- (4+2) | Lecture et écriture |
5 | r-x (4+1) | Lire et exécuter/traverser |
4 | r-- | Lecture seule |
0 | --- | Aucun droit |
$ chmod 640 rapport.txt # rw-r-----
$ chmod 755 outil.sh # rwxr-xr-x
$ chmod 700 prive # rwx------
Contrairement à un + ou un - symbolique, une valeur comme 640 remplace normalement l’ensemble des bits de permission visés. Vérifiez toujours avec ls -l ou stat.
Pourquoi chmod 777 est presque toujours une mauvaise solution
777 donne lecture, écriture et exécution à tout le monde. Il masque le vrai problème — mauvais propriétaire, groupe absent, dossier parent non traversable, ACL ou politique de sécurité — tout en permettant à n’importe quel utilisateur local de modifier le contenu. Sur un serveur web ou une machine partagée, cela peut faciliter l’altération de fichiers et l’exécution de code injecté.
Choisissez le minimum nécessaire : souvent 644 pour un fichier public non exécutable, 755 pour un dossier public, 640/750 pour un partage de groupe, ou 600/700 pour du contenu privé. Ce sont des repères, pas des recettes universelles.
5. chown et chgrp : changer propriétaire ou groupe
Les droits ne suffisent pas si le fichier appartient à la mauvaise personne ou au mauvais groupe :
$ ls -l rapport.txt
-rw-r----- 1 root root 4820 juil. 29 10:15 rapport.txt
$ sudo chown alice:redaction rapport.txt
$ ls -l rapport.txt
-rw-r----- 1 alice redaction 4820 juil. 29 10:15 rapport.txt
chown utilisateur:groupe fichier change les deux en une commande. chown alice fichier ne change que l’utilisateur ; chown :redaction fichier ne change que le groupe. La forme dédiée est chgrp redaction fichier.
Sur Linux, changer le propriétaire requiert normalement des privilèges. Le propriétaire peut généralement changer le groupe vers l’un de ses groupes d’appartenance. Contrôlez-les avec id.
6. umask : les droits par défaut à la création
umask est un masque qui retire des droits lors de la création. Il ne modifie jamais les fichiers déjà présents. Les applications demandent couramment 666 pour un fichier et 777 pour un dossier ; un masque 022 enlève l’écriture au groupe et aux autres :
$ umask
0022
$ touch nouveau.txt
$ mkdir nouveau-dossier
$ stat -c '%a %n' nouveau.txt nouveau-dossier
644 nouveau.txt
755 nouveau-dossier
Calcul simplifié : 666 & ~022 = 644 pour le fichier, 777 & ~022 = 755 pour le dossier. Un umask 027 donnera typiquement 640 et 750 ; umask 077, 600 et 700.
7. Les droits spéciaux : setuid, setgid et sticky bit
Un quatrième chiffre octal peut précéder les trois chiffres classiques : 4 pour setuid, 2 pour setgid, 1 pour sticky. Ces bits répondent à des besoins précis et ne doivent pas servir de correctif improvisé.
Setuid (4xxx)
Sur un exécutable binaire, setuid fait exécuter le programme avec l’identifiant utilisateur effectif du propriétaire. C’est notamment ce qui permet à certains outils système soigneusement audités d’effectuer une action privilégiée. ls -l affiche s à la place du x du propriétaire, par exemple -rwsr-xr-x. Linux ignore le bit setuid sur les scripts interprétés.
Setgid (2xxx)
Sur un exécutable, setgid utilise le groupe effectif du fichier. Sur un dossier, son usage le plus pratique, les nouveaux éléments héritent du groupe du dossier ; les nouveaux sous-dossiers héritent aussi du bit setgid. C’est idéal pour un espace collaboratif :
$ sudo chown root:redaction partage
$ sudo chmod 2770 partage
$ ls -ld partage
drwxrws--- 2 root redaction 4096 juil. 29 11:00 partage
Le s dans le triplet du groupe signale setgid avec exécution. Combinez-le à une umask adaptée ou à une ACL par défaut si les nouveaux fichiers doivent aussi rester modifiables par le groupe.
Sticky bit (1xxx)
Sur un dossier partagé inscriptible, le sticky bit limite la suppression et le renommage : seuls le propriétaire du fichier, le propriétaire du dossier ou un processus privilégié peuvent agir. Le cas classique est /tmp :
$ ls -ld /tmp
drwxrwxrwt 18 root root 4096 juil. 29 11:05 /tmp
Le t final représente sticky avec le droit x pour les autres. Pour un dossier partagé : chmod 1777 depot-public. Cela protège la suppression entre utilisateurs, mais ne rend pas confidentiel le contenu.
Une majuscule S ou T indique que le bit spécial est présent mais que le bit x correspondant manque : c’est souvent le signe d’un réglage à vérifier.
8. Diagnostiquer une erreur « Permission denied »
Ne commencez pas par changer les droits. Localisez d’abord la barrière avec cette méthode :
- Confirmer votre identité :
id. Après l’ajout à un groupe, ouvrez une nouvelle session (ou utilisez prudemmentnewgrp) pour actualiser les groupes du processus. - Inspecter la cible :
ls -l fichierou, pour un dossier lui-même,ls -ld dossier. - Inspecter chaque dossier du chemin : il faut le droit
xsur chacun.namei -l /chemin/vers/fichierles déroule clairement. - Vérifier les ACL : un
+après les droits dansls -lsignale souvent une méthode d’accès supplémentaire. Utilisezgetfacl fichiersi disponible. - Vérifier le contexte de sécurité : sur SELinux, consultez
ls -Z fichieret les journaux d’audit ; des droits Unix corrects ne suffisent pas si la politique refuse l’action. AppArmor peut également intervenir. - Pour un programme : vérifiez
x, la ligne « shebang » du script, les droits de l’interpréteur, et une éventuelle option de montagenoexecavecfindmnt -T fichier.
$ id
$ namei -l /srv/redaction/2026/rapport.txt
f: /srv/redaction/2026/rapport.txt
drwxr-xr-x root root /
drwxr-xr-x root root srv
drwxr-x--- root redaction redaction
drwxr-x--- alice redaction 2026
-rw-r----- alice redaction rapport.txt
Ici, un utilisateur absent du groupe redaction est bloqué dès /srv/redaction, même si le fichier final lui semblait lisible par ailleurs.
9. Trucs et astuces
- Copier un réglage fiable :
chmod --reference=modele.conf cible.confetchown --reference=modele.conf cible.confavec GNU Coreutils. - Tester votre compréhension : demandez les formats symbolique et octal avec
stat -c '%A %a %n' fichier. - Préserver les fichiers non exécutables en récursif : préférez
chmod -R u=rwX,go=rX dossieràchmod -R 755 dossier. LeXévite de transformer tous les documents en exécutables. - Repérer les éléments accessibles à tous en écriture :
find chemin -xdev -perm -0002 -ls. Examinez les résultats avant toute correction. - Éviter la confusion sur les dossiers : utilisez
ls -ld dossierpour voir le dossier ;ls -l dossierliste plutôt son contenu. - Lire le manuel local :
man 1 chmod,man 1 chown,man 2 umasketman 7 path_resolution.
Conclusion : trois réflexes suffisent
Face aux permissions Linux, identifiez d’abord qui exécute la commande avec id, lisez ensuite où se trouve le blocage avec ls -l, ls -ld et namei -l, puis accordez uniquement le droit nécessaire. La notation symbolique est parfaite pour une petite correction ; l’octale est efficace pour fixer un état connu. Et si 777 semble être la réponse, c’est presque toujours qu’il reste une meilleure question à poser.
FAQ
Quelle différence entre chmod 755 et chmod 775 ?
755 donne rwxr-xr-x : seul le propriétaire écrit. 775 donne rwxrwxr-x : le groupe peut aussi écrire. Pour un dossier collaboratif, 2775 ajoute setgid afin de conserver le groupe sur les nouveaux éléments.
Pourquoi suis-je encore bloqué après un chmod correct ?
Un dossier parent peut manquer de x, vous pouvez utiliser un autre compte ou groupe que prévu, ou une ACL, SELinux, AppArmor ou une option de montage peut refuser l’action. Suivez la checklist de diagnostic avant d’élargir les droits.
Faut-il mettre x sur tous les scripts ?
Seulement si vous souhaitez les lancer directement, par exemple ./script.sh, avec un interpréteur valide indiqué par le shebang. On peut aussi exécuter bash script.sh sans bit x sur le script, à condition de pouvoir le lire.
umask 022 est-il toujours le bon choix ?
Non. Il convient à de nombreux contenus destinés à être lisibles par tous, mais 027 ou 077 protège mieux les données privées. Le bon masque dépend du service, du partage attendu et d’éventuelles ACL par défaut.
Partager cet article
Écrit par
larevuegeekÀ lire aussi

15 commandes Linux vraiment utiles au quotidien

Ubuntu 26.04 corrige un bug agaçant dans la corbeille

ARMSX2 arrive sur Linux : l’émulation PS2 sur Arm fait un pas de plus

J'ai testé ZorinOS 18.1 PRO, ça vaut quoi ? Enfin la fin de Windows au profit de Linux ?

NixOS 26.05 “Yarara” est disponible avec GNOME 50, Plasma 6.6 et Linux 6.18

Commentaires (0)