Linux Platform

Gerer les permissions de fichiers

Maitrisez les permissions Linux avec chmod, chown, chgrp et umask. Découvrez les permissions speciales SUID, SGID, sticky bit ainsi que les listes de contrôle d'accès (ACL).

permissionschmodchownaclsécuritéfichiers

Introduction

Sous Linux, chaque fichier et répertoire possede un jeu de permissions qui déterminé qui peut le lire, le modifier ou l'exécuter. Comprendre ce système est indispensable pour sécurisér un serveur et organisér le travail en equipe.

Les permissions de base

Chaque fichier possede trois niveaux de permissions pour trois catégories :

CategorieLettreDescription
Proprietaire (user)uL'utilisateur qui possede le fichier
Groupe (group)gLe groupe associé au fichier
Autrès (others)oTous les autres utilisateurs

Et trois types de droits :

DroitLettreValeur octaleEffet sur un fichierEffet sur un répertoire
Lecturer4Lire le contenuLister le contenu
Ecriturew2Modifier le contenuCreer/supprimer des fichiers
Executionx1Executer le fichierAcceder au répertoire

Lire les permissions

ls -l document.txt

Resultat : -rw-r--r-- 1 jean développeurs 1024 jan 15 10:30 document.txt

Le premier caractère indique le type (- fichier, d répertoire, l lien). Les neuf caractères suivants représentent les permissions : rw- (propriétaire), r-- (groupe), r-- (autres).

chmod -- Modifier les permissions

Notation symbolique

chmod u+x script.sh          # ajouter l'exécution pour le propriétaire
chmod g+rw fichier.txt        # ajouter lecture et écriture pour le groupe
chmod o-r fichier.txt         # retirer la lecture pour les autres
chmod a+r fichier.txt         # ajouter la lecture pour tout le monde
chmod u=rwx,g=rx,o= script.sh # définir les permissions exactes

Notation octale

Chaque chiffre est la somme des droits : r(4) + w(2) + x(1).

chmod 755 script.sh           # rwxr-xr-x
chmod 644 fichier.txt         # rw-r--r--
chmod 700 dossier_prive       # rwx------
chmod 660 partage.txt         # rw-rw----
ValeurPermissionsUsage courant
755rwxr-xr-xScripts, répertoires publics
644rw-r--r--Fichiers de configuration
700rwx------Répertoires prives, clés SSH
600rw-------Fichiers sensibles

Application recursive

chmod -R 755 /var/www/html    # appliquer a tous les fichiers et sous-répertoires

chown et chgrp -- Changer le propriétaire et le groupe

chown -- Changer le propriétaire

sudo chown jean fichier.txt                # changer le propriétaire
sudo chown jean:développeurs fichier.txt   # changer propriétaire et groupe
sudo chown -R www-data:www-data /var/www   # recursivement

chgrp -- Changer le groupe

sudo chgrp développeurs projet/
sudo chgrp -R développeurs projet/

umask -- Permissions par défaut

Le umask définit les permissions retirées lors de la creation de nouveaux fichiers et répertoires. La valeur par défaut est généralement 022.

umask                          # afficher le umask actuel
umask 027                      # nouveaux fichiers : 640, nouveaux répertoires : 750
umaskFichiers créésRépertoires créés
022644 (rw-r--r--)755 (rwxr-xr-x)
027640 (rw-r-----)750 (rwxr-x---)
077600 (rw-------)700 (rwx------)

Pour rendre le umask permanent, ajoutez-le dans ~/.bashrc ou ~/.profile :

echo "umask 027" >> ~/.bashrc

Permissions speciales

SUID (Set User ID) -- Valeur octale : 4000

Lorsqu'un fichier a le bit SUID, il s'exécute avec les permissions de son propriétaire, quel que soit l'utilisateur qui le lance.

chmod u+s /usr/bin/mon_programme
chmod 4755 /usr/bin/mon_programme
ls -l /usr/bin/passwd          # exemple classique : -rwsr-xr-x

SGID (Set Group ID) -- Valeur octale : 2000

Sur un fichier, il s'exécute avec les permissions du groupe. Sur un répertoire, les nouveaux fichiers heritent du groupe du répertoire parent.

chmod g+s /opt/projet/
chmod 2775 /opt/projet/

Cas pratique pour un répertoire partage :

sudo mkdir /opt/equipe
sudo chown :développeurs /opt/equipe
sudo chmod 2775 /opt/equipe

Tous les fichiers créés dans /opt/equipe appartiendront automatiquement au groupe développeurs.

Sticky bit -- Valeur octale : 1000

Sur un répertoire, seul le propriétaire d'un fichier (ou root) peut le supprimer, meme si d'autres ont le droit d'écriture. C'est le cas de /tmp.

chmod +t /opt/partage/
chmod 1777 /opt/partage/
ls -ld /tmp                    # drwxrwxrwt -- le 't' indique le sticky bit

ACL -- Listes de contrôle d'acces

Les ACL permettent de définir des permissions plus fines que le modèle classique propriétaire/groupe/autres.

Installer le support ACL

sudo apt install acl           # Debian/Ubuntu
sudo dnf install acl           # Fedora/RHEL

getfacl -- Afficher les ACL

getfacl fichier.txt

setfacl -- Definir des ACL

# Donner la lecture et l'écriture a un utilisateur spécifique
setfacl -m u:marie:rw fichier.txt
 
# Donner la lecture a un groupe spécifique
setfacl -m g:stagiaires:r fichier.txt
 
# Definir des ACL par défaut sur un répertoire (appliquees aux nouveaux fichiers)
setfacl -d -m g:développeurs:rwx /opt/projet/
 
# Supprimer les ACL d'un utilisateur
setfacl -x u:marie fichier.txt
 
# Supprimer toutes les ACL
setfacl -b fichier.txt

Exemple pratique

Un répertoire de projet où les développeurs ont tous les droits et les stagiaires n'ont que la lecture :

sudo mkdir /opt/projet
sudo setfacl -m g:développeurs:rwx /opt/projet
sudo setfacl -m g:stagiaires:rx /opt/projet
sudo setfacl -d -m g:développeurs:rwx /opt/projet
sudo setfacl -d -m g:stagiaires:rx /opt/projet

Conclusion

Le système de permissions Linux -- des droits classiques aux ACL en passant par les permissions speciales -- offre un contrôle d'accès granulaire et robuste. Prenez l'habitude de vérifiér les permissions avec ls -l et getfacl, et appliquez le principe du moindre privilege : n'accordez que les droits strictement nécessaires.