Guide complet pour améliorer la sécurité sous Linux

Guide complet pour améliorer la sécurité sous Linux

SELinux (Sécurité-Enhanced Linux) est un système de contrôle d’accès basé sur des politiques de sécurité qui fournit une couche additionnelle de protection dans les systèmes Linux. Il est particulièrement utile pour les environnements de haute sécurité ou les serveurs exposés à internet. Ci-dessous, les aspects clés d’une configuration avancée de SELinux sont détaillés, y compris les politiques, les modes, et des conseils pour résoudre les problèmes.

1. Modes de SELinux

SELinux a trois principaux modes d’opération :

  • Enforcing : Le mode où SELinux est actif et fait respecter toutes les politiques. Il bloque toute action qui n’est pas explicitement autorisée.
  • Permissive : Dans ce mode, SELinux ne bloque pas les actions mais enregistre toutes les violations de politique dans le système. Il est utile pour le débogage et l’ajustement des politiques avant de déployer un mode de production.
  • Disabled : SELinux est désactivé. Aucune politique n’est appliquée ni enregistrée.

Pour vérifier le mode actuel de SELinux :

sestatus

Pour changer le mode de SELinux temporairement (sans redémarrage) :

setenforce 0  # Passer en mode Permissive
setenforce 1 # Passer en mode Enforcing

Pour changer le mode de SELinux de manière permanente, éditez le fichier de configuration dans /etc/selinux/config :

SELINUX=enforcing  # Modifier en permissive ou disabled selon le besoin

2. Politiques de SELinux

Les politiques dans SELinux définissent quelles actions sont autorisées et lesquelles ne le sont pas. Il existe trois types principaux de politiques :

  • Targeted : La politique par défaut dans la plupart des distributions Linux. Elle protège les services systèmes les plus courants, laissant les autres processus dans un mode plus permissif.
  • MLS (Multi-Level Security) : Une politique plus stricte qui utilise des niveaux de classification et de catégorisation, généralement pour des systèmes de haute sécurité.
  • MCS (Multi-Category Security) : Similaire à MLS, mais avec des catégories de sécurité au lieu de niveaux stricts. Elle est utile pour la virtualisation et les systèmes à conteneurs.

Pour vérifier la politique active :

sestatus | grep "Policy"

3. Contextes de SELinux

Chaque fichier, processus et port dans SELinux a un contexte de sécurité, qui inclut généralement :

  • Utilisateur (user)
  • Rôle (role)
  • Type (type)
  • Niveau (level), pour les politiques MLS/MCS.

Par exemple, dans un contexte de fichier, system_u:object_r:httpd_sys_content_t:s0, le type (httpd_sys_content_t) détermine quelles actions un service peut réaliser sur le fichier.

Pour voir le contexte d’un fichier :

ls -Z /chemin/vers/le/fichier

Pour changer le contexte d’un fichier :

chcon -t nouveau_type /chemin/vers/le/fichier

Exemple pour changer un fichier afin qu’il soit accessible par Apache :

chcon -t httpd_sys_content_t /var/www/html/index.html

Pour que le changement soit permanent, il faut utiliser semanage :

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html

4. Outils de gestion de SELinux

  • semanage : Configure les paramètres persistants de SELinux comme les contextes de fichiers, les ports, et plus encore.
    semanage fcontext -l # Lister les contextes de fichier semanage port -l # Lister les ports et leurs types
  • restorecon : Restaure les contextes de fichiers à leurs valeurs par défaut selon la politique.
    restorecon -Rv /chemin/vers/le/dossier
  • getsebool et setsebool : Gèrent les booléens, qui permettent d’activer ou de désactiver certaines règles de SELinux sans modifier les politiques directement.
    getsebool -a # Lister tous les booléens setsebool httpd_enable_homedirs on # Autoriser Apache à accéder aux répertoires home

5. Configurer les Booléens dans SELinux

Les Booléens sont une manière de personnaliser le comportement de SELinux sans modifier directement les politiques. Par exemple, pour autoriser Apache à accéder aux fichiers d’utilisateur :

setsebool -P httpd_enable_homedirs on

Pour lister les Booléens spécifiques à un service (comme httpd) :

getsebool -a | grep httpd

6. Résolution de problèmes dans SELinux

Lorsque SELinux bloque une action, il génère un message dans le log du système (/var/log/audit/audit.log). Pour interpréter ces messages et générer des solutions suggérées, utilisez ausearch ou audit2why :

ausearch -m avc -ts today             # Voir les violations d'aujourd'hui
cat /var/log/audit/audit.log | audit2why # Expliquer les violations récentes

Si vous souhaitez convertir ces violations en exceptions de politique pour SELinux, utilisez audit2allow :

cat /var/log/audit/audit.log | audit2allow -M nom_module
semodule -i nom_module.pp

7. Création de Modules de Politiques Personnalisés

Dans des cas avancés, il peut être nécessaire de créer des modules de politique personnalisés pour permettre des actions spécifiques sans désactiver SELinux. Les modules sont créés en utilisant audit2allow et ensuite installés avec semodule :

cat /var/log/audit/audit.log | audit2allow -M politique_personnalisee
semodule -i politique_personnalisee.pp

8. Recommandations pour une Configuration Avancée de SELinux

  • Surveiller régulièrement les logs de SELinux : Utilisez ausearch ou audit2why pour identifier et analyser les incidents.
  • Implémenter les booléens pour des configurations communes : Les booléens sont une manière efficace de faire des ajustements sans créer de politiques personnalisées.
  • Faire des tests en mode permissif : Avant d’appliquer des politiques restrictives en mode enforcing, testez en mode permissive pour évaluer l’impact sans interrompre les services.
  • Utiliser des politiques personnalisées lorsque c’est nécessaire : Pour des configurations spéciales ou logiciels spécifiques, les modules personnalisés permettent d’adapter SELinux aux besoins exacts du système.

Avec une configuration avancée de SELinux, il est possible de protéger des systèmes critiques, garantissant un contrôle granulaire sur qui et quoi peut accéder aux ressources du système. En suivant ces étapes, les administrateurs et équipes de sécurité peuvent tirer parti du plein potentiel de SELinux pour maintenir l’intégrité et la sécurité dans des environnements Linux à haute demande.

via : SELinux en Administración de Sistemas