Traduction de l'article préparé pour les étudiants du cours
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 :
- Faire respecter — refus d'accès basé sur des règles de politique.
- Permissif — tenir un journal des actions qui violent la politique, ce qui serait interdit en mode d'application.
- 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/html
car 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