Skip to content

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

Image explicative des permissions

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.txt

La 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 multiples

2.2 Notation octale

Chaque permission a une valeur numérique :

  • r = 4
  • w = 2
  • x = 1

Les permissions se calculent en additionnant ces valeurs :

OctalBinairePermissionsDescription
0000---Aucune permission
1001--xExécution seulement
2010-w-Écriture seulement
3011-wxÉcriture + exécution
4100r--Lecture seulement
5101r-xLecture + exécution
6110rw-Lecture + écriture
7111rwxToutes 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 changements

Calculateur 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écursif

3.2 Changer le groupe avec chgrp

bash
$ chgrp admin fichier.txt           # Change le groupe
$ chgrp -R staff dossier/           # Récursif

Note 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.

Image explicative du SUID

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)

Image explicative du 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.

Image explicative du 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

umaskFichiersRépertoiresUsage
022644755Standard (lecture publique)
027640750Groupe seulement
077600700Privé (propriétaire seulement)
002664775Collaboration en groupe

5-4 Connaître son umask actif

bash
$ umask

Options 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 0022

6. 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és

6.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 seulement

6.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.sh

Impossible de modifier un fichier :

bash
# Vérifier propriétaire et permissions
$ ls -l fichier.txt
# Corriger si nécessaire
$ chmod u+w fichier.txt

Impossible 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

.