
La traduction de l'article a été préparée pour les étudiants de Linux Security
SELinux ou Security Enhanced Linux est un mécanisme de contrôle d'accès avancé développé par la NSA (US National Security Agency) pour empêcher les intrusions malveillantes. Il implémente un modèle de contrôle d'accès forcé (ou obligatoire) (Eng. Mandatory Access Control, MAC) en plus du modèle discrétionnaire (ou sélectif) existant (Eng. Discretionary Access Control, DAC), c'est-à-dire les autorisations de lecture, d'écriture, d'exécution.
SELinux a trois modes:
- Application - Refus d' accès basé sur des règles de politique.
- Permissif - actions de journalisation qui violent les politiques qui seraient interdites en mode d'application.
- Désactivé - Désactivez complètement SELinux.
Par défaut, les paramètres se trouvent dans /etc/selinux/config
Changer les modes SELinux
Pour connaître le mode actuel, exécutez
$ getenforce
Pour changer le mode en permissif, exécutez la commande suivante
$ setenforce 0
ou, pour changer le mode de permissif à contraignant , faites
$ setenforce 1
Si vous devez désactiver complètement SELinux, cela ne peut être fait que via le fichier de configuration
$ vi /etc/selinux/config
Pour désactiver, modifiez le paramètre SELINUX comme suit:
SELINUX=disabled
Configuration de SELinux
Chaque fichier et processus est marqué d'un contexte SELinux, qui contient des informations supplémentaires telles que l'utilisateur, le rôle, le type, etc. Si c'est la première fois que vous activez SELinux, vous devez d'abord configurer le contexte et les étiquettes. Le processus d'étiquetage et de contexte est appelé étiquetage. Pour commencer le marquage, dans le fichier de configuration, changez le mode en permissif .
$ vi /etc/selinux/config SELINUX=permissive
Après avoir défini le mode permissif , créez un fichier caché vide appelé autorelabel
à la racine
$ touch /.autorelabel
et redémarrez l'ordinateur
$ init 6
Remarque: nous utilisons le mode permissif pour le marquage, car l'utilisation du mode d' application peut entraîner un plantage du système lors du redémarrage.
Ne vous inquiétez pas si le téléchargement est bloqué sur un fichier, le marquage prend un certain temps. Après avoir marqué et démarré votre système, vous pouvez aller dans le fichier de configuration et définir le mode d' application , ainsi que lancer:
$ setenforce 1
Vous avez maintenant activé avec succès SELinux sur votre ordinateur.
Surveiller les journaux
Vous pourriez avoir une sorte d'erreur lors du marquage ou lorsque le système était en cours d'exécution. Pour vérifier si votre SELinux fonctionne correctement et s'il ne bloque pas l'accès à un port, une application, etc., vous devez consulter les journaux. Le journal SELinux se trouve dans /var/log/audit/audit.log
, mais vous n'avez pas besoin de le lire dans son intégralité pour trouver des erreurs. Vous pouvez utiliser audit2why pour rechercher des erreurs. Exécutez la commande suivante:
$ audit2why < /var/log/audit/audit.log
En conséquence, vous obtenez une liste d'erreurs. S'il n'y avait aucune erreur dans le journal, aucun message ne s'affichera.
Configuration de la politique SELinux
Une politique SELinux est un ensemble de règles qui guident la sécurité SELinux. Une stratégie définit un ensemble de règles pour un environnement particulier. Nous allons maintenant apprendre à configurer des stratégies pour autoriser l'accès à des services restreints.
1. Valeurs logiques (commutateurs)
Les commutateurs (booléens) vous permettent de modifier des parties d'une stratégie pendant que vous travaillez, sans avoir besoin de créer de nouvelles stratégies. Ils vous permettent d'apporter des modifications sans redémarrer ni recompiler les politiques SELinux.
Exemple
Supposons que nous voulons partager le répertoire personnel de l'utilisateur via FTP pour la lecture et l'écriture, et que nous l'avons déjà partagé, mais lorsque nous essayons d'accéder, nous ne voyons rien. En effet, la stratégie SELinux interdit au serveur FTP de lire et d'écrire dans le répertoire personnel de l'utilisateur. Nous devons changer la politique afin que le serveur FTP puisse accéder aux répertoires personnels. Voyons s'il y a des commutateurs pour cela en faisant
$ semanage boolean -l
Cette commande affichera une liste des commutateurs disponibles avec leur état actuel (on / on ou off / off) et leur description. Vous pouvez affiner votre recherche en ajoutant grep pour ne trouver que les résultats liés à ftp:
$ semanage boolean -l | grep ftp
et trouvez ce qui suit
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Ce commutateur est désactivé, nous allons donc l'activer avec setsebool $ setsebool ftp_home_dir on
Maintenant, notre démon ftp pourra accéder au répertoire personnel de l'utilisateur.
Remarque: vous pouvez également obtenir une liste des commutateurs disponibles sans description en faisant getsebool -a
2. Étiquettes et contexte
Il s'agit de la manière la plus courante de mettre en œuvre les politiques SELinux. Chaque fichier, dossier, processus et port est marqué d'un contexte SELinux:
- Pour les fichiers et les dossiers, les balises sont stockées en tant qu'attributs étendus dans le système de fichiers et peuvent être affichées avec la commande suivante:
$ ls -Z /etc/httpd
- Pour les processus et les ports, le noyau contrôle le marquage et vous pouvez voir ces étiquettes comme suit:
le processus
$ ps –auxZ | grep httpd
port
$ netstat -anpZ | grep httpd
Exemple
Voyons maintenant un exemple pour mieux comprendre les étiquettes et le contexte. Supposons que nous ayons un serveur Web qui /var/www/html/ /home/dan/html/
au lieu du répertoire /var/www/html/ /home/dan/html/
. SELinux considérera cela comme une violation de politique et vous ne pourrez peut-être pas parcourir vos pages Web. En effet, nous n'avons pas configuré le contexte de sécurité associé aux fichiers HTML. Pour afficher le contexte de sécurité par défaut, utilisez la commande suivante:
$ ls –lz /var/www/html -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Ici, nous avons obtenu httpd_sys_content_t
comme contexte pour les fichiers html. Nous devons définir ce contexte de sécurité pour notre répertoire actuel, qui a maintenant le contexte suivant:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Commande alternative pour vérifier le contexte de sécurité d'un fichier ou d'un répertoire:
$ semanage fcontext -l | grep '/var/www'
Nous utiliserons également semanage pour changer le contexte après avoir trouvé le bon contexte de sécurité. Pour changer le contexte de / home / dan / html, exécutez les commandes suivantes:
$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(/.*)?' $ semanage fcontext -l | grep '/home/dan/html' /home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 $ restorecon -Rv /home/dan/html
Une fois le contexte modifié à l'aide de semanage, la commande restorecon charge le contexte par défaut des fichiers et des répertoires. Notre serveur Web pourra désormais lire les fichiers du dossier /home/dan/html
, car le contexte de sécurité de ce dossier a été changé en httpd_sys_content_t
.
3. Création de politiques locales
Il peut y avoir des situations où les méthodes ci-dessus vous sont inutiles et vous obtenez des erreurs (avc / denial) dans audit.log. Lorsque cela se produit, vous devez créer une stratégie locale. Vous pouvez trouver toutes les erreurs avec audit2why, comme décrit ci-dessus.
Pour résoudre les erreurs, vous pouvez créer une stratégie locale. Par exemple, nous obtenons une erreur liée à httpd (apache) ou smbd (samba), nous grep les erreurs et créons une politique pour elles:
apache $ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy samba $ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
Ici, http_policy
et smb_policy
sont les noms des stratégies locales que nous avons créées. Nous devons maintenant charger ces politiques locales créées dans la politique SELinux actuelle. Cela peut être fait comme suit:
$ semodule –I http_policy.pp $ semodule –I smb_policy.pp
Nos politiques locales ont été chargées, et nous ne devons plus recevoir d'avc ni de déni dans audit.log.
C'était ma tentative pour vous aider à comprendre SELinux. J'espère qu'après avoir lu cet article, vous vous sentirez plus à l'aise avec SELinux.