Linux sans magie #12 — SUID, SGID et Sticky Bit : quand rwx ne suffit plus
Comprendre les permissions spéciales Linux SUID, SGID et Sticky Bit, leur notation octale, leurs usages concrets et les risques de sécurité associés.
Vous connaissez probablement les permissions Linux classiques :
rwxr-xr-x
Lecture, écriture, exécution. Propriétaire, groupe, autres.
Mais vous avez peut-être déjà rencontré ceci :
-rwsr-xr-x
drwxrwsr-x
drwxrwxrwt
D'où viennent ces s et ce t ?
Linux dispose de trois bits de mode spéciaux : SUID, SGID et Sticky Bit. Ils ajoutent un comportement particulier aux permissions classiques.
Objectif
À la fin de cet article, vous saurez :
- reconnaître SUID, SGID et Sticky Bit avec
ls -l; - comprendre leurs usages principaux ;
- les appliquer avec
chmod; - lire leur notation octale ;
- identifier les principaux risques de sécurité.
1. SUID : exécuter avec l'identité effective du propriétaire
Regardons une commande courante :
ls -l /usr/bin/passwd
Selon la distribution, vous pourrez observer quelque chose ressemblant à :
-rwsr-xr-x 1 root root ... /usr/bin/passwd
Le s à la place du x du propriétaire indique le SUID — Set User ID.
Pourquoi est-il utile ?
Un utilisateur ordinaire peut modifier son propre mot de passe avec :
passwd
Pour réaliser certaines opérations protégées, l'exécutable doit disposer de privilèges supérieurs à ceux de l'utilisateur qui le lance.
Lorsqu'un fichier exécutable possède le bit SUID, son exécution peut faire prendre au processus l'effective user ID du propriétaire du fichier.
Cela ne signifie pas que l'utilisateur « devient root ». Cela signifie que ce processus précis s'exécute avec l'identité effective du propriétaire du fichier pour les opérations concernées.
2. Activer le SUID
Sur un exécutable :
chmod u+s programme
ou en notation octale :
chmod 4755 programme
Le 4 placé devant les permissions classiques représente le SUID.
Vérification :
ls -l programme
On pourra obtenir :
-rwsr-xr-x
Sécurité
Un exécutable SUID appartenant à root constitue une surface de sécurité sensible. Une vulnérabilité dans un tel programme peut faciliter une élévation de privilèges.
Le bon réflexe est donc de ne jamais ajouter le SUID simplement pour contourner un problème de permissions.
3. SGID : deux comportements à connaître
Le SGID — Set Group ID utilise la valeur octale 2.
Son comportement dépend du type d'objet.
Sur un exécutable
chmod g+s programme
ou :
chmod 2755 programme
Lors de l'exécution, le processus peut prendre comme effective group ID le groupe propriétaire du fichier.
Sur un répertoire
C'est un usage très courant pour les répertoires collaboratifs.
Imaginons :
mkdir /srv/projet
chgrp formateurs /srv/projet
chmod 2775 /srv/projet
Puis :
ls -ld /srv/projet
Vous pourrez obtenir :
drwxrwsr-x root formateurs ... /srv/projet
Le s apparaît dans la zone des permissions du groupe.
Avec le SGID sur un répertoire, les nouveaux fichiers créés à l'intérieur héritent du group ID du répertoire parent. Les nouveaux sous-répertoires héritent également du SGID.
C'est particulièrement utile pour conserver un groupe cohérent dans un espace de travail partagé.
4. Sticky Bit : protéger les entrées d'un répertoire partagé
Regardons maintenant /tmp :
ls -ld /tmp
Vous rencontrerez généralement :
drwxrwxrwt ... /tmp
Le dernier caractère est un t. C'est le Sticky Bit.
Un répertoire tel que /tmp doit permettre à de nombreux utilisateurs de créer des fichiers. Le Sticky Bit ajoute une restriction importante : dans un tel répertoire, une entrée ne peut normalement être supprimée ou renommée que par le propriétaire du fichier, le propriétaire du répertoire ou un processus disposant des privilèges appropriés.
Le Sticky Bit ne protège donc pas, à lui seul, la lecture ou la modification du contenu du fichier. Il agit principalement sur la suppression et le renommage des entrées dans le répertoire.
Activation :
chmod +t repertoire
ou :
chmod 1777 repertoire
Le 1 représente le Sticky Bit.
5. Pourquoi 4, 2 et 1 ?
Les bits spéciaux utilisent eux aussi une représentation numérique :
| Permission spéciale | Valeur |
|---|---|
| SUID | 4 |
| SGID | 2 |
| Sticky Bit | 1 |
Ils peuvent être combinés.
Par exemple :
chmod 3770 repertoire
Le premier chiffre 3 correspond à :
2 + 1
soit :
SGID + Sticky Bit
Les trois chiffres suivants restent les permissions classiques du propriétaire, du groupe et des autres.
6. s, S, t et T
Linux peut afficher :
s
S
t
T
La casse est significative.
Par exemple :
-rwsr-xr-x
Le s indique que le SUID est positionné et que le bit d'exécution du propriétaire est également présent.
À l'inverse :
-rwSr-xr-x
Le S majuscule indique que le SUID est positionné mais que le bit d'exécution correspondant ne l'est pas.
Même logique pour t et T avec le Sticky Bit et le bit d'exécution des autres.
7. Rechercher les fichiers SUID et SGID
Pour rechercher les fichiers réguliers possédant le SUID :
find / -type f -perm -4000 2>/dev/null
Pour les fichiers réguliers possédant le SGID :
find / -type f -perm -2000 2>/dev/null
Ces commandes sont utiles lors d'un audit de sécurité.
La présence d'un fichier SUID ou SGID n'est pas automatiquement anormale. En revanche, tout exécutable inattendu possédant ces bits mérite d'être analysé.
Petit lab
Créons un répertoire de test dans votre répertoire personnel :
mkdir -p ~/linux-sans-magie-special-bits
cd ~/linux-sans-magie-special-bits
Créons un répertoire partagé :
mkdir partage
chmod 1777 partage
ls -ld partage
Vous devriez voir un t en fin de permissions.
Puis testez le SGID sur un autre répertoire :
mkdir equipe
chmod 2775 equipe
ls -ld equipe
Vous devriez voir un s dans la zone du groupe.
L'objectif ici est d'observer les bits spéciaux sans modifier des fichiers système.
Nettoyage / rollback
Pour supprimer le lab :
cd
rm -rf ~/linux-sans-magie-special-bits
Aucune permission système n'a été modifiée.
À retenir
Les bits spéciaux ne remplacent pas rwx. Ils ajoutent un comportement supplémentaire.
SUID (4) : sur un exécutable, il peut faire prendre au processus l'effective user ID du propriétaire du fichier.
SGID (2) : sur un exécutable, il agit sur l'effective group ID ; sur un répertoire, il permet notamment l'héritage du groupe.
Sticky Bit (1) : sur un répertoire partagé, il limite principalement qui peut supprimer ou renommer les entrées qu'il contient.
C'est pourquoi :
-rwsr-xr-x
drwxrwsr-x
drwxrwxrwt
ne sont pas des bizarreries de ls -l.
Chaque caractère décrit un comportement précis du système.
Et comme souvent sous Linux, une fois qu'on comprend ce que les caractères veulent dire, il n'y a plus de magie.
