[ << ]
[ < ]
[ 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 ]
[ > ]
[ >> ]
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|