Back

Comprendre les permissions de fichiers sous Linux

Comprendre les permissions de fichiers sous Linux

Chaque système Linux utilise des permissions de fichiers pour contrôler qui peut lire, écrire ou exécuter un fichier. Une mauvaise configuration peut soit bloquer l’accès aux utilisateurs légitimes, soit exposer des fichiers sensibles. Ce guide explique le fonctionnement de la propriété et des permissions de fichiers sous Linux, comment lire la chaîne de permissions, et comment modifier les permissions avec chmod et chown.

Points clés à retenir

  • Chaque fichier possède un propriétaire, un groupe et un ensemble de permissions pour trois classes : propriétaire, groupe et autres.
  • Les triplets de permissions utilisent r (lecture), w (écriture) et x (exécution) — et se comportent différemment sur les fichiers et les répertoires.
  • Utilisez chmod pour modifier les permissions (mode symbolique ou octal) et chown pour changer la propriété.
  • La valeur umask contrôle les permissions par défaut des fichiers et répertoires nouvellement créés.
  • Les bits spéciaux (setuid, setgid, sticky) et les ACL POSIX gèrent les cas que le modèle standard ne peut pas traiter.

Structure de la propriété et des permissions de fichiers sous Linux

Chaque fichier et répertoire sous Linux se voit attribuer :

  • Un propriétaire (un compte utilisateur)
  • Un groupe (un ensemble d’utilisateurs)
  • Un ensemble de permissions pour trois classes : propriétaire, groupe et autres

Lorsqu’un processus tente d’accéder à un fichier, le noyau vérifie ces classes dans l’ordre — d’abord le propriétaire, puis le groupe, puis les autres — et s’arrête à la première correspondance. Les classes sont mutuellement exclusives : si vous êtes le propriétaire, seuls les bits du propriétaire s’appliquent, même si les bits du groupe sont plus permissifs.

Comment lire les permissions rwx sous Linux

Exécutez ls -l pour afficher les permissions :

$ ls -l
-rw-r--r--  1 alice  developers  4017  Jun 1 10:00  config.conf
drwxr-x---  2 alice  developers    68  Jun 1 10:00  project/

Le premier caractère indique le type de fichier (- pour un fichier ordinaire, d pour un répertoire, l pour un lien symbolique). Les neuf caractères suivants forment trois triplets de permissions :

rw-   r--   r--
 ↑     ↑     ↑
propriétaire groupe autres

Chaque triplet utilise trois bits : r (read/lecture), w (write/écriture), x (execute/exécution). Un - signifie que cette permission n’est pas accordée.

Remarque : Si vous voyez un + à la fin de la chaîne de permissions (par exemple, -rw-r--r--+), le fichier possède une ACL POSIX appliquée. La commande standard ls -l n’affiche pas ces règles supplémentaires — utilisez getfacl pour les inspecter.

Signification réelle de chaque bit de permission

Sur les fichiers :

BitEffet
rLire le contenu du fichier (cat, cp)
wModifier ou écraser le fichier
xExécuter le fichier comme programme ou script

Sur les répertoires :

BitEffet
rLister les entrées du répertoire (noms de fichiers)
wCréer, renommer ou supprimer des fichiers à l’intérieur
xTraverser le répertoire (cd, ouvrir des fichiers par chemin)

Le bit d’exécution sur les répertoires est souvent mal compris. Sans lui, vous ne pouvez pas faire cd dans le répertoire ni accéder à un fichier à l’intérieur par son chemin — même si vous avez la permission de lecture.

Comment modifier les permissions de fichiers Linux avec chmod

chmod accepte les modes symbolique et numérique (octal).

Mode symbolique :

chmod u+x script.sh          # ajouter l'exécution pour le propriétaire
chmod go-w config.conf       # retirer l'écriture du groupe et des autres
chmod u=rwx,g=rx,o= app/     # définir les permissions exactes pour toutes les classes
chmod -R u=rwX,g=rX,o=rX /var/www/html  # récursif : X majuscule définit l'exécution sur les répertoires et les fichiers qui ont déjà l'exécution

Mode numérique (octal) — chaque chiffre additionne r=4, w=2, x=1 :

chmod 644 config.conf   # propriétaire rw, groupe r, autres r
chmod 750 script.sh     # propriétaire rwx, groupe rx, autres aucun
chmod 700 ~/.ssh        # propriétaire uniquement — correct pour les répertoires SSH

Comment modifier la propriété d’un fichier avec chown

chown modifie le propriétaire, le groupe, ou les deux :

