// Linux & terminal

Les permissions Linux (chmod, chown) expliquées

Sous Linux, chaque fichier et chaque dossier porte un jeu de permissions qui décide qui peut le lire, le modifier ou l’exécuter. Bien les comprendre évite deux écueils fréquents : le fameux « Permission denied » qui bloque un script, et la faille de sécurité créée par un chmod 777 posé un peu vite. Ce guide décortique la lecture des permissions, les commandes chmod, chown et chgrp, le rôle de umask et de sudo, avec des cas concrets que vous rencontrerez au quotidien.

Lire les permissions avec ls -l

La commande ls -l affiche les permissions en première colonne :

ls -l
-rw-r--r-- 1 sebastien dev  2048 nov 26 10:30 rapport.txt
drwxr-xr-x 2 sebastien dev  4096 nov 26 10:31 projets
-rwxr-xr-x 1 sebastien dev   512 nov 26 10:32 script.sh

Le premier caractère indique le type : - pour un fichier ordinaire, d pour un dossier, l pour un lien symbolique. Les neuf caractères suivants se lisent par groupes de trois.

Les trois permissions : r, w, x

Chaque groupe combine trois droits :

  • r (read, lecture) : lire le contenu d’un fichier, ou lister le contenu d’un dossier.
  • w (write, écriture) : modifier un fichier, ou créer/supprimer des fichiers dans un dossier.
  • x (execute, exécution) : lancer un fichier comme programme, ou traverser un dossier (y entrer avec cd).

Un point mérite attention : sur un dossier, le droit x est indispensable pour y accéder, même si r permet d’en lister le nom des fichiers. Sans x, impossible d’entrer dedans.

Utilisateur, groupe, autres

Les neuf caractères se répartissent en trois catégories :

-rwxr-xr--
 │  │  │
 │  │  └── autres (others) : r-- → lecture seule
 │  └───── groupe (group)  : r-x → lecture + exécution
 └──────── propriétaire (user) : rwx → tous les droits
  • user : le propriétaire du fichier.
  • group : les membres du groupe associé au fichier.
  • others : tous les autres utilisateurs du système.

Dans l’exemple ls -l plus haut, rapport.txt en -rw-r--r-- est modifiable par son propriétaire, mais seulement lisible par le groupe et les autres.

chmod en notation symbolique

chmod (change mode) modifie les permissions. La notation symbolique manipule des droits précis avec des lettres : u (user), g (group), o (others), a (all), combinées aux opérateurs + (ajouter), - (retirer), = (fixer).

# Rendre un script exécutable pour tout le monde
chmod +x script.sh

# Ajouter l'exécution uniquement pour le propriétaire
chmod u+x script.sh

# Retirer l'écriture au groupe et aux autres
chmod go-w rapport.txt

# Fixer exactement : lecture+écriture pour user, lecture pour le reste
chmod u=rw,go=r rapport.txt

# Appliquer récursivement à un dossier et son contenu
chmod -R u+rwX projets/

Le X majuscule dans le dernier exemple est une astuce précieuse : il ajoute le droit d’exécution uniquement aux dossiers (et aux fichiers déjà exécutables), sans rendre exécutables tous vos fichiers texte.

chmod en notation octale

La notation octale exprime les permissions par un nombre à trois chiffres, un par catégorie. Chaque droit vaut une valeur : lecture = 4, écriture = 2, exécution = 1. On additionne.

ChiffreDroitsSignification
7rwxlecture + écriture + exécution
6rw-lecture + écriture
5r-xlecture + exécution
4r—lecture seule
0---aucun droit
# rw-r--r-- : fichier standard (config, document)
chmod 644 rapport.txt

# rwxr-xr-x : script ou programme exécutable
chmod 755 script.sh

# rwx------ : dossier privé, accessible au seul propriétaire
chmod 700 ~/.ssh

# rw------- : fichier sensible, clé privée par exemple
chmod 600 ~/.ssh/id_ed25519

