Gentoo Logo

[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


4. L'infrastructure de gestion de SELinux

Table des matières :

4.a. L'infrastruction de gestion de SELinux

L'infrastructure de gestion de SELinux s'occupe de plusieurs aspects des politiques SELinux. Ces outils de gestion sont basés sur la bibliothèque centrale libsemanage. Plusieurs programmes de gestion permettent d'achever plusieurs tâches, dont notamment semanage et semodule. Ils vous permettront de configurer certains aspects sans avoir besoin de la source de la politique.

4.b. Gestion des modules de politiques SELinux

Qu'est-ce qu'un module de politique ?

SELinux gère les politiques modulaires. Cela consiste en plusieurs morceaux de politiques qui sont assemblés pour former une politique à charger dans le noyau. La structure est assez similaire au noyau lui-même et à ses modules : une image principale du noyau est chargée, puis plusieurs modules du noyau peuvent être ajoutés (à condition que leurs dépendances soient satisfaites) et supprimés, à chaud, sans redémarrer le système. De même, chaque politique est constituée d'un module de base et d'un nombre éventuellement nul de modules de politiques qui forment la politique. Les modules sont construits en compilant un morceau de politique et en créant un paquet de politique (*.pp) contenant la politique compilée et éventuellement des contextes de fichiers.

Le paquet du module de base (base.pp) contient le strict nécessaire de la politique. Toutes les politiques modulaires doivent au moins avoir leur module de base. Dans Gentoo, nous avons rajouté dans ce paquet des politiques pour toutes les parties du profil système. Il est installé par l'ebuild selinux-base-policy. Les autres ebuilds dans Portage contiennent un ou plusieurs modules de politiques.

Pour plus d'informations à propos de l'écriture d'un module de politique, en particulier pour pouvoir personnaliser une politique, veuillez consulter le guide des modules de politiques.

Le magasin de modules SELinux

Lorsqu'un module de politique est inséré ou supprimé, les modules sont copiés depuis ou supprimé du magasin de modules. Ce dépôt contient une copie des modules qui ont été utilisés pour créer la politique courante, ainsi que plusieurs fichiers annexes. Ce dépôt se trouve dans /etc/selinux/{strict,targeted}/modules. Vous ne devrez jamais avoir besoin d'accéder à ces fichiers directement. Un outil basé sur libsemanage devrait s'en occuper pour vous.

Libsemanage manipule le magasin de modules à l'aide de transaction. Cela signifie que si un ensemble d'opérations (une transaction) sont exécutées sur le magasin et qu'une partie échoue, alors la transaction entière est annulée. Cela empêche le magasin de se retrouver dans un état incohérent.

La gestion du magasin de modules passe par la commande semodule. L'option -l permet d'en lister son contenu.

Exemple de code 2.1 : Lister le contenu du magasin

# semodule -l
distcc  1.1.1

Puisque le module de base est requis dans tous les cas et qu'il n'a pas de version, il n'est pas affiché dans la liste. Tous les autres modules sont affichés avec leur version.

Ajouter un module de politique

Le module est référencé par son nom.

Exemple de code 2.2 : Insérer un module

# semodule -i module.pp

Cela insérera le module dans le magasin de la politique actuellement configurée, comme spécifié dans /etc/selinux/config. Si l'insertion réussit, la politique sera chargée, sauf si l'option -n est spécifiée. Pour charger le module dans un autre magasin de modules, utilisez l'option -s.

Exemple de code 2.3 : Insérer un module dans un autre magasin

# semodule -s targeted -i module.pp

Puisque nous spécifions un autre magasin, la politique ne sera pas chargée.

Retirer un module de politique

Le module est référencé par son nom dans le magasin de modules.

Exemple de code 2.4 : Supprimer un module

# semodule -r module

Cela supprimera le module du magasin de la politique courante, spécifiée dans /etc/selinux/config. Si la suppression a marché, la politique sera rechargée, sauf si l'option -n a été spécifiée. L'option -s fonctionne également pour une suppression de module.

4.c. Configurer les associations d'identifiants d'utilisateurs

La méthode actuelle pour assigner des ensembles de rôles à un utilisateur est de mettre en place une liste d'associations entre les utilisateurs Linux et les identités SELinux. Lorsqu'un utilisateur se connecte, le programme login utilisera cette liste pour associer la bonne identité SELinux à l'utilisateur. S'il n'y a pas d'association pour un utilisateur, on utilise l'entrée __default__.

La gestion des associations entre utilisateurs Linux et identités SELinux est réalisée par semanage.

Exemple de code 3.1 : Associations entre utilisateurs Linux et identités SELinux

# semanage login -l
Login Name                SELinux User

__default__               user_u
root                      root

Ajouter une entrée

Pour faire correspondre l'utilisateur pebenito à l'identité staff_u :

Exemple de code 3.2 : Associer une identité à un utilisateur

# semanage login -a -s staff_u pebenito

La vue d'ensemble de SELinux contient une description des identités disponibles.

Supprimer une entrée

Pour supprimer l'association de l'utilisateur pebenito :

Exemple de code 3.3 : Supprimer l'identité d'un utilisateur

# semanage login -d pebenito

Note : Les associations d'identités spécifiées par la politique (pas par l'infrastructure de gestion) ne peuvent pas être supprimées.