chown alice config.conf              # changer uniquement le propriétaire
chown alice:developers config.conf   # changer le propriétaire et le groupe
chown -R www-data:www-data /var/www  # changement de propriété récursif

Comment les permissions par défaut sont définies avec umask

Les nouveaux fichiers ne commencent pas avec des permissions ouvertes. La valeur umask masque certains bits de la valeur par défaut du système (généralement 666 pour les fichiers, 777 pour les répertoires). Un umask de 022 produit des fichiers 644 et des répertoires 755 — la configuration par défaut la plus courante sur les serveurs Linux.

Si le répertoire parent a une ACL par défaut configurée, ces règles ACL sont héritées au lieu de se fier uniquement au umask.

umask        # afficher le umask actuel
umask 027    # définir une valeur par défaut plus stricte : fichiers 640, répertoires 750

Bits de permission spéciaux : setuid, setgid et sticky bit

Ces bits étendent le modèle standard pour des cas d’usage spécifiques :

  • setuid (4xxx) : Un exécutable s’exécute avec les privilèges du propriétaire du fichier. Utilisé par les binaires système comme /usr/bin/passwd. Dangereux sur les scripts personnalisés — à éviter.
  • setgid (2xxx) sur un répertoire : Les nouveaux fichiers héritent du groupe du répertoire au lieu du groupe principal du créateur. Utile pour les répertoires de projet partagés.
  • Sticky bit (1xxx) sur un répertoire : Seuls le propriétaire du fichier, le propriétaire du répertoire ou root peuvent supprimer des fichiers à l’intérieur. Standard sur /tmp.
chmod 2775 /shared/project   # setgid sur un répertoire partagé
chmod 1777 /tmp              # sticky bit — déjà défini par défaut

Au-delà des permissions classiques : ACL et modules de sécurité

Les permissions standard rwx couvrent la plupart des cas d’usage, mais elles ont des limites. Si vous devez accorder l’accès à un utilisateur spécifique sans modifier l’appartenance au groupe, utilisez les ACL POSIX via setfacl et getfacl. Sur les systèmes exécutant SELinux ou AppArmor, les politiques des modules de sécurité s’appliquent en plus des permissions standard — un fichier peut être lisible par tous au niveau UNIX mais toujours bloqué par une politique SELinux.

Référence rapide : modèles de permissions courants

ModeSymboliqueUsage typique
644rw-r--r--Fichiers de configuration serveur web, contenu public
755rwxr-xr-xRépertoires, scripts exécutables
700rwx------Répertoires personnels, répertoire des clés SSH
600rw-------Fichiers de clés privées (~/.ssh/id_rsa)
2775rwxrwsr-xRépertoires de groupe partagés
1777rwxrwxrwtRépertoires accessibles en écriture à tous comme /tmp

Conclusion

Les permissions de fichiers sous Linux suivent un modèle cohérent et prévisible. Une fois que vous comprenez la structure propriétaire/groupe/autres, les bits rwx, et comment chmod et chown les appliquent, vous disposez des fondations pour sécuriser correctement n’importe quel fichier ou répertoire. Pour les cas où le modèle à trois classes n’est pas assez granulaire, utilisez les ACL — et gardez toujours à l’esprit le principe du moindre privilège.

FAQ

Définir 777 accorde les permissions de lecture, écriture et exécution à tous les utilisateurs du système. Bien que cela supprime toutes les barrières d'accès, cela signifie également que n'importe quel utilisateur ou processus compromis peut modifier ou supprimer le fichier. Attribuez toujours les permissions minimales nécessaires au bon fonctionnement d'un fichier.

chmod modifie quelles actions (lecture, écriture, exécution) sont autorisées sur un fichier. chown modifie qui possède le fichier et à quel groupe il appartient. Vous utilisez généralement chown pour attribuer d'abord le bon propriétaire et groupe, puis chmod pour définir les bits de permission appropriés pour chaque classe.

Lister le contenu nécessite le bit de lecture (r), mais entrer dans un répertoire nécessite le bit d'exécution (x). Si un répertoire a r mais pas x, vous pouvez voir les noms de fichiers avec ls mais ne pouvez pas faire cd dedans ni ouvrir un fichier à l'intérieur par son chemin. Ajoutez le bit d'exécution avec chmod pour corriger cela.

Utilisez chmod avec un X majuscule au lieu d'un x minuscule. Le flag X majuscule définit l'exécution uniquement sur les répertoires et les fichiers qui ont déjà au moins un bit d'exécution défini. Par exemple, chmod -R u=rwX,g=rX,o=rX /chemin applique l'exécution aux répertoires tout en laissant les fichiers ordinaires non exécutables.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay