SELinux : Histoire, Aperçu Technique et Applications Réelles

Brève Histoire de SELinux

Security-Enhanced Linux (SELinux) est un ensemble de modifications du noyau et d’outils en espace utilisateur qui renforcent la sécurité du système d’exploitation Linux. SELinux a été initialement développé par la National Security Agency (NSA) des États-Unis en tant que projet de recherche pour démontrer les avantages des contrôles d’accès obligatoires (MAC). Il a été publié en open source en décembre 2000, puis intégré dans diverses distributions Linux, telles que Fedora, CentOS et Red Hat Enterprise Linux.

L’objectif principal de SELinux est de fournir un mécanisme pour appliquer des politiques de contrôle d’accès strictes qui limitent ce que les utilisateurs et les programmes peuvent faire, réduisant ainsi les dommages potentiels dus aux vulnérabilités et aux attaques malveillantes.

Aperçu Technique de SELinux

SELinux fonctionne sur le principe des contrôles d’accès obligatoires (MAC), où les politiques de sécurité sont définies par l’administrateur système et appliquées par le noyau. Cela contraste avec les contrôles d’accès discrétionnaires (DAC) traditionnels, où les utilisateurs contrôlent les permissions de leurs propres fichiers et processus.

Concepts et Composants Clés
  • Contextes de Sécurité : Chaque objet (fichier, processus, port réseau, etc.) dans un système avec Security-Enhanced Linux activé a un contexte de sécurité, qui est une étiquette comprenant un utilisateur, un rôle, un type et parfois un niveau. Ces étiquettes déterminent les permissions associées à l’objet.
  • Politiques : Les politiques SELinux sont un ensemble de règles définissant comment les contextes peuvent interagir. Les politiques sont appliquées par le noyau et définissent quels types d’accès sont autorisés pour différents types d’objets et de sujets.
  • Modes : SELinux fonctionne en trois modes :
  • Enforcing : Les politiques Security-Enhanced Linux sont appliquées et les actions non autorisées sont bloquées.
  • Permissive : Les politiques SELinux ne sont pas appliquées, mais les violations sont enregistrées pour audit.
  • Disabled : SELinux est totalement désactivé.
Commandes Courantes
  • getenforce : Vérifier le mode actuel de Security-Enhanced Linux.
  • setenforce [Enforcing|Permissive] : Changer le mode de SELinux.
  • sestatus : Afficher l’état et la configuration de SELinux.
  • ls -Z et ps -Z : Afficher les contextes SELinux des fichiers et des processus.
  • chcon : Changer le contexte SELinux d’un fichier ou d’un répertoire.
  • semanage : Gérer les paramètres des politiques SELinux.

Scénarios et Exemples Réels

Comprendre Security-Enhanced Linux peut être plus facile lorsqu’on le voit en action. Voici dix scénarios réels démontrant comment SELinux renforce la sécurité du système :

1. Protection du Serveur Web

Scénario : Exécuter un serveur web Apache. Rôle de SELinux : Restreint Apache pour qu’il n’accède qu’à ses répertoires spécifiques, l’empêchant de lire ou d’écrire dans d’autres parties du système de fichiers. Exemple : Apache peut lire depuis /var/www/html mais pas depuis /home/user.

2. Sécurité de la Base de Données

Scénario : Exploiter un serveur de base de données MySQL. Rôle de SELinux : Assure que le démon MySQL ne peut accéder qu’à ses répertoires de données et fichiers journaux désignés. Exemple : MySQL peut accéder à /var/lib/mysql mais pas à /etc/passwd.

3. Isolement du Serveur de Messagerie

Scénario : Exécuter un serveur de messagerie Postfix. Rôle de SELinux : Contraint les processus Postfix à n’accéder qu’aux fichiers et répertoires nécessaires aux opérations de messagerie. Exemple : Postfix peut écrire dans /var/spool/mail mais ne peut pas accéder à /etc/shadow.

4. Gestion du Serveur FTP

Scénario : Exploiter un serveur FTP. Rôle de SELinux : Contrôle les répertoires que le serveur FTP peut lire et écrire, réduisant le risque d’accès non autorisé aux données. Exemple : Le serveur FTP peut accéder à /srv/ftp mais est restreint depuis /root.

5. Protection des Fichiers Utilisateur

Scénario : Plusieurs utilisateurs se connectent au système. Rôle de SELinux : Assure que les utilisateurs ne peuvent pas accéder aux fichiers ou processus des autres, fournissant une isolation stricte des utilisateurs. Exemple : L’utilisateur alice ne peut pas lire les fichiers dans le répertoire de l’utilisateur bob.

6. Protection des Fichiers de Configuration des Services

Scénario : Configurer divers services comme Nginx, SSH, etc. Rôle de SELinux : Assure que chaque service ne peut accéder qu’à ses propres fichiers de configuration, empêchant les modifications non autorisées. Exemple : Nginx peut lire /etc/nginx/nginx.conf mais pas /etc/ssh/sshd_config.

7. Bac à Sable pour Application

Scénario : Exécuter une application potentiellement risquée. Rôle de SELinux : Contient l’application dans un bac à sable avec des permissions très restreintes, minimisant l’impact de toute vulnérabilité au sein de l’application. Exemple : Une application ne peut accéder qu’à son propre répertoire dans /opt/app et ne peut pas accéder aux ressources réseau ou aux fichiers des utilisateurs.

8. Restrictions des Services Réseau

Scénario : Limiter les services réseau à des opérations spécifiques. Rôle de SELinux : Applique que les services réseau utilisent uniquement les ports et protocoles autorisés, réduisant le risque de communication réseau non autorisée. Exemple : Un serveur DNS ne peut utiliser que le port 53 et ne peut pas initier de connexions réseau sortantes.

9. Protection des Journaux

Scénario : Assurer l’intégrité et la confidentialité des journaux système. Rôle de SELinux : Restreint les processus pouvant lire ou écrire les fichiers journaux, protégeant les journaux contre l’accès non autorisé ou la falsification. Exemple : Seul le démon de journalisation peut écrire dans /var/log/messages, et aucun autre processus ne peut lire ce fichier.

10. Contrôle d’Accès aux Périphériques

Scénario : Contrôler l’accès aux périphériques matériels. Rôle de SELinux : Applique quels processus peuvent accéder à des périphériques spécifiques comme les ports USB, les imprimantes, etc. Exemple : Seul le démon d’impression peut accéder au périphérique d’imprimante /dev/usb/lp0, et aucun autre processus ne peut interagir avec ce périphérique.

Conclusion

SELinux est un mécanisme de sécurité puissant qui offre un cadre robuste pour appliquer des politiques de contrôle d’accès sur les systèmes Linux. En comprenant son histoire, ses composants techniques et ses applications réelles, les administrateurs système peuvent tirer parti de Security-Enhanced Linux pour renforcer la posture de sécurité de leurs environnements, assurant ainsi une infrastructure plus sécurisée et résiliente. Que vous protégiez des serveurs web, des bases de données ou des données utilisateurs, SELinux offre une solution versatile et efficace pour atténuer les menaces de sécurité potentielles.