Meilleures pratiques pour sécuriser les systèmes de fichiers Linux avec des permissions spéciales

Maîtrisez la sécurité du système de fichiers Linux en tirant parti des permissions spéciales : SUID, SGID et le Sticky Bit. Ce guide explique comment appliquer ces modes en toute sécurité en utilisant la notation octale pour appliquer le contexte d'exécution, assurer l'héritage de groupe dans les dossiers partagés et empêcher la suppression non autorisée de fichiers dans des répertoires tels que /tmp, en fournissant des exemples pratiques pour le durcissement du système.

40 vues

Meilleures pratiques pour sécuriser les systèmes de fichiers Linux avec des permissions spéciales

Les permissions de fichiers Linux constituent le fondement de la sécurité du système, contrôlant qui peut lire, écrire et exécuter des fichiers. Bien que les permissions standard de lecture/écriture/exécution (rwx) soient fondamentales, Linux introduit des bits de permission spéciale—SUID, SGID et le Sticky Bit—pour gérer le contexte d'exécution et l'intégrité des ressources partagées. La maîtrise de ces permissions permet aux administrateurs d'accorder des capacités élevées spécifiques en toute sécurité, assurant la fonctionnalité nécessaire tout en minimisant les risques de sécurité.

Ce guide explore en profondeur l'application pratique et les implications de sécurité du Set User ID (SUID), du Set Group ID (SGID) et du Sticky Bit. Comprendre quand et comment déployer ces fonctionnalités est crucial pour maintenir l'efficacité opérationnelle sans compromettre la posture de sécurité globale de votre environnement Linux.

Récapitulatif de la compréhension des permissions standard

Avant d'explorer les permissions spéciales, il est essentiel de se souvenir de la notation standard par triplet (rwx pour le propriétaire, le groupe et les autres). Ces permissions sont représentées numériquement à l'aide de valeurs octales (par exemple, 755 ou 644).

  • r (Lecture) = 4
  • w (Écriture) = 2
  • x (Exécution) = 1

Les permissions spéciales modifient ce comportement de base et sont représentées par un quatrième chiffre octal principal (4, 2 ou 1).

Les Permissions Spéciales : SUID, SGID et le Sticky Bit

Les permissions spéciales ajoutent des fonctionnalités au-delà du contrôle d'accès standard. Elles sont généralement indiquées dans la sortie de la liste longue (ls -l) par un s ou un t remplaçant l'indicateur standard x.

Permission Valeur Octale Effet
SUID (Set User ID) 4 Le fichier s'exécute avec les permissions du propriétaire du fichier (et non de l'utilisateur qui l'exécute).
SGID (Set Group ID) 2 Le fichier s'exécute avec les permissions du groupe du fichier, ou les nouveaux fichiers héritent de l'ID de groupe du répertoire parent.
Sticky Bit 1 Empêche les utilisateurs de supprimer ou de renommer les fichiers appartenant à d'autres utilisateurs dans un répertoire partagé, même s'ils disposent de la permission d'écriture sur le répertoire.

1. Set User ID (SUID)

Le bit SUID est puissant et potentiellement dangereux s'il est mal utilisé. Lorsqu'il est défini sur un fichier exécutable, tout utilisateur exécutant ce fichier exécute le processus avec les permissions du propriétaire.

Cas d'utilisation pratique : Utilitaires qui nécessitent des privilèges root pour effectuer une tâche spécifique, mais qui ne doivent pas accorder un accès root général à l'utilisateur.

Exemple : SUID sur /usr/bin/passwd

La commande /usr/bin/passwd nécessite généralement un accès root pour modifier le fichier sécurisé /etc/shadow. Elle a le bit SUID défini, permettant à un utilisateur standard d'obtenir temporairement les privilèges du propriétaire (root) uniquement pendant la durée de l'exécution de passwd pour changer son propre mot de passe.

Visualisation du SUID : Notez le s dans l'emplacement d'exécution du propriétaire :

ls -l /usr/bin/passwd
# Exemple de sortie : -rwsr-xr-x 1 root root ... /usr/bin/passwd

Configuration du SUID : Utilisez la valeur octale 4 combinée aux permissions standard (par exemple, 755 devient 4755) :

# En supposant que 'my_script' appartient à 'appuser'
chmod 4755 /path/to/my_script

Avertissement de sécurité pour SUID : Ne définissez jamais le bit SUID sur des shells à usage général (comme /bin/bash) ou sur des scripts qui interprètent une entrée externe, car cela accorderait un accès root illimité à quiconque exécute le fichier.

2. Set Group ID (SGID)

Le bit SGID a deux fonctions principales selon qu'il est appliqué à un fichier ou à un répertoire.

A. SGID sur les fichiers exécutables

Lorsqu'il est défini sur un fichier exécutable, le processus s'exécute avec les permissions associées à la propriété de groupe du fichier, et non avec le groupe principal de l'utilisateur.

B. SGID sur les répertoires (crucial pour les environnements partagés)

