Maîtriser chcon : modifier les contextes SELinux sous Linux

Vue d’ensemble

Dans l’écosystème Linux, l’utilitaire chcon constitue l’outil de référence lorsqu’il s’agit d’ajuster rapidement et à chaud les contextes de sécurité SELinux. Ce tutoriel détaille quatre cas d’usage concrets de cette commande en environnement de production, tout en mettant en lumière ses limites critiques face aux réinitialisations et aux redémarrages système.

Inspection des contextes SELinux et syntaxe fondamentale de chcon

Pour préparer un environnement de test isolé dédié à l’expérimentation de chcon, générez un répertoire de travail temporaire puis basculez dedans via l’instruction mkdir -p /tmp/chcon_lab && cd /tmp/chcon_lab.

Initialisation du dossier de test via mkdir et cd

Créez ensuite un fichier témoin servant de cible d’évaluation grâce à la commande touch web_sample.html.

Création d’un document HTML d’exemple avec touch

L’inspection du label de sécurité attribué au document s’effectue au moyen de ls -Z web_sample.html.
La présence d’un point d’interrogation (?) dans la sortie indique que le sous-système SELinux se trouve désactivé sur la machine hôte ou qu’aucun attribut contextuel n’a encore été associé à la ressource.
La structure élémentaire de l’outil suit le schéma chcon [options] contexte fichier.
⚙️ [Paramètres essentiels]

-t : redéfinit le type (Type) au sein du contexte cible.
-u : modifie l’identité utilisateur (User) rattachée à la règle.
-r : réassigne le rôle (Role) du contexte SELinux.
-R : applique la modification de manière récursive à toute l’arborescence.
--reference : duplique fidèlement le profil de sécurité d’un fichier source donné.
-v : affiche le déroulement détaillé des opérations dans la console.

Affichage du contexte de sécurité via ls -Z

Cas pratique : réassigner un type de sécurité avec l’option -t

Afin de simuler la configuration requise par un service web, instanciez un répertoire de démonstration et une page d’accueil avec mkdir -p /tmp/chcon_lab && touch /tmp/chcon_lab/index.html.

Mise en place de l’arborescence web et du fichier index.html

Pour garantir qu’un démon HTTP tel qu’Apache ou Nginx puisse lire le contenu sans être bloqué par les politiques de contrôle d’accès obligatoire, ajustez le type du fichier vers httpd_sys_content_t en lançant chcon -t httpd_sys_content_t /tmp/chcon_lab/index.html.

Attribution du type httpd_sys_content_t avec chcon

Contrôlez la bonne prise en compte du nouveau paramétrage en exécutant ls -Z /tmp/chcon_lab/index.html.
Le caractère ? qui s’affiche confirme simplement l’inactivité de SELinux sur cette distribution, empêchant la matérialisation effective du contexte au niveau du système de fichiers.

Vérification du label attribué au fichier index.html

Clonage de contexte via –reference et propagation récursive avec -R

Préparez les éléments nécessaires à l’évaluation du traitement récursif en créant un sous-dossier public assorti d’une feuille de style par le biais de mkdir -p /tmp/chcon_lab/public_html && touch /tmp/chcon_lab/public_html/style.css.

Création du répertoire public_html et de la feuille de style

Générez ensuite une page HTML complémentaire destinée à recevoir les attributs d’un fichier existant avec touch /tmp/chcon_lab/target_page.html.

Création du document HTML cible target_page.html

La commande chcon --reference=/tmp/chcon_lab/index.html /tmp/chcon_lab/target_page.html permet de dupliquer à l’identique les permissions contextuelles définies sur index.html vers target_page.html.
Cette méthode évite toute faute de frappe lors de la saisie manuelle de contextes complexes en s’appuyant sur un modèle fonctionnel validé.

Duplication des contextes SELinux via l’option –reference

Pour propager l’étiquette httpd_sys_content_t à l’intégralité d’un dossier et de ses éléments descendants, recourez à chcon -R -t httpd_sys_content_t /tmp/chcon_lab/public_html.
Le commutateur -R parcourt en profondeur l’ensemble de la hiérarchie pour harmoniser les accès en une seule passe.

Application récursive du contexte avec chcon -R

Inspectez le statut attribué aux entrées du dossier à l’aide de ls -laZ /tmp/chcon_lab/public_html.
Le symbole ? visible dans le résultat réitère l’état désactivé du moteur SELinux au sein de cet environnement.

Contrôle détaillé des contextes du dossier avec ls -laZ

Pièges et limites fondamentales de chcon en production

Pour expérimenter le mécanisme de réinitialisation contextuelle restorecon, installez au préalable la suite logicielle requise en exécutant apt-get update -qq && apt-get install -y policycoreutils.

Installation du paquet policycoreutils sous Ubuntu

Mettez en place un document textuel dédié à cette vérification à l’aide de touch /tmp/chcon_lab/warning_test.txt.

Génération d’un fichier de test avec touch

Assignez provisoirement le type de contexte tmp_t sur ce document via chcon -t tmp_t /tmp/chcon_lab/warning_test.txt.
Il convient de garder à l’esprit que les modifications apportées par chcon restent purement éphémères et ne sont jamais enregistrées dans la base de règles permanentes de SELinux.

Modification temporaire du type avec chcon -t tmp_t

Validez la déclaration du nouveau contexte en exécutant ls -Z /tmp/chcon_lab/warning_test.txt.
Le point d’interrogation (?) signale une nouvelle fois que le sous-système SELinux n’est pas actif pour enregistrer cette métadonnée.

Vérification du statut contextuel après modification

Tentez de restaurer l’étiquetage d’origine tel que consigné dans la politique centrale du système avec restorecon -v /tmp/chcon_lab/warning_test.txt.
Tout étiquetage opéré via chcon s’efface lors d’un appel à restorecon ou d’un réétiquetage complet du système de fichiers (autorelabel). Dès lors qu’une configuration pérenne s’avère indispensable, il est impératif de configurer la politique via semanage fcontext.

Tentative de restauration du contexte d’origine via restorecon

Réexaminez le fichier après l’opération de restauration au moyen de ls -Z /tmp/chcon_lab/warning_test.txt.
Le résultat confirme l’absence de gestion active des contextes par le noyau en raison de la désactivation de SELinux.

Contrôle final de l’état du fichier après restorecon

Vous disposez désormais d’une vision d’ensemble sur l’emploi de chcon sous Linux pour manipuler les contextes SELinux ainsi que sur ses répercussions opérationnelles.
Bien qu’extrêmement pratique pour le débogage rapide, cet utilitaire doit toujours être manié en pleine connaissance de cause face aux mécanismes de persistance des politiques globales.