4.d. Configurer les valeurs par défaut des booléens

Le programme setsebool est maintenant un outil utilisant libsemanage. La fonction de base de cet outil est d'assigner une valeur à un booléen. Pourtant, si la machine est redémarrée, les booléens seront tous réinitialisés à la valeur spécifiée dans la politique. Pour configurer une valeur tout en demandant qu'elle soit par défaut dans la politique, utilisez l'option -P.

Exemple de code 4.1 : Configurer les valeurs par défaut des booléens

# setsebool -P fcron_crond 1

La commande précédente définit la valeur du booléen fcron_crond à 1 et définit également cette valeur comme étant celle par défaut.

4.e. Configurer les identités de SELinux

En principe, on n'a pas besoin d'ajouter des identités de SELinux à la politique de sécurité, car les associations identité/login suffisent. Une bonne raison d'ajouter une nouvelle identité serait pour améliorer les audits, car l'identité SELinux apparait directement dans le contexte du message de refus d'accès.

La gestion des identités SELinux est assurée par l'outil semanage.

Exemple de code 5.1 : Lister les identités SELinux

# semanage user -l
SELinux User    SELinux Roles

root            sysadm_r staff_r
staff_u         sysadm_r staff_r
sysadm_u        sysadm_r
system_u        system_r
user_u          user_r

Ajouter une identité SELinux

En plus de lister les rôles de l'identité, il faut spécifier un préfixe. Ce préfixe doit correspondre à un rôle, par exemple staff ou sysadm, et est utilisé pour étiqueter les répertoires racines des utilisateurs. Si le préfixe utilisé est staff, les utilisateurs Linux qui seront associés à cette identité auront leur répertoire racine étiqueté staff_home_dir_t.

Pour ajouter l'identité test_u contenant les rôles staff_r et sysadm_r avec le préfixe staff :

Exemple de code 5.2 : Ajouter une identité SELinux

# semanage user -a -R 'staff_r sysadm_r' -P staff test_u

Note : Pour pouvoir utiliser l'identité, il faut aussi ajouter une association avec un login.

Supprimer une identité SELinux

Pour supprimer l'identité SELinux test_u :

Exemple de code 5.3 : Supprimer une identité SELinux

# semanage user -d test_u

Note : Les identités SELinux créées par la politique (par opposition à celles créées par l'infrastructure de gestion) ne peuvent pas être supprimées.


[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


Imprimer

Voir tout

Dernière mise à jour le 15 octobre 2006

Résumé : Ce chapitre explique comment gérer SELinux avec les outils.

Chris PeBenito
Author

Camille Huot
Traducteur

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.