Un guide du débutant sur SELinux

Un guide du débutant sur SELinux

Traduction de l'article préparé pour les étudiants du cours "Sécurité Linux"

SELinux ou Security Enhanced Linux est un mécanisme de contrôle d'accès amélioré développé par la National Security Agency (NSA) américaine pour prévenir les intrusions malveillantes. Il implémente un modèle de contrôle d'accès forcé (ou obligatoire) (en anglais Mandatory Access Control, MAC) en plus du modèle discrétionnaire (ou sélectif) existant (en anglais Discretionary Access Control, DAC), c'est-à-dire des autorisations de lecture, d'écriture et d'exécution.

SELinux a trois modes :

  1. Faire respecter — refus d'accès basé sur des règles de politique.
  2. Permissif — tenir un journal des actions qui violent la politique, ce qui serait interdit en mode d'application.
  3. Hors Ligne — désactivation complète de SELinux.

Par défaut, les paramètres sont 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 de mode de permissif sur l'application, exécuter

$ 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 devrez d'abord configurer le contexte et les étiquettes. Le processus d'attribution d'étiquettes et de contexte est appelé marquage. Pour commencer le marquage, dans le fichier de configuration, nous changeons le mode en permissif.

$ vi /etc/selinux/config
SELINUX=permissive

Après avoir réglé le mode permissif, créez un fichier caché vide à la racine avec le nom autorelabel

$ touch /.autorelabel

et redémarrez l'ordinateur

$ init 6

Remarque : Nous utilisons le mode permissif pour le marquage, puisque l'utilisation du mode l'application peut provoquer un crash du système lors du redémarrage.

Ne vous inquiétez pas si le téléchargement reste bloqué sur un fichier, le marquage prend un certain temps. Une fois le marquage terminé et votre système démarré, vous pouvez accéder au fichier de configuration et définir le mode l'applicationet exécutez également :

$ setenforce 1

Vous avez maintenant activé avec succès SELinux sur votre ordinateur.

Surveillance des journaux

Vous avez peut-être rencontré des erreurs lors du marquage ou pendant le fonctionnement du système. Pour vérifier si votre SELinux fonctionne correctement et s'il ne bloque l'accès à aucun port, 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 lire le tout pour trouver des erreurs. Vous pouvez utiliser l'utilitaire audit2why pour rechercher les erreurs. Exécutez la commande suivante :

$ audit2why < /var/log/audit/audit.log

En conséquence, vous recevrez une liste d'erreurs. S'il n'y a aucune erreur dans le journal, aucun message ne sera affiché.

Configuration de la politique SELinux

Une politique SELinux est un ensemble de règles qui régissent le mécanisme de sécurité SELinux. Une politique définit un ensemble de règles pour un environnement spécifique. Nous allons maintenant apprendre comment configurer des politiques pour autoriser l'accès aux services interdits.

1. Valeurs logiques (commutateurs)

Les commutateurs (booléens) vous permettent de modifier des parties d'une stratégie au moment de l'exécution, sans avoir à créer de nouvelles stratégies. Ils vous permettent d'apporter des modifications sans redémarrer ni recompiler les politiques SELinux.

Exemple
Disons que nous voulons partager le répertoire personnel d'un utilisateur via FTP en lecture/écriture, et que nous l'avons déjà partagé, mais lorsque nous essayons d'y accéder, nous ne voyons rien. En effet, la politique SELinux empêche le serveur FTP de lire et d'écrire dans le répertoire personnel de l'utilisateur. Nous devons modifier la politique afin que le serveur FTP puisse accéder aux répertoires personnels. Voyons s'il existe des commutateurs pour cela en faisant

$ semanage boolean -l

Cette commande listera les commutateurs disponibles avec leur état actuel (activé ou désactivé) et leur description. Vous pouvez affiner votre recherche en ajoutant grep pour trouver des résultats FTP uniquement :

$ semanage boolean -l | grep ftp

et vous trouverez 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

Notre démon ftp pourra désormais 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 d'implémenter la politique SELinux. Chaque fichier, dossier, processus et port est marqué avec le contexte SELinux :

  • Pour les fichiers et dossiers, les étiquettes sont stockées en tant qu'attributs étendus sur le système de fichiers et peuvent être visualisées avec la commande suivante :
    $ ls -Z /etc/httpd
  • Pour les processus et les ports, l'étiquetage est géré par le noyau et vous pouvez afficher ces étiquettes comme suit :

processus

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Exemple
Examinons maintenant un exemple pour mieux comprendre les étiquettes et le contexte. Disons que nous avons un serveur Web qui, au lieu d'un répertoire /var/www/html/ использует /home/dan/html/. SELinux considérera cela comme une violation de la politique et vous ne pourrez pas consulter vos pages Web. En effet, nous n'avons pas défini 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 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 actuellement le contexte suivant :

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Une 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 une fois que nous aurons trouvé le bon contexte de sécurité. Pour modifier 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 restaurercon chargera le contexte par défaut pour les fichiers et les répertoires. Notre serveur Web pourra désormais lire les fichiers du dossier /home/dan/htmlcar le contexte de sécurité de ce dossier a été modifié en httpd_sys_content_t.

3. Créer des politiques locales

Il peut arriver que les méthodes ci-dessus ne vous soient d'aucune utilité et que vous obteniez des erreurs (avc/denial) dans audit.log. Lorsque cela se produit, vous devez créer une politique locale. Vous pouvez trouver toutes les erreurs en utilisant audit2why, comme décrit ci-dessus.

Vous pouvez créer une stratégie locale pour résoudre les erreurs. Par exemple, nous obtenons une erreur liée à httpd (apache) ou smbd (samba), nous récupérons 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

il est http_policy и smb_policy sont les noms des politiques 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é téléchargées et nous ne devrions plus recevoir d'avc ou denail 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.

Source: habr.com

Ajouter un commentaire