Fonctionnement et Philosophie
Ancré historiquement dans les travaux du Flux Team de l'Université de l'Utah et de la NSA (National Security Agency), ce système de sécurité open source impose des règles globales qui prévalent même sur les privilèges root. La logique repose sur le principe du moindre privilège : chaque service ou application ne doit avoir accès qu'aux éléments strictement nécessaires à son exécution.
Contrairement aux modes d'accès classiques (DAC) qui autorisent la modification des permissions par les propriétaires, SELinux applique une politique dynamique chargée en mémoire. Cela empêche toute application compromise ou mal configurée de contourner les restrictions définies par l'administrateur, qu'il s'agisse de fichiers, de ports réseaux ou de communications inter-processus.
Vérification de l'État Actuel
Pour identifier si le module est actif et déterminer sa rigueur actuelle, la commande getenforce reste l'outil principal sur les distributions dérivées de RHEL (Red Hat Enterprise Linux) et Fedora.
# Vérification de l'état d'application des règles
$ getenforce
La sortie peut prendre trois formes distinctes :
- Enforcing : Le système bloque activement les violations de politique et les consigne dans les journaux audit.
- Permissive : Les infractions sont enregistrées mais non bloquées ; cette phase est idéale pour le débogage sans interruption de service.
- Disabled : Le module est désactivé et n'intervient pas dans la gestion des accès.
Modification Temporaire des Règles
Lors de tests ou d'investigations ponctuelles, il est possible de basculer vers le mode permissif immédiatement sans redémarrage de la machine. Cela nécessite l'utilisation de setenforce suivi du paramètre numérique souhaité.
#!/bin/bash
# Script d'exemple pour gérer le mode temporaire
CURRENT_STATE=$(getenforce)
if [ "$CURRENT_STATE" == "Enforcing" ]; then
echo "Basculement vers le mode tolérant..."
setenforce 0
if [ "$(getenforce)" == "Permissive" ]; then
echo "Succès : SELinux maintenant en mode permissif."
else
echo "Erreur : Echec de basculement."
fi
else
echo "Le mode actuel n'est pas Enforcing."
fi
Notez que le retour au mode strict (setenforce 1) s'applique instantanément après cette session.
Configuration Permanente
Pour persister les paramètres au-delà d'un redémarrage, la modification directe du fichier /etc/selinux/config est requise. Ce fichier stocke la politique par défaut utilisée lors du boot du système.
Avant toute manipulation, il est recommandé de sauvegarder le fichier original. Voici une méthode automatisée utilisant sed pour mettre à jour la valeur ciblée :
# Définition des chemins et valeurs
CONF_FILE="/etc/selinux/config"
TARGET_MODE="disabled"
# Modification sécurisée de la ligne SELINUX
if grep -q "^SELINUX=" "$CONF_FILE"; then
sed -i "s/^SELINUX=.*/SELINUX=$TARGET_MODE/" "$CONF_FILE"
echo "Configuration mise à jour : $TARGET_MODE"
else
echo "Erreur : La configuration SELinux n'a pas été trouvée."
fi
Une fois le fichier modifié, un redémarrage complet du serveur devient nécessaire pour que le changement soit pris en compte. Durant le premier démarrage suivant l'activation de SELinux (passage de disabled à enforcing/permissive), la procédure peut sembler ralentie. Ceci est dû au processus initial de marquage des contextes de sécurité pour tous les fichiers existants sur le disque.
Prérequis et Support Distributions
Le déploiement de cette technologie varie selon l'environnement :
- RHEL / Fedora : Intégré nativement par défaut.
- Ubuntu : Nécessite le profil Hardened.
- Debian : Disponible via un package complémentaire.
Ressources Techniques
Pour approfondir la compréhension des contextes de sécurité et des politiques détaillées, la documentation officielle couvre des sujets tels que :
- L'architecture de contrôle d'accès MAC.
- La gestion des rôles et utilisateurs spécifiques.
- L'intégration avec les conteneurs et machines virtuelles.
- Les bibliothèques utilisées par les applications utilisateurs.