Lorsqu'il est défini sur un répertoire, tout nouveau fichier ou sous-répertoire créé à l'intérieur hérite automatiquement de la propriété de groupe du répertoire parent, plutôt que du groupe principal de l'utilisateur qui a créé le nouveau fichier.

Cas d'utilisation pratique : Dossiers de projet partagés où tous les contributeurs doivent disposer d'un accès de groupe unifié pour la collaboration.

Configuration du SGID sur un répertoire : Utilisez la valeur octale 2 combinée aux permissions standard (par exemple, 775 devient 2775) :

# Définir la propriété de groupe sur 'developers' et activer le SGID
chgrp developers /srv/shared_project
chmod 2775 /srv/shared_project

3. Le Sticky Bit

Le Sticky Bit (ou attribut « Save Text ») est utilisé presque exclusivement sur les répertoires partagés pour contrôler la suppression des fichiers.

Lorsque le Sticky Bit est défini sur un répertoire, seul le propriétaire d'un fichier dans ce répertoire, ou l'utilisateur root, peut supprimer ou renommer ce fichier, même si le répertoire lui-même autorise l'accès en écriture pour les 'autres' (o+w).

Cas d'utilisation pratique : Répertoires partagés publics comme /tmp ou dossiers de téléchargement de département où les utilisateurs ne devraient pouvoir gérer que les fichiers qu'ils ont créés.

Exemple : Le répertoire /tmp

Le répertoire /tmp a souvent des permissions comme 1777. Le 1 indique que le Sticky Bit est actif.

ls -ld /tmp
# Exemple de sortie : drwxrwxrwt 15 root root 4096 Mar 10 11:30 /tmp

Le t à la fin confirme que le sticky bit est défini. Sans cela, n'importe quel utilisateur pourrait supprimer des fichiers créés par d'autres utilisateurs dans /tmp.

Configuration du Sticky Bit : Utilisez la valeur octale 1 combinée aux permissions standard (par exemple, 777 devient 1777) :

chmod 1777 /var/public_uploads

Gestion Complète : Combinaison des Permissions Spéciales

Les permissions spéciales sont souvent combinées. Le quatrième chiffre principal est la somme des bits spéciaux souhaités (4+2+1 = 7).

Permissions Souhaitées Valeur Octale
Standard rwxr-xr-x (755) 755
SUID + rwxr-xr-x 4755
SGID + rwxr-xr-x 2755
Sticky Bit + rwxrwxrwx 1777
SUID + SGID + Sticky Bit + rwx (Rarement nécessaire) 7777

Exemple de combinaison SGID et Sticky Bit pour les dossiers partagés :

Pour créer un répertoire de collaboration partagé et sécurisé où tous les utilisateurs font partie du groupe 'team', où les nouveaux fichiers héritent du groupe 'team', et où les utilisateurs ne peuvent pas supprimer les fichiers des autres :

  1. Définir la propriété de groupe : chgrp team /data/projectX
  2. Appliquer SGID (2) + Standard rwx (7) + Sticky Bit (1) $\rightarrow 2+1 = 3$ pour les bits spéciaux.
    • En utilisant la somme explicite : SGID (2) + Sticky Bit (1) = 3. Permissions standard 775.
    • Commande totale : chmod 3775 /data/projectX

Lors de la visualisation : drwxrwxrw t (ou drwxrwsrw t si le bit de groupe était également utilisé pour l'exécution).

Meilleures Pratiques pour la Sécurité des Permissions Spéciales

En raison des privilèges élevés qu'accordent SUID et SGID, ils doivent être gérés avec une extrême prudence.

  1. Limiter la portée du SUID : Ne définissez SUID que sur les exécutables binaires compilés qui sont nécessaires aux opérations standard (comme passwd, ping). N'appliquez jamais SUID aux scripts interprétés (Shell, Python, Perl), sauf s'ils sont enveloppés dans un exécutable wrapper sécurisé qui valide l'entrée.
  2. Audit Régulier : Analysez périodiquement le système de fichiers à la recherche de fichiers SUID/SGID inhabituels à l'aide de la commande find :
    bash # Trouver tous les fichiers avec SUID défini find / -perm /4000 2>/dev/null # Trouver tous les fichiers avec SGID défini find / -perm /2000 2>/dev/null
  3. Utiliser SGID pour la cohérence des groupes : Préférez SGID à la gestion manuelle de la propriété de groupe de fichiers dans les structures de données partagées ; cela automatise l'héritage de groupe.
  4. Sticky Bit pour les zones publiques inscriptibles : Le Sticky Bit est essentiel pour tout répertoire destiné à un usage général par les utilisateurs où la suppression par des non-propriétaires doit être limitée (par exemple, /tmp, /var/tmp).

En utilisant le SUID avec prudence pour les tâches élevées requises, le SGID pour une gestion cohérente des groupes et le Sticky Bit pour l'intégrité des répertoires partagés, les administrateurs peuvent construire un environnement de système de fichiers Linux hautement fonctionnel mais solidement sécurisé.