Connexion / Inscription Account

Linux

Qu'est-ce que SELinux ?

SELinux (Security-Enhanced Linux) est une architecture de sécurité pour systèmes Linux® qui permet aux administrateurs de mieux contrôler les accès au système. 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 l'an 2000 et intégré à la version en amont du noyau Linux en 2003.


Comment fonctionne SELinux ?

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 indiquent à SELinux 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é. Celui-ci recherche alors le contexte de sécurité de l'application ou du processus et du fichier. Puis le contexte de sécurité est appliqué depuis la base de données de politiques SELinux. L'autorisation d'accès est ensuite accordée ou refusée.

En cas de refus, le message « avc: denied » apparaît dans le fichier /var/log.messages.

Configuration de SELinux

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. Elle est donc généralement utilisée uniquement 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 (appliqué) ou Disabled (désactivé). Le type de politique qui devrait être chargée est également indiqué.

Étiquetage et application de types dans SELinux

L'application de types et l'étiquetage sont les principaux concepts de SELinux.

SELinux fonctionne comme un système d'étiquetage : chaque fichier, chaque processus et chaque port du système possède une étiquette SELinux. Les étiquettes constituent un moyen logique de regrouper plusieurs éléments. Le noyau gère les étiquettes lors du démarrage.

Les étiquettes sont rédigées au format suivant : user:role:type:level (utilisateur:rôle:type:niveau, où le niveau 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. L'application de types est l'élément de la politique SELinux qui détermine si un processus qui est exécuté avec un type donné est autorisé à accéder à un fichier étiqueté avec un type donné.

Activation de SELinux

Si SELinux est désactivé dans votre environnement, vous pouvez l'activer dans le fichier /etc/selinux/config avec le paramètre SELINUX=permissive. Il vaut mieux éviter de passer immédiatement en mode appliqué. En effet, comme SELinux n'était pas activé, certains éléments du système ne sont probablement pas étiquetés correctement, ce qui pourrait empêcher le démarrage.

Vous pouvez 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, vous devez redémarrer en mode permissif pour que le démarrage aboutisse. Une fois tous les éléments ré-étiquetés, passez SELinux en mode appliqué dans le fichier /etc/selinux/config avec le paramètre SELINUX=enforcing, puis redémarrez. Vous pouvez également directement exécuter la commande setenforce 1.

Pour les administrateurs système peu habitués aux lignes de commande, il existe des outils graphiques à utiliser pour la gestion de SELinux.

SELinux fournit une couche de sécurité supplémentaire pour votre système, qui est intégrée aux distributions Linux. Il est recommandé de ne pas le désactiver pour qu'il protège votre système en cas d'attaque.


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 autre, c'est-à-dire n'importe qui d'autre. 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. Si vous disposez d'un accès root, vous pouvez accéder aux fichiers de n'importe quel utilisateur ou faire ce que vous voulez 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 de votre 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. Vous pouvez apporter des modifications avec SELinux pour limiter l'accès entre utilisateurs, fichiers, répertoires et plus encore.


Gestion des erreurs dans SELinux

Lorsque SELinux renvoie une erreur, c'est qu'il y a une anomalie à corriger. Le plus souvent, il s'agit de l'un des quatre problèmes suivants :

  1. Les étiquettes sont erronées. Si l'étiquetage est incorrect, vous pouvez utiliser les outils à disposition pour rétablir les étiquettes.
  2. Une politique doit être réparée. Ceci peut signifier que vous devez informer SELinux d'une modification que vous avez effectuée, ou que vous devez ajuster une politique. Vous pouvez résoudre ce problème à l'aide de variables booléennes ou des modules de la politique.
  3. Il y a un bogue dans la politique. La politique peut présenter un bogue qui nécessite une intervention.
  4. Le système a été infiltré. Même si SELinux peut protéger vos systèmes dans de nombreux cas, il est toujours possible que l'intégrité d'un système soit compromise. Si vous suspectez que c'est le cas, agissez immédiatement.

Que sont les 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 votre système, vous pouvez exécuter la commande getsebool -a.

Vous ne savez pas encore tout sur Linux...