Les valeurs 644 et 755 reviennent constamment : la première pour les fichiers de données, la seconde pour les exécutables et les dossiers. Les permissions strictes sur ~/.ssh sont d’ailleurs obligatoires : SSH refuse de fonctionner si votre clé privée est trop ouverte, un point que détaille notre guide de SSH.

chown et chgrp : changer le propriétaire

chown (change owner) réassigne le propriétaire d’un fichier ; chgrp change son groupe. Ces opérations demandent en général les droits d’administrateur.

# Changer le propriétaire
sudo chown sebastien fichier.txt

# Changer propriétaire ET groupe en une commande (user:group)
sudo chown sebastien:dev fichier.txt

# Changer uniquement le groupe
sudo chgrp dev fichier.txt

# Appliquer récursivement à toute une arborescence
sudo chown -R www-data:www-data /var/www/mon-site

Le dernier exemple est classique lors du déploiement d’un site web : on donne la propriété des fichiers à l’utilisateur du serveur web (www-data sous Debian/Ubuntu) pour qu’il puisse les servir.

umask : les permissions par défaut

Quand vous créez un fichier, ses permissions ne partent pas de zéro : elles découlent d’un masque, umask, qui retire des droits à une valeur de base (666 pour les fichiers, 777 pour les dossiers).

# Afficher le umask courant
umask
# Souvent : 0022

# Avec umask 022 :
#   fichiers : 666 - 022 = 644 (rw-r--r--)
#   dossiers : 777 - 022 = 755 (rwxr-xr-x)

# Durcir : rien pour le groupe ni les autres
umask 077

Avec umask 077, tout nouveau fichier naît en 600 et tout dossier en 700 : idéal sur un serveur partagé où l’on veut que chaque utilisateur garde ses créations privées. Pour rendre ce réglage permanent, on l’ajoute à son fichier de démarrage de shell (~/.bashrc ou ~/.profile).

sudo : agir en administrateur

Certaines actions — modifier des fichiers système, changer un propriétaire, installer un paquet — exigent les privilèges de l’administrateur (root). sudo exécute une commande unique avec ces droits, sans se connecter en permanence en root.

# Exécuter une commande en tant qu'administrateur
sudo systemctl restart nginx

# Éditer un fichier système protégé
sudo nano /etc/hosts

Bonne pratique : n’employez sudo que lorsque c’est strictement nécessaire. Travailler en root en permanence multiplie les risques d’erreur destructrice.

Cas concrets

« Permission denied » sur un script

Vous téléchargez un script mais son exécution échoue :

./deploiement.sh
# bash: ./deploiement.sh: Permission denied

Le fichier n’a pas le droit x. On l’ajoute :

chmod +x deploiement.sh
./deploiement.sh

C’est le réflexe à avoir après avoir écrit un script maison, comme le rappelle notre guide sur les scripts Bash pour automatiser ses tâches.

Sécuriser un dossier de clés SSH

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

Le dossier reste privé, la clé privée illisible par les autres, la clé publique en lecture pour tous.

Donner les bons droits à un site web

sudo chown -R www-data:www-data /var/www/mon-site
sudo chmod -R 755 /var/www/mon-site

Le serveur web devient propriétaire et peut lire les fichiers, sans que ceux-ci soient modifiables par n’importe qui.

Pourquoi éviter chmod 777

chmod 777 accorde tous les droits à tout le monde : n’importe quel utilisateur ou processus peut lire, modifier et exécuter le fichier. C’est une porte ouverte classique en sécurité. Face à un problème de permission, cherchez le bon propriétaire et les droits minimaux nécessaires plutôt que d’ouvrir tout en grand.

En résumé

Les permissions Linux reposent sur une logique simple une fois assimilée : trois droits (r, w, x), trois catégories (user, group, others), et deux notations pour chmod (symbolique et octale). Avec chown, chgrp, umask et un usage mesuré de sudo, vous contrôlez précisément qui accède à quoi. C’est un socle indispensable pour administrer un serveur ou déployer une application en toute sécurité.

À lire ensuite