Dans la leçon 3, nous avons vu les bases des permissions Linux. Ici, nous allons plus loin : les permissions spéciales (SUID, SGID, Sticky Bit), les ACL (Listes de Contrôle d'Accès), la gestion des fichiers setuid/setgid, et des techniques avancées pour administrer les droits sur un système.
Chaque fichier possède trois triplets de permissions :
| Position | Signification |
|---|---|
rwx (1-3) | Propriétaire (User) |
rwx (4-6) | Groupe (Group) |
rwx (7-9) | Autres (Others) |
# Voir les permissions d'un fichierls -l /etc/passwd# -rw-r--r-- 1 root root 1234 /etc/passwd# ^^ ^^^ ^^^# | | |# | | +-- Autres : lecture seule# | +------ Groupe : lecture seule# +---------- Propriétaire : lecture + écritureTu connais sûrement chmod 755 fichier. Mais il existe des combinaisons plus fines :
# Notation octale : 4=read, 2=write, 1=execute# chmod UGO (User, Group, Other)chmod 640 fichier # rw-r-----chmod 664 fichier # rw-rw-r--chmod 600 fichier # rw-------chmod 700 repertoire/ # rwx------chmod 2755 script # rwxr-sr-x (SGID positionné)chmod 4755 script # rwsr-xr-x (SUID positionné)chmod 1755 repertoire/ # rwxr-xr-t (Sticky Bit)# Syntaxe : chmod [u|g|o|a][+|-|=][rwx] fichierchmod u+x script.sh # Ajoute l'exécution pour le propriétairechmod g-w fichier.txt # Retire l'écriture au groupechmod o=r fichier.txt # Others : lecture seulechmod a+rwx fichier # Tout le monde peut lire, écrire, exécuterchmod go-rwx secrets # Retire tout au groupe ET aux autres# Uniquement les fichiersfind /var/www -type f -exec chmod 644 {} \;# Uniquement les répertoiresfind /var/www -type d -exec chmod 755 {} \;# Avec chmod -R (moins précis)chmod -R 755 /var/www/Quand un fichier a le bit SUID, il s'exécute avec les droits de son propriétaire, pas de l'utilisateur qui le lance. Exemple classique : passwd.
# Le 's' au lieu de 'x' pour le propriétairels -l /usr/bin/passwd# -rwsr-xr-x 1 root root 84872 /usr/bin/passwdQuand tu changes ton mot de passe, tu modifies /etc/shadow — mais tu n'as pas le droit d'écrire dans ce fichier. Le programme passwd a le bit SUID root, donc il s'exécute avec les droits root.
# Poser le bit SUID sur un scriptchmod 4755 /opt/mon_script.sh# ouchmod u+s /opt/mon_script.sh# Retirer le bit SUIDchmod u-s /opt/mon_script.sh⚠️ Sécurité : Le SUID est dangereux sur les scripts. Un programme SUID root mal sécurisé peut donner un shell root à un attaquant. Utilise-le avec parcimonie.
Sur un fichier : même principe que SUID, mais avec les droits du groupe. Sur un répertoire : tous les fichiers créés héritent du groupe du répertoire.
# Sur un fichier : 's' au lieu de 'x' pour le groupechmod 2555 /usr/bin/mon_outil# Sur un répertoire : pour partager des fichiers entre un groupemkdir /srv/projetchgrp developpeurs /srv/projetchmod 2775 /srv/projet # rwxrwsr-x# Chaque fichier créé aura le groupe 'developpeurs'Sur un répertoire partagé (comme /tmp), le Sticky Bit empêche quiconque de supprimer les fichiers des autres.
# Le 't' en dernière positionls -ld /tmp# drwxrwxrwt 20 root root 4096 /tmp# Poser le sticky bit sur un répertoirechmod 1777 /srv/partage# ouchmod +t /srv/partageTout le monde peut écrire dans /srv/partage, mais chacun ne peut supprimer que ses propres fichiers.
| Bit | Nom | Sur fichier | Sur répertoire | Octal |
|---|---|---|---|---|
SUID | Set User ID | Exécute avec droits du propriétaire | N/A | 4 |
SGID | Set Group ID | Exécute avec droits du groupe | Les fichiers héritent du groupe | 2 |
Sticky | Bit restrictif | N/A | On ne peut supprimer que ses propres fichiers | 1 |
# Combiner les bits : 4755 = SUID + rwx r-x r-x# Combiner : 2755 = SGID + rwx r-x r-x# Combiner : 1777 = Sticky + rwx rwx rwx# Triple : 5755 = SUID + SGID + rwx r-x r-x# Changer le propriétairesudo chown david /srv/data# Changer le groupesudo chgrp developpeurs /srv/data# Changer les deux en même temps (syntaxe : proprietaire:groupe)sudo chown david:developpeurs /srv/data# Changer uniquement le groupe (comme chgrp)sudo chown :admins /srv/data# Héritage : le groupe des nouveaux fichiers = celui du répertoire (SGID)sudo chgrp -R developpeurs /srv/projet# Récursifsudo chown -R www-data:www-data /var/www# Ne changer que les répertoires (ou fichiers)sudo chown -R --reference=/var/www /srv/mon_site# Utilise les mêmes propriétaires que /var/wwwLes ACL permettent d'attribuer des permissions à plusieurs utilisateurs ou groupes sur un même fichier, au-delà du schéma classique propriétaire/groupe/autres.
# Sur la plupart des distributions modernes, c'est actif par défaut# Vérifie la présence de 'acl' dans /etc/fstabmount | grep aclgetfacl /srv/partage/fichier.txt# # owner: david# # group: developpeurs# user::rwx# group::r-x# other::---# user:alice:rwx# group:admins:rw-# Donner à un utilisateur spécifiques l'accès read+writesudo setfacl -m u:alice:rw /srv/partage/fichier.txt# Donner à un groupe l'accès read-onlysudo setfacl -m g:admins:rx /srv/partage/fichier.txt# Appliquer par défaut à tout nouveau fichier dans un répertoiresudo setfacl -m d:u:alice:rw /srv/partage/# d: = default, s'applique aux fichiers créés après# Retirer une règle ACLsudo setfacl -x u:alice /srv/partage/fichier.txtsudo setfacl -x g:admins /srv/partage/fichier.txtQuand des ACL sont actives, un + apparaît dans ls -l :
ls -l /srv/partage/fichier.txt# -rw-rw-r--+ 1 david developpeurs 1234 /srv/partage/fichier.txtLe mask ACL limite les permissions maximales accordées via ACL. Même si tu donnes rwx à alice, le mask peut les réduire.
# Voir le maskgetfacl /srv/partage/fichier.txt | grep mask# Modifier le masksudo setfacl -m m::r-- /srv/partage/fichier.txt# Résultat : alice ne pourra plus écrire même si son ACL dit rw# Le serveur web (www-data) doit lire les fichiers# L'admin (david) doit pouvoir écriresudo chown -R david:www-data /var/www/monsitesudo chmod -R 2755 /var/www/monsite# Les fichiers appartiennent à david:www-data# SGID : tout nouveau fichier appartient au groupe www-data# www-data peut lire, david peut lire ET écriremkdir /srv/equipesudo chown :equipe /srv/equipesudo chmod 3770 /srv/equipe# 3 = SGID (fichiers dans le groupe 'equipe')# 7 = rwx pour le owner# 7 = rwx pour le groupe# 0 = rien pour les autres# Ajouter alice avec ACLsudo setfacl -m u:alice:rx /srv/equipe# 1. Qui est le propriétaire et le groupe ?ls -la /chemin/vers/fichier# 2. Vérifier les ACLgetfacl /chemin/vers/fichier# 3. En tant qu'utilisateur, quels droits réels ?id#groups# 4. Lister les permissions SUID sur le systèmesudo find / -perm -4000 -type f 2>/dev/null# 5. Qui peut écrire dans un répertoire ?sudo find /srv/partage -maxdepth 1 -type d -exec ls -ld {} \;| Commande | Usage |
|---|---|
chmod 755 fichier | Définir permissions en octal |
chmod u+x fichier | Ajouter exécution au propriétaire |
chmod 4755 fichier | Poser le bit SUID |
chmod 2775 repertoire | Poser le bit SGID sur répertoire |
chmod +t /tmp | Poser le sticky bit |
chown user:group fichier | Changer propriétaire et groupe |
chgrp group fichier | Changer le groupe |
setfacl -m u:alice:rw fichier | ACL : donner droits à alice |
getfacl fichier | Voir toutes les ACL d'un fichier |
setfacl -m d:u:alice:rw rep | ACL par défaut sur répertoire |