Appearance
Gestion des permissions sous Linux
Table des matières
Introduction
La gestion des permissions est un élément fondamental de la sécurité sous Linux. Elle permet de contrôler qui peut accéder aux fichiers et répertoires, et quelles actions peuvent être effectuées sur ces éléments.
Elle sont définit par le propriétaire du fichier ou du répertoire, et peuvent être modifiées par l'administrateur système (root) ou par le propriétaire lui-même.
1. Comprendre les permissions de base
Chaque fichier et répertoire appartient à un utilisateur et à un groupe.
1.1 Les trois types de permissions
Linux utilise trois types de permissions fondamentales :
- r (read/lecture) : Permet de lire le contenu d'un fichier ou de lister le contenu d'un répertoire.
- w (write/écriture) : Permet de modifier un fichier ou d'ajouter/supprimer des fichiers dans un répertoire.
- x (execute/exécution) : Permet d'exécuter un fichier ou de traverser un répertoire pour accéder à ses sous-répertoires.
Remarque
- Le droit en exécution n’a aucune incidence sur un fichier non exécutable.
- On ne peut accéder à un fichier que si les répertoires successifs constitutifs du chemin absolu de ce fichier possèdent le droit en exécution.
- Pour pouvoir lister les fichiers d’un répertoire, ce dernier doit être accessible en lecture.
1.2 Les trois catégories d'utilisateurs
Pour chaque fichier ou répertoire, les permissions sont définies pour trois catégories :
- u (user/propriétaire) : L'utilisateur propriétaire du fichier
- g (group/groupe) : Les membres du groupe propriétaire
- o (other/autres) : Tous les autres utilisateurs du système

1.3 Visualiser les permissions avec ls -l
bash
$ ls -l fichier.txt
-rw-r--r-- 1 user group 1024 Dec 15 10:30 fichier.txtLa première colonne se décompose ainsi :
- Premier caractère : Type de fichier (- = fichier, d = répertoire, l = lien)
- Caractères 2-4 : Permissions du propriétaire (rw-)
- Caractères 5-7 : Permissions du groupe (r--)
- Caractères 8-10 : Permissions des autres (r--)
2. Modification des permissions avec chmod
2.1 Notation symbolique
La commande chmod permet de modifier les permissions en utilisant la notation symbolique :
bash
# Syntaxe générale
chmod [ugoa][+-=][rwx] fichier
u: Propriétaire
g: Groupe
o: Autres
a: Tous (all)
+: Ajouter une permission
-: Retirer une permission
=: Définir exactement ces permissions
# Exemples
$ chmod u+x script.sh # Ajouter l'exécution pour le propriétaire
$ chmod g-w fichier.txt # Retirer l'écriture pour le groupe
$ chmod o=r fichier.txt # Définir lecture seule pour les autres
$ chmod a+r fichier.txt # Ajouter lecture pour tous (a = all)
$ chmod u+rw,g+r,o-rwx fichier.txt # Combinaisons multiples2.2 Notation octale
Chaque permission a une valeur numérique :
- r = 4
- w = 2
- x = 1
Les permissions se calculent en additionnant ces valeurs :
| Octal | Binaire | Permissions | Description |
|---|---|---|---|
| 0 | 000 | --- | Aucune permission |
| 1 | 001 | --x | Exécution seulement |
| 2 | 010 | -w- | Écriture seulement |
| 3 | 011 | -wx | Écriture + exécution |
| 4 | 100 | r-- | Lecture seulement |
| 5 | 101 | r-x | Lecture + exécution |
| 6 | 110 | rw- | Lecture + écriture |
| 7 | 111 | rwx | Toutes permissions |
Exemples avec notation octale :
bash
$ chmod 755 script.sh # rwxr-xr-x (propriétaire: rwx, groupe: r-x, autres: r-x)
$ chmod 644 fichier.txt # rw-r--r-- (propriétaire: rw-, groupe: r--, autres: r--)
$ chmod 600 secret.txt # rw------- (propriétaire: rw-, groupe: ---, autres: ---)
$ chmod 777 public.sh # rwxrwxrwx (toutes permissions pour tous)2.3 Options utiles de chmod
bash
$ chmod -R 755 dossier/ # Récursif : applique aux sous-dossiers et fichiers
$ chmod --reference=ref.txt fichier.txt # Copie les permissions de ref.txt
$ chmod -v 644 *.txt # Mode verbeux : affiche les changementsCalculateur de permissions
Vous pouvez utiliser des outils en ligne pour calculer les permissions, comme chmod-calculator.
3. Gestion de la propriété avec chown et chgrp
3.1 Changer le propriétaire avec chown
bash
# Syntaxe générale
$ chown [-R] [propriétaire][:groupe] fichier
# Exemples
$ chown alice fichier.txt # Change le propriétaire
$ chown alice:staff fichier.txt # Change propriétaire et groupe
$ chown :admin fichier.txt # Change seulement le groupe
$ chown -R alice:users dossier/ # Récursif3.2 Changer le groupe avec chgrp
bash
$ chgrp admin fichier.txt # Change le groupe
$ chgrp -R staff dossier/ # RécursifNote importante : Seul le superutilisateur (root) peut changer le propriétaire d'un fichier. Un utilisateur peut seulement changer le groupe s'il appartient au nouveau groupe.
4. Permissions spéciales
4.1 Le bit SetUID (SUID)
Le bit SUID permet à un fichier d'être exécuté avec les privilèges du propriétaire du fichier. En général, un utilisateur lance un programme avec ses propres privilèges, mais avec SUID, le programme s'exécute avec les privilèges du propriétaire du fichier et non de l'utilisateur qui l'exécute.
bash
$ chmod u+s fichier # Notation symbolique
$ chmod 4755 fichier # Notation octale (4 = SUID)Exemple : /usr/bin/passwd a le bit SUID pour permettre aux utilisateurs de changer leur mot de passe.

Si jamais le fichier n'a pas la permission d'exécution pour le propriétaire, le SUID ne fonctionnera pas et il sera affiché en majuscule (S au lieu de s).
4.2 Le bit SetGID (SGID)
Le bit SGID a deux comportements :
- Sur un fichier : Exécution d'un fichier avec les privilèges du groupe propriétaire du fichier
- Sur un répertoire : Les nouveaux fichiers hériteront du groupe du répertoire
bash
$ chmod g+s fichier # Notation symbolique
$ chmod 2755 fichier # Notation octale (2 = SGID)
4.3 Le Sticky Bit
Le sticky bit sur un répertoire empêche les utilisateurs de supprimer les fichiers d'autres utilisateurs même s'ils ont les permissions d'écriture dans le répertoire.
bash
$ chmod +t dossier # Notation symbolique
$ chmod 1755 dossier # Notation octale (1 = sticky bit)Exemple : /tmp utilise le sticky bit.

4.4 Visualisation des permissions spéciales
- s à la place de x = SUID ou SGID actif
- S à la place de x = SUID ou SGID actif mais pas d'exécution
- t à la place de x = Sticky bit actif
- T à la place de x = Sticky bit actif mais pas d'exécution
5. Umask : permissions par défaut
5.1 Comprendre umask
umask définit les permissions par défaut pour les nouveaux fichiers et répertoires en spécifiant quelles permissions retirer.
La commande umask prend une valeur octale comme argument qui représente les permissions à retirer des permissions maximales (666 pour les fichiers, 777 pour les répertoires).
bash
$ umask # Affiche le umask actuel
$ umask 022 # Définit un nouveau umask
$ touch nouveau_fichier.txt # Crée un fichier avec les permissions par défaut (644)
$ mkdir nouveau_dossier # Crée un répertoire avec les permissions par défaut (755)5.2 Calcul des permissions par défaut
- Permissions maximales fichier : 666 (rw-rw-rw-)
- Permissions maximales répertoire : 777 (rwxrwxrwx)
- Permissions effectives = Permissions max - umask
pourquoi 666 pour les fichiers ?
Les fichiers n'ont pas besoin de la permission d'exécution par défaut, donc la valeur maximale est 666.
Exemples avec umask 022 :
- Fichiers : 666 - 022 = 644 (rw-r--r--)
- Répertoires : 777 - 022 = 755 (rwxr-xr-x)
5.3 Umask courants
| umask | Fichiers | Répertoires | Usage |
|---|---|---|---|
| 022 | 644 | 755 | Standard (lecture publique) |
| 027 | 640 | 750 | Groupe seulement |
| 077 | 600 | 700 | Privé (propriétaire seulement) |
| 002 | 664 | 775 | Collaboration en groupe |
5-4 Connaître son umask actif
bash
$ umaskOptions courantes :
-S: Affiche en format symbolique (u=rwx,g=rwx,o=rx)-p: Affiche la valeur qu'il faudrait utiliser pour obtenir le même umask que celui en cours
bash
$ umask -S
u=rwx,g=rwx,o=rx
$ umask -p
umask 00226. Bonnes pratiques de sécurité
6.1 Principe du moindre privilège
- Accordez uniquement les permissions minimales nécessaires
- Évitez les permissions 777 sauf cas très spécifiques
- Utilisez les groupes pour organiser les accès
6.2 Fichiers sensibles
bash
# Fichiers de configuration sensibles
$ chmod 600 ~/.ssh/id_rsa # Clé privée SSH
$ chmod 644 ~/.ssh/id_rsa.pub # Clé publique SSH
$ chmod 700 ~/.ssh/ # Répertoire SSH
$ chmod 600 /etc/shadow # Mots de passe chiffrés6.3 Scripts et exécutables
bash
# Scripts utilisateur
$ chmod 755 script.sh # Exécutable mais pas modifiable par autres
# Scripts système critiques
$ chmod 700 admin_script.sh # Exécutable par propriétaire seulement6.4 Répertoires de collaboration
bash
# Créer un répertoire de groupe avec SGID
$ mkdir projet_equipe
$ chgrp equipe projet_equipe
$ chmod 2775 projet_equipe # SGID + permissions groupe
# Les nouveaux fichiers appartiendront au groupe 'equipe'7. Dépannage des permissions
Permission denied lors de l'exécution :
bash
$ chmod +x script.shImpossible de modifier un fichier :
bash
# Vérifier propriétaire et permissions
$ ls -l fichier.txt
# Corriger si nécessaire
$ chmod u+w fichier.txtImpossible d'accéder à un répertoire :
bash
$ chmod +x dossier/8. Commandes de référence rapide
bash
# Affichage des permissions
ls -l fichier # Permissions détaillées
ls -ld dossier # Permissions du répertoire lui-même
stat fichier # Informations complètes
# Modification des permissions
$ chmod 755 fichier # Notation octale
$ chmod u+x,g-w,o=r fichier # Notation symbolique
$ chmod -R 644 dossier/ # Récursif
# Changement de propriété
$ chown user:group fichier # Propriétaire et groupe
$ chgrp group fichier # Groupe seulement
$ chown -R user dossier/ # Récursif
# Permissions spéciales
$ chmod u+s fichier # SUID
$ chmod g+s dossier # SGID
$ chmod +t dossier # Sticky bit
# Masque de permissions
$ umask # Afficher umask
$ umask 022 # Définir umask