Chapitre 1. Démarrer avec SELinux
Security Enhanced Linux (SELinux) fournit une couche supplémentaire de sécurité du système. SELinux répond fondamentalement à la question : May <subject> do <action> to <object>? par exemple : May a web server access files in users' home directories?
1.1. Introduction à SELinux
La politique d'accès standard basée sur l'utilisateur, le groupe et d'autres autorisations, connue sous le nom de contrôle d'accès discrétionnaire (DAC), ne permet pas aux administrateurs système de créer des politiques de sécurité complètes et fines, telles que la restriction d'applications spécifiques à la seule visualisation des fichiers journaux, tout en permettant à d'autres applications d'ajouter de nouvelles données aux fichiers journaux.
Security Enhanced Linux (SELinux) met en œuvre le contrôle d'accès obligatoire (MAC). Chaque processus et ressource système possède une étiquette de sécurité spéciale appelée SELinux context. Un contexte SELinux, parfois appelé SELinux label, est un identifiant qui fait abstraction des détails au niveau du système et se concentre sur les propriétés de sécurité de l'entité. Cela permet non seulement de référencer les objets de manière cohérente dans la politique SELinux, mais aussi d'éliminer toute ambiguïté que l'on peut trouver dans d'autres méthodes d'identification. Par exemple, un fichier peut avoir plusieurs noms de chemin valides sur un système qui utilise des montages bind.
La politique SELinux utilise ces contextes dans une série de règles qui définissent comment les processus peuvent interagir entre eux et avec les différentes ressources du système. Par défaut, la politique n'autorise aucune interaction à moins qu'une règle n'en autorise explicitement l'accès.
N'oubliez pas que les règles de politique SELinux sont vérifiées après les règles DAC. Les règles SELinux ne sont pas utilisées si les règles DAC refusent l'accès en premier, ce qui signifie qu'aucun refus SELinux n'est enregistré si les règles DAC traditionnelles empêchent l'accès.
Les contextes SELinux comportent plusieurs champs : utilisateur, rôle, type et niveau de sécurité. Les informations relatives au type SELinux sont peut-être les plus importantes en ce qui concerne la politique SELinux, car la règle la plus courante qui définit les interactions autorisées entre les processus et les ressources du système utilise les types SELinux et non le contexte SELinux complet. Les types SELinux se terminent par _t
. Par exemple, le nom du type pour le serveur web est httpd_t
. Le contexte de type pour les fichiers et les répertoires qui se trouvent normalement dans /var/www/html/
est httpd_sys_content_t
. Le contexte de type pour les fichiers et les répertoires qui se trouvent normalement dans /tmp
et /var/tmp/
est tmp_t
. Le contexte de type pour les ports du serveur web est http_port_t
.
Une règle de politique autorise Apache (le processus du serveur web s'exécutant sous httpd_t
) à accéder aux fichiers et aux répertoires dont le contexte se trouve normalement dans /var/www/html/
et dans d'autres répertoires du serveur web (httpd_sys_content_t
). Il n'y a pas de règle d'autorisation dans la politique pour les fichiers qui se trouvent normalement dans /tmp
et /var/tmp/
, et l'accès n'est donc pas autorisé. Avec SELinux, même si Apache est compromis et qu'un script malveillant y accède, il n'est toujours pas en mesure d'accéder au répertoire /tmp
.
Figure 1.1. Un exemple de la manière dont SELinux peut aider à faire fonctionner Apache et MariaDB de manière sécurisée.
Comme le montre le schéma précédent, SELinux autorise le processus Apache s'exécutant sous le nom httpd_t
à accéder au répertoire /var/www/html/
et refuse au même processus d'accéder au répertoire /data/mysql/
parce qu'il n'y a pas de règle d'autorisation pour les contextes de type httpd_t
et mysqld_db_t
. D'autre part, le processus MariaDB s'exécutant sous le nom de mysqld_t
est en mesure d'accéder au répertoire /data/mysql/
et SELinux refuse également, à juste titre, au processus de type mysqld_t
d'accéder au répertoire /var/www/html/
étiqueté comme httpd_sys_content_t
.
Ressources supplémentaires
-
selinux(8)
et les pages de manuel répertoriées par la commandeapropos selinux
. -
Pages de manuel listées par la commande
man -k _selinux
lorsque le paquetageselinux-policy-doc
est installé. - Le SELinux Coloring Book vous aide à mieux comprendre les concepts de base de SELinux.
- SELinux Wiki FAQ