
Linux chmod démystifié : les permissions de fichiers sans prise de tête
📷 Pixabay / PexelsLinux chmod démystifié : les permissions de fichiers sans prise de tête
La notation octale (755, 644) et le mode symbolique (u+x) enfin expliqués clairement. Inclut les patterns courants et les pièges de sécurité.
Introduction
Chaque fichier et répertoire sur un système Linux possède un ensemble de permissions qui détermine qui peut le lire, l'écrire ou l'exécuter. Comprendre ces permissions est fondamental pour travailler avec Linux, que vous gériez un serveur web, déployiez des applications ou organisiez simplement des fichiers sur votre machine de développement.
La commande chmod est l'outil principal pour modifier ces permissions. Malgré sa simplicité apparente, chmod est suffisamment riche pour que même les développeurs expérimentés aient parfois besoin d'une référence. Ce guide couvre tout ce que vous devez savoir sur les permissions de fichiers Linux et la commande chmod, des concepts de base aux permissions spéciales avancées.
Comprendre les permissions de fichiers Linux
Les permissions de fichiers Linux reposent sur trois types d'accès et trois catégories d'utilisateurs.
Les trois types de permissions
- Lecture (r) : Afficher le contenu d'un fichier, ou lister le contenu d'un répertoire.
- Écriture (w) : Modifier ou supprimer un fichier, ou ajouter et supprimer des fichiers dans un répertoire.
- Exécution (x) : Lancer un fichier comme programme ou script, ou entrer dans un répertoire avec
cd.
Les trois catégories d'utilisateurs
- Propriétaire (u) : L'utilisateur qui possède le fichier. Par défaut, c'est celui qui l'a créé.
- Groupe (g) : Le groupe assigné au fichier. Tous les utilisateurs de ce groupe partagent les permissions du groupe.
- Autres (o) : Tous les autres utilisateurs du système qui ne sont ni propriétaire ni membre du groupe du fichier.
Chaque fichier sur un système Linux a exactement un propriétaire, appartient exactement à un groupe et dispose d'un ensemble défini de permissions pour chacune de ces trois catégories.
Lire les chaînes de permissions
Quand vous exécutez ls -l dans un terminal, vous voyez une sortie comme celle-ci :
ls -l
-rwxr-xr-- 1 alice developers 4096 Mar 22 10:30 deploy.sh
drwxr-x--- 2 alice developers 4096 Mar 22 10:30 config/
La première colonne est la chaîne de permissions. Elle fait dix caractères et se décompose ainsi :
d rwx r-x r--
| | | |
| | | +-- Permissions des autres (lecture seule)
| | +------ Permissions du groupe (lecture + exécution)
| +---------- Permissions du propriétaire (lecture + écriture + exécution)
+------------- Type de fichier (d = répertoire, - = fichier ordinaire, l = lien symbolique)
Chaque position est soit la lettre de permission, soit un tiret (-) indiquant que la permission n'est pas accordée. Voici plusieurs exemples :
| Chaîne de permissions | Signification |
|---|---|
-rw-r--r-- | Le propriétaire peut lire/écrire. Le groupe et les autres ne peuvent que lire. |
-rwxr-xr-x | Le propriétaire a un accès complet. Le groupe et les autres peuvent lire et exécuter. |
drwx------ | Répertoire. Seul le propriétaire peut lire, écrire et y entrer. |
-rw------- | Seul le propriétaire peut lire et écrire. Aucun accès pour les autres. |
-rwxrwxrwx | Accès complet pour tout le monde. Généralement un risque de sécurité. |
Notation octale (numérique)
La notation octale représente les permissions sous forme d'un nombre à trois chiffres, où chaque chiffre correspond respectivement au propriétaire, au groupe et aux autres. Chaque chiffre est la somme des valeurs de permissions :
| Valeur | Permission |
|---|---|
| 4 | Lecture (r) |
| 2 | Écriture (w) |
| 1 | Exécution (x) |
| 0 | Aucune permission |
Vous additionnez ces valeurs pour chaque catégorie d'utilisateur. Par exemple :
- 7 = 4 + 2 + 1 = lecture + écriture + exécution (rwx)
- 6 = 4 + 2 = lecture + écriture (rw-)
- 5 = 4 + 1 = lecture + exécution (r-x)
- 4 = 4 = lecture seule (r--)
- 0 = aucune permission (---)
Ainsi, chmod 755 signifie :
7 = rwx (propriétaire : lecture + écriture + exécution)
5 = r-x (groupe : lecture + exécution)
5 = r-x (autres : lecture + exécution)
Voici un tableau de référence rapide pour toutes les valeurs de chiffres possibles :
0 = --- (aucune permission)
1 = --x (exécution seulement)
2 = -w- (écriture seulement)
3 = -wx (écriture + exécution)
4 = r-- (lecture seulement)
5 = r-x (lecture + exécution)
6 = rw- (lecture + écriture)
7 = rwx (lecture + écriture + exécution)
Si vous avez besoin de convertir rapidement entre chaînes de permissions et valeurs octales, utilisez notre calculateur chmod pour des résultats instantanés.
Notation symbolique
La notation symbolique utilise des lettres et des opérateurs pour modifier les permissions. Elle est souvent plus intuitive pour effectuer des changements ciblés car vous n'avez pas besoin de spécifier l'ensemble complet des permissions.
La syntaxe
chmod [qui][opérateur][permission] fichier
Qui :
u-- propriétaire (user)g-- groupeo-- autresa-- tous (propriétaire + groupe + autres)
Opérateur :
+-- ajouter la permission--- supprimer la permission=-- définir la permission exacte
Permission :
r-- lecturew-- écriturex-- exécution
Exemples en mode symbolique
# Ajouter la permission d'exécution pour le propriétaire
chmod u+x script.sh
# Supprimer la permission d'écriture du groupe et des autres
chmod go-w config.yml
# Définir la lecture seule pour tout le monde
chmod a=r readme.txt
# Ajouter lecture et exécution pour le groupe
chmod g+rx shared-tool
# Supprimer toutes les permissions pour les autres
chmod o= private.key
# Ajouter l'exécution pour tous, supprimer l'écriture pour les autres
chmod a+x,o-w deploy.sh
# Définir propriétaire à rwx, groupe à rx, autres à rien
chmod u=rwx,g=rx,o= project-dir
La notation symbolique est particulièrement utile quand vous souhaitez ne modifier qu'un aspect des permissions sans affecter le reste. Par exemple, chmod u+x script.sh ajoute la permission d'exécution pour le propriétaire sans toucher aux autres permissions.
Patterns chmod courants
Certains patterns de permissions apparaissent régulièrement dans l'administration Linux réelle. Voici les plus importants et quand les utiliser.
644 -- Fichiers standards
chmod 644 index.html
# Propriétaire : lecture + écriture | Groupe : lecture | Autres : lecture
C'est la valeur par défaut pour la plupart des fichiers ordinaires. Le propriétaire peut modifier le fichier, et tous les autres peuvent le lire. Utilisez ceci pour les fichiers HTML, les fichiers de configuration non sensibles et les documents généraux.
755 -- Fichiers exécutables et répertoires
chmod 755 deploy.sh
chmod 755 /var/www/html
# Propriétaire : accès complet | Groupe : lecture + exécution | Autres : lecture + exécution
La permission standard pour les scripts, les binaires et les répertoires devant être accessibles. Le propriétaire a le contrôle total, tandis que les autres peuvent lire et exécuter (ou traverser, dans le cas des répertoires) mais pas modifier.
700 -- Répertoires privés
chmod 700 ~/.ssh
# Propriétaire : accès complet | Groupe : aucun | Autres : aucun
Seul le propriétaire peut accéder au fichier ou au répertoire. Essentiel pour les répertoires sensibles comme ~/.ssh ou les répertoires de configuration privés.
600 -- Fichiers privés
chmod 600 ~/.ssh/id_rsa
chmod 600 .env
# Propriétaire : lecture + écriture | Groupe : aucun | Autres : aucun
Seul le propriétaire peut lire et écrire le fichier. Personne d'autre n'a accès. Requis pour les clés privées SSH, les fichiers d'environnement contenant des secrets et tout fichier contenant des identifiants.
444 -- Lecture seule pour tous
chmod 444 LICENSE
# Propriétaire : lecture | Groupe : lecture | Autres : lecture
Personne ne peut modifier le fichier, y compris le propriétaire (sans changer les permissions en premier). Utile pour les fichiers qui ne doivent jamais être modifiés accidentellement, comme les fichiers de licence ou la configuration verrouillée.
777 -- Accès complet pour tous
chmod 777 /tmp/shared-workspace
# Propriétaire : complet | Groupe : complet | Autres : complet
Chaque utilisateur peut lire, écrire et exécuter. Évitez cela en production. C'est un risque de sécurité significatif car n'importe quel utilisateur ou processus du système peut modifier ou supprimer le fichier. Utilisez-le uniquement dans des scénarios de développement isolés ou de débogage temporaire.
Tableau de référence rapide
| Octal | Chaîne | Utilisation typique |
|---|---|---|
644 | -rw-r--r-- | Fichiers ordinaires (HTML, CSS, images) |
755 | -rwxr-xr-x | Scripts, binaires, répertoires web |
700 | -rwx------ | Répertoires privés (~/.ssh) |
600 | -rw------- | Clés privées, fichiers .env, identifiants |
444 | -r--r--r-- | Fichiers en lecture seule, licences |
664 | -rw-rw-r-- | Fichiers collaboratifs de groupe |
775 | -rwxrwxr-x | Répertoires collaboratifs de groupe |
777 | -rwxrwxrwx | À éviter en production |
Syntaxe et options de la commande chmod
La syntaxe complète de chmod est :
chmod [options] mode fichier...
Options clés
# Appliquer les permissions récursivement aux répertoires et leur contenu
chmod -R 755 /var/www/html
# Afficher une sortie détaillée pour chaque fichier modifié
chmod -v 644 *.html
# Afficher la sortie uniquement quand un changement est effectué
chmod -c u+x scripts/*.sh
# Supprimer les messages d'erreur
chmod -f 600 missing-file
# Utiliser un fichier de référence pour copier ses permissions
chmod --reference=source.conf target.conf
Exemples pratiques
# Rendre un script exécutable
chmod +x backup.sh
# Sécuriser un répertoire SSH et son contenu
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys
# Définir les permissions de fichiers du serveur web
chmod -R 644 /var/www/html/*.html
chmod -R 755 /var/www/html/cgi-bin/
# Restreindre un fichier de configuration
chmod 600 /etc/myapp/database.yml
# Rendre tous les scripts shell d'un répertoire exécutables
chmod u+x scripts/*.sh
# Supprimer l'accès en écriture d'une config de production
chmod a-w /etc/nginx/nginx.conf
Combinaison avec find pour un contrôle granulaire
Un pattern courant consiste à définir des permissions différentes pour les fichiers et les répertoires dans le même arbre :
# Définir les répertoires à 755 et les fichiers à 644 récursivement
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# Rendre seulement les scripts shell exécutables
find /opt/scripts -name "*.sh" -exec chmod u+x {} \;
# Supprimer les permissions lisibles par tous des fichiers de config
find /etc/myapp -type f -exec chmod o-r {} \;
Cette approche est plus précise que chmod -R car elle permet de différencier les fichiers et les répertoires, qui nécessitent souvent des ensembles de permissions différents.
Permissions spéciales
Au-delà des bits standard de lecture, écriture et exécution, Linux supporte trois types de permissions spéciales. Celles-ci sont représentées par un quatrième chiffre octal précédant les trois chiffres standards.
Setuid (4)
Quand défini sur un exécutable, le fichier s'exécute avec les permissions du propriétaire du fichier plutôt que de l'utilisateur qui l'exécute.
chmod 4755 /usr/bin/special-tool
chmod u+s /usr/bin/special-tool
L'exemple classique est la commande passwd. Elle doit modifier /etc/shadow, qui appartient à root. Le bit setuid permet à n'importe quel utilisateur d'exécuter passwd avec un accès aux fichiers de niveau root pour cet usage spécifique.
Dans la sortie de ls -l, un fichier setuid affiche un s à la place du bit d'exécution du propriétaire :
-rwsr-xr-x 1 root root 63960 Feb 10 12:00 /usr/bin/passwd
Setgid (2)
Quand appliqué à un répertoire, les nouveaux fichiers créés dedans héritent du groupe du répertoire plutôt que du groupe principal de l'utilisateur créateur. Sur les exécutables, il fonctionne comme setuid mais pour l'appartenance au groupe.
chmod 2775 /opt/team-project
chmod g+s /opt/team-project
Ceci est indispensable pour les répertoires de projets partagés. Sans setgid, chaque fichier créé par un membre de l'équipe appartiendrait à son groupe personnel, rendant la collaboration difficile.
drwxrwsr-x 2 root developers 4096 Mar 22 10:30 /opt/team-project
Notez le s à la position d'exécution du groupe.
Sticky Bit (1)
Quand défini sur un répertoire, seul le propriétaire du fichier (ou root) peut supprimer ou renommer des fichiers dedans, même si d'autres utilisateurs ont accès en écriture au répertoire.
chmod 1777 /tmp
chmod +t /tmp
Le répertoire /tmp est l'exemple le plus courant. Tout le monde peut créer des fichiers dans /tmp, mais les utilisateurs ne peuvent pas supprimer les fichiers des autres. Dans la sortie de ls -l, le sticky bit apparaît comme un t à la position d'exécution des autres :
drwxrwxrwt 15 root root 4096 Mar 22 10:30 /tmp
Récapitulatif des permissions spéciales
| Permission | Octal | Symbole | Effet sur fichier | Effet sur répertoire |
|---|---|---|---|---|
| Setuid | 4000 | u+s | S'exécute comme propriétaire | Aucun effet standard |
| Setgid | 2000 | g+s | S'exécute comme groupe | Les nouveaux fichiers héritent du groupe |
| Sticky Bit | 1000 | +t | Aucun effet standard | Seul le propriétaire peut supprimer des fichiers |
Bonnes pratiques de sécurité
Suivre quelques principes permettra de garder vos systèmes sécurisés tout en restant pratique au quotidien.
Appliquer le principe du moindre privilège
N'accordez que les permissions minimales nécessaires pour une tâche. Si un fichier n'a besoin que d'être lu, ne le rendez pas inscriptible. Si un script n'a besoin d'être exécuté que par le propriétaire, n'accordez pas l'exécution au groupe ou aux autres.
# Bien : permissions minimales
chmod 600 .env
chmod 700 ~/.ssh
# Mal : trop permissif
chmod 777 .env
chmod 755 ~/.ssh
Ne jamais utiliser 777 en production
Il n'y a presque jamais de raison légitime d'utiliser chmod 777 sur un système de production. Si quelque chose semble le nécessiter, le problème sous-jacent est généralement un utilisateur, un groupe ou une propriété mal configuré plutôt qu'un problème de permissions. Utilisez chown ou chgrp pour corriger la propriété avant d'assouplir les permissions.
Sécuriser immédiatement les fichiers sensibles
Les clés SSH, les tokens API, les fichiers d'environnement et les identifiants de base de données doivent toujours être en 600 ou 640 au maximum. De nombreux outils, dont OpenSSH, refuseront de fonctionner si les fichiers de clé ont des paramètres trop permissifs.
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_ed25519
chmod 600 .env
chmod 600 /etc/myapp/secrets.yml
Utiliser les groupes pour la collaboration
Plutôt qu'élargir les permissions pour "les autres", créez un groupe dédié, ajoutez les utilisateurs pertinents et utilisez les permissions de groupe. Combinez cela avec le bit setgid sur les répertoires partagés pour que les nouveaux fichiers héritent automatiquement du bon groupe.
# Créer un répertoire partagé avec les bonnes permissions de groupe
sudo groupadd webteam
sudo usermod -aG webteam alice
sudo usermod -aG webteam bob
sudo mkdir /var/www/project
sudo chown root:webteam /var/www/project
sudo chmod 2775 /var/www/project
Auditer les permissions régulièrement
Sur les serveurs de production, vérifiez périodiquement les fichiers avec des permissions dangereuses :
# Trouver tous les fichiers inscriptibles par tout le monde
find / -type f -perm -o+w 2>/dev/null
# Trouver tous les fichiers setuid (vecteurs potentiels d'escalade de privilèges)
find / -type f -perm -4000 2>/dev/null
# Trouver les fichiers sans propriétaire (fichiers orphelins)
find / -nouser -o -nogroup 2>/dev/null
Définir un umask sécurisé
Le umask définit les permissions par défaut pour les fichiers et répertoires nouvellement créés. Un umask de 022 donne des fichiers avec 644 et des répertoires avec 755. Un umask plus restrictif de 027 donne des fichiers avec 640 et des répertoires avec 750, empêchant par défaut les "autres" d'accéder aux nouveaux fichiers.
# Vérifier le umask actuel
umask
# Définir un umask restrictif pour la session
umask 027
# Le rendre permanent en ajoutant à ~/.bashrc ou ~/.zshrc
echo "umask 027" >> ~/.bashrc
chmod vs. chown vs. chgrp
Ces trois commandes sont liées mais servent des objectifs distincts :
| Commande | Objectif | Exemple |
|---|---|---|
chmod | Modifier les permissions de fichier | chmod 755 script.sh |
chown | Modifier le propriétaire (et optionnellement le groupe) | chown alice:devs file.txt |
chgrp | Modifier le groupe du fichier | chgrp webteam index.html |
Lors du débogage de problèmes d'accès, commencez par vérifier à la fois la propriété (ls -l) et les permissions. Souvent, la solution consiste à changer la propriété avec chown plutôt qu'à assouplir les permissions avec chmod.
Utiliser le calculateur chmod
La conversion manuelle entre la notation symbolique et octale est simple après un peu de pratique, mais peut être fastidieuse quand vous configurez un nouveau serveur ou examinez des ensembles de permissions complexes. Utilisez notre calculateur chmod pour basculer visuellement les permissions et voir instantanément la valeur octale correspondante, la notation symbolique et la commande chmod résultante. Il est particulièrement utile pour vérifier les permissions spéciales comme setuid, setgid et le sticky bit.
Conclusion
Les permissions de fichiers Linux sont l'un des piliers fondamentaux de la sécurité des systèmes. La commande chmod vous donne un contrôle précis sur qui peut accéder, modifier et exécuter chaque fichier et répertoire sur votre système. En comprenant les notations octale et symbolique, en appliquant le principe du moindre privilège et en utilisant efficacement les groupes, vous pouvez maintenir un environnement sécurisé sans sacrifier la praticité.
Retenez les règles clés : gardez les fichiers sensibles restreints à 600 ou 700, utilisez 755 pour les exécutables et les répertoires publics, évitez complètement 777 en production et auditez vos permissions régulièrement. Avec ces pratiques en place, vos systèmes Linux seront à la fois fonctionnels et sécurisés.