Présentation
SELinux (Security-Enhanced Linux) est une architecture de sécurité pour Linux® qui permet aux équipes d'administration de mieux contrôler les accès aux systèmes. Cette architecture a initialement été conçue par la NSA, l'agence de sécurité nationale des États-Unis, comme une série de correctifs pour le noyau Linux sur la base de la structure LSM (Linux Security Modules).
SELinux a été distribué à la communauté Open Source en 2000, puis intégré à la version en amont du noyau Linux en 2003.
Fonctionnement
SELinux définit les contrôles d'accès pour les applications, processus et fichiers d'un système. Il utilise des politiques de sécurité, c'est-à-dire des ensembles de règles qui lui indiquent ce à quoi un utilisateur peut accéder ou non, pour mettre en application les autorisations d'accès définies par une politique.
Lorsqu'un sujet (une application ou un processus) envoie une requête pour accéder à un objet, par exemple un fichier, SELinux consulte un cache AVC (Access Vector Cache) où sont temporairement stockées les autorisations d'accès pour les différents sujets et objets.
Si SELinux n'est pas en mesure de prendre une décision relative à l'accès en se basant sur les autorisations stockées dans le cache AVC, il envoie une requête au serveur de sécurité. Ce dernier recherche alors le contexte de sécurité de l'application ou du processus et du fichier. Le contexte de sécurité est appliqué depuis la base de données de politiques SELinux. L'autorisation est ensuite accordée ou refusée.
En cas de refus, un message « avc: denied » s'affiche dans le répertoire /var/log.messages.
Configuration
Il existe différentes façons de configurer SELinux pour protéger un système. La politique ciblée et la politique de sécurité à plusieurs niveaux (MLS) sont les méthodes les plus couramment utilisées.
La politique ciblée est l'option par défaut. Elle couvre un certain nombre de processus, tâches et services. La politique MLS peut être très complexe et n'est donc généralement utilisée que par les organismes gouvernementaux.
Pour consulter la liste des processus qui doivent s'exécuter sur un système, il suffit d'ouvrir le fichier /etc/sysconfig/selinux. Ce fichier comprend une section qui indique le mode de SELinux : « permissive » (permissif), « enforcing » (exécutoire) ou « disabled » (désactivé). Le type de politique devant être chargée est également indiqué.
Étiquetage et application de types
L'application de types et l'étiquetage sont les principaux concepts de SELinux.
SELinux fonctionne comme un système d'étiquetage : chaque fichier, processus et port du système possède une étiquette SELinux. Les étiquettes offrent un moyen logique de regrouper plusieurs éléments. Le noyau gère les étiquettes lors du démarrage.
Elles sont rédigées au format suivant : user:role:type:level (l'élément « level » est facultatif). Les éléments « user », « role » et « level » sont utilisés pour des mises en œuvre de SELinux plus complexes, à l'instar de la politique MLS. Le type d'étiquette est essentiel pour la politique ciblée.
SELinux utilise l'application de types pour appliquer une politique définie sur le système. Le système détermine ainsi si un processus qui est exécuté est autorisé à accéder à un fichier étiqueté, en fonction de leurs types respectifs.
Activation
Si SELinux est désactivé dans l'environnement, il peut être activé dans le fichier /etc/selinux/config avec le paramètre « SELINUX=permissive ». Il vaut mieux éviter de passer immédiatement en mode exécutoire. En effet, comme SELinux n'était pas activé, certains éléments du système ne sont sans doute pas étiquetés correctement, ce qui pourrait empêcher le démarrage.
Il est possible d'obliger le système à ré-étiqueter le système de fichiers automatiquement en créant un fichier vide nommé .autorelabel dans le répertoire root avant de redémarrer. Si le système présente un trop grand nombre d'erreurs, un redémarrage en mode permissif est nécessaire pour que le démarrage aboutisse. Une fois tous les éléments ré-étiquetés, SELinux doit être défini en mode exécutoire dans le fichier /etc/selinux/config avec le paramètre SELINUX=enforcing, puis être redémarré. Il est également possible d'exécuter directement la commande « setenforce 1 ».
Pour les administrateurs système peu habitués à l'interface en ligne de commande, il existe des outils graphiques qui permettent de gérer SELinux.
SELinux fournit une couche de sécurité supplémentaire pour les systèmes, qui est intégrée aux distributions Linux. Il est recommandé de ne pas la désactiver pour qu'elle protège le système en cas d'attaque.
Ressources Red Hat
Contrôle d'accès discrétionnaire et contrôle d'accès obligatoire
Les systèmes Linux et UNIX utilisent généralement le contrôle d'accès discrétionnaire (ou DAC). SELinux est un exemple de système de contrôle d'accès obligatoire (ou MAC) pour Linux.
Dans le cadre du contrôle d'accès discrétionnaire, les fichiers et processus ont des propriétaires. Le propriétaire d'un fichier peut être un utilisateur, un groupe ou tout autre intervenant. Les utilisateurs ont la possibilité de modifier les autorisations d'accès à leurs propres fichiers.
Avec un système DAC, l'utilisateur root dispose d'un contrôle d'accès total. Avec un accès root, il est possible d'accéder aux fichiers de tous les utilisateurs et de réaliser tout type d'action sur le système.
En revanche, sur les systèmes de type MAC tels que SELinux, des politiques d'accès sont définies par l'administrateur. Même si les paramètres du système DAC sont modifiés au niveau du répertoire principal, la sécurité du système sera préservée grâce à une politique SELinux mise en place pour empêcher d'autres utilisateurs ou processus d'accéder au répertoire.
Les politiques SELinux permettent de gérer les accès de manière spécifique et couvrent un grand nombre de processus. Des modifications peuvent être apportées avec SELinux pour limiter l'accès entre utilisateurs, fichiers, répertoires, etc.
Gestion des erreurs
Lorsque SELinux renvoie une erreur, c'est qu'une anomalie doit être corrigée. Le plus souvent, il s'agit de l'un des quatre problèmes suivants :
- Les étiquettes sont erronées. Si l'étiquetage est incorrect, les outils disponibles doivent être utilisés pour corriger les étiquettes.
- Une politique doit être réparée. Dans ce cas, il peut être nécessaire d'informer SELinux d'une modification qui a été effectuée ou d'ajuster une politique. Ce problème peut être résolu à l'aide de variables booléennes ou des modules de la politique.
- Il y a un bogue dans la politique. La politique peut présenter un bogue qui nécessite une intervention.
- Le système a été infiltré. Même si SELinux protège les systèmes dans de nombreux scénarios, il est toujours possible que l'intégrité d'un système soit compromise. Si tel est le cas, il convient d'agir immédiatement.
Définition des variables booléennes
Les variables booléennes sont des paramètres de type activer/désactiver pour les fonctionnalités de SELinux. Des centaines de paramètres peuvent activer ou désactiver les capacités de SELinux, et un grand nombre d'entre eux sont prédéfinis. Pour trouver les variables booléennes déjà paramétrées dans le système, il est possible d'exécuter la commande « getsebool -a ».
Nos solutions
Red Hat Enterprise Linux est la première plateforme Linux Open Source au monde. Elle permet de réduire les risques, d'appliquer les configurations et politiques de sécurité ainsi que de rationaliser les stratégies de mise en conformité.
Les rôles système de Red Hat Enterprise Linux sont un ensemble de rôles Ansible® pris en charge qui assurent des workflows cohérents, capables de simplifier l'exécution des tâches manuelles. Ces rôles aident à automatiser les workflows de sécurité et à maintenir la cohérence sur l'ensemble des systèmes au fil du temps, et ce, avec très peu de ressources. Ils permettent également de rationaliser la gouvernance et les exigences de conformité. Enfin, ils simplifient le déploiement et la gestion de SELinux. Voici les possibilités ainsi offertes :
- Définir les modes permissif et exécutoire pour SELinux afin de garantir la cohérence des contrôles
- Personnaliser les booléens de politiques SELinux, les contextes de fichier, les ports et les identifiants selon les besoins
- Recourir au rôle système pour réconcilier les contextes de fichier sur des fichiers ou répertoires spécifiés
Red Hat Enterprise Linux 10
Découvrez comment Red Hat Enterprise Linux 10 permet de relever les défis informatiques les plus urgents, tels que la sécurité post-quantique ou le manque de professionnels qui maîtrisent Linux.