Différences entre versions de « SELinux »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
Ligne 118 : Ligne 118 :
 
Policy deny_unknown status:    allowed
 
Policy deny_unknown status:    allowed
 
Max kernel policy version:      28
 
Max kernel policy version:      28
 +
</pre>
 +
== Changement d'état==
 +
On peut modifier le mode de fonctionnement de SELinux dans le fichier /etc/selinux/config et, il suffit de modifier la ligne:
 +
<pre>
 +
SELINUX=enforcing
 +
</pre>
 +
 +
* en SELINUX=disabled &rarr; pour le désactiver
 +
* en SELINUX=Permissive &rarr; pour le effectuer des tests (permissif)
 +
 +
Les modifications ne prenant effet qu'au prochain redémarrage, n'oubliez pas d'utilisez la commande suivante:
 +
 +
<pre>
 +
# setenforce permissive
 +
ou
 +
# setenforce disabled
 
</pre>
 
</pre>

Version du 25 novembre 2019 à 17:16

Introduction

"Security-Enhanced Linux, abrégé SELinux, est un Linux security module (LSM), qui permet de définir une politique de contrôle d'accès obligatoire aux éléments d'un système issu de Linux.

Son architecture dissocie l'application de la politique d'accès et sa définition. Il permet notamment de classer les applications d'un système en différents groupes, avec des niveaux d'accès plus fins. Il permet aussi d'attribuer un niveau de confidentialité pour l'accès à des objets systèmes, comme des descripteurs de fichiers, selon un modèle de sécurité multiniveau (MLS pour Multi level Security). SELinux utilise le modèle Bell LaPadula complété par le mécanisme Type enforcement de contrôle de l'intégrité, développé par SCC. Il s'agit d'un logiciel libre, certaines parties étant sous licences GNU GPL et BSD."

Wikipedia

Désactivation

Le plus efficace étant souvent le plus simple, quand SELinux casse les pieds, il suffit de le désactiver...

Cette option se trouve dans le fichier /etc/selinux/config et, il suffit de modifier la ligne:

SELINUX=enforcing

en

SELINUX=disabled

Les modifications ne prendront effet qu'au prochain redémarrage sauf si vous utilisez la commande suivante:

# setenforce 0

Pourquoi SELinux

SELinux est l'implémentation de ce que l'on appelle un MAC (Mandatory Access Control) ou Contrôle d'Accès Obligatoire. Le MAC intervient après le Contrôle d'Accès Discret ou DAC (Discretionary Access Control).

Le DAC est représenté par ce que l'on appelle les ACL (Access Control Lists) qui permettent de positionner des droits (lecture → r, écriture → w ou éxecution → x) sur les fichiers en fonction des entités y accédant (utilisateur → u, groupe → g ou autres → o).

Prenons l'exemple suivant:

[jcf@centos ~]$ pwd
/home/jcf
[jcf@centos ~]$ ll
total 0
-rwxrwxr-x. 1 jcf jcf 0 24 nov.  19:33 script.sh

L'utilisateur jcf a le droit de créer un script dans son répertoire home et peut modifier les droits d’exécution: cela est laissé à sa discrétion. Il n'y aucun moyen pour l'administrateur de s'assurer des droits de chaque fichier !

Pire encore, imaginons un processus qui tourne en tant que root ou sur un compte qui posséderai les droits super utilisateur. Si une personne mal intentionnée récupère le contrôle d'un tel processus, cela signifie qu'elle aura accès aux ressources auxquelles le compte a accès. Si le processus s'exécute avec le compte root cela signifie l'intégralité du système.

Imaginez que vous autorisiez des développeur à accéder à un serveur de production. Vous voulez qu'ils puissent regarder les logs mais qu'ils soient capable d'exécuter des commandes avec su ou sudo. Comment faire ?!? SELinux permet d'ajuster finement la granularité du contrôle d'accès. SELinux confine un processus dans un domaine et ne l'autorise à accéder aux fichiers ou interagir avec les processus des domaines autorisés.

Fonctionnement

Les paquetages

Plusieurs paquetages composent SELinux et voici la liste (pour les spins de RedHat):

  • policycoreutils, policycoreutils-python: utilitaires pour gérer SELinux;
  • selinux-policy: fournit les polices de référence;
  • selinux-policy-targeted: fournit les politiques cible;
  • libselinux-utils: fournit des outils pour gérer SELinux;
  • setroubleshoot-server: fournit les outils pour déchiffrer les messages de journalisation;
  • setools, setools-console: fournit les outils pour le monitoring des évenements de journalisation, les requêtes sur les politiques de filtrage et la gestion du context des fichiers;
  • mcstrans: outils pour traduire les politiques au format facile à comprendre;

On peut voir les paquetages disponibles grâce ) la commande suivante:

# rpm -qa | grep selinux | sort -u
libselinux-2.5-11.el7.x86_64
libselinux-python-2.5-11.el7.x86_64
libselinux-utils-2.5-11.el7.x86_64
selinux-policy-3.13.1-166.el7.noarch
selinux-policy-targeted-3.13.1-166.el7.noarch

Et on peut installer / mettre à jour les paquetages grâce à la commande suivante:

# yum -y install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans

Les différents modes

SELinux fonctionne avec différents modes:

  • enforcing
  • permissive
  • disbaled

Dans le mode Enforcing SELinux applique la politique de sécurité et bloque tous les accès non autorisé fait par les utilisateur ET les processus, les accès bloqués étant journalisés dans les fichiers adéquats.

Le mode Permissive peut être considéré comme un état semi-actif dans le sens ou la politique n'est pas appliquée et donc les accès ne sont pas bloqués. Cependant, toutes violations à la politique de sécurité est consigné comme dans le mode Enforcing. C'est le mode parfait pour tester l'application de la politique de sécurité !

Le mode disabled désactive SELinux.

Mode et status

On peut vérifier dans quel mode on se trouve grâce à la commande suivante:

# getenforce
Enforcing

On peut afficher le status grâce à la commande suivante:

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

Le mode enforcing est le mode par défaut sur une installation fraîche de CentOS 7. On peut modifier cela grâce à la commande suivante:

# setenforce permissive

On voit bien le status modifié:

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

Changement d'état

On peut modifier le mode de fonctionnement de SELinux dans le fichier /etc/selinux/config et, il suffit de modifier la ligne:

SELINUX=enforcing
  • en SELINUX=disabled → pour le désactiver
  • en SELINUX=Permissive → pour le effectuer des tests (permissif)

Les modifications ne prenant effet qu'au prochain redémarrage, n'oubliez pas d'utilisez la commande suivante:

# setenforce permissive
ou 
# setenforce disabled