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.