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 :
| Categorie | Lettre | Description |
|---|---|---|
| Proprietaire (user) | u | L'utilisateur qui possede le fichier |
| Groupe (group) | g | Le groupe associé au fichier |
| Autrès (others) | o | Tous les autres utilisateurs |
Et trois types de droits :
| Droit | Lettre | Valeur octale | Effet sur un fichier | Effet sur un répertoire |
|---|---|---|---|---|
| Lecture | r | 4 | Lire le contenu | Lister le contenu |
| Ecriture | w | 2 | Modifier le contenu | Creer/supprimer des fichiers |
| Execution | x | 1 | Executer le fichier | Acceder au répertoire |
Lire les permissions
ls -l document.txtResultat : -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 exactesNotation 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----| Valeur | Permissions | Usage courant |
|---|---|---|
755 | rwxr-xr-x | Scripts, répertoires publics |
644 | rw-r--r-- | Fichiers de configuration |
700 | rwx------ | Répertoires prives, clés SSH |
600 | rw------- | Fichiers sensibles |
Application recursive
chmod -R 755 /var/www/html # appliquer a tous les fichiers et sous-répertoireschown 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 # recursivementchgrp -- 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| umask | Fichiers créés | Répertoires créés |
|---|---|---|
022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) |
027 | 640 (rw-r-----) | 750 (rwxr-x---) |
077 | 600 (rw-------) | 700 (rwx------) |
Pour rendre le umask permanent, ajoutez-le dans ~/.bashrc ou ~/.profile :
echo "umask 027" >> ~/.bashrcPermissions 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-xSGID (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/equipeTous 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 bitACL -- 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/RHELgetfacl -- Afficher les ACL
getfacl fichier.txtsetfacl -- 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.txtExemple 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/projetConclusion
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.