[ << ]
[ < ]
[ Sommaire ]
[ > ]
[ >> ]
2. Guide SELinux
Table des matières :
2.a. Charger une politique dans un noyau SELinux
Vous devez vous placer dans le rôle sysadm_r.
Exemple de code 1.1 : La commande semodule |
# semodule -B
|
2.b. Changer de rôle
Votre utilisateur doit avoir accès au rôle cible. Dans cet exemple, nous nous
mettons dans le rôle sysadm_r.
Exemple de code 2.1 : La commande newrole |
# newrole -r sysadm_r
|
2.c. Spécifier les rôles disponibles pour un utilisateur
Il y a une correspondance entre les utilisateurs Linux et les identités
SELinux. La politique dispose d'utilisateurs SELinux génériques selon les
configurations des rôles. Par exemple, pour associer l'utilisateur
pebenito à l'identité SELinux staff_u :
Exemple de code 3.1 : Associer pebenito à staff_u |
# semanage login -a -s staff_u pebenito
|
La politique n'a pas besoin d'être rechargée. Si l'utilisateur est connecté, il
doit simplement se reconnecter afin que les changements soient pris en compte.
2.d. Ré-étiqueter les systèmes de fichiers
Vous devez vous placer dans le rôle sysadm_r.
Exemple de code 4.1 : Ré-étiqueter |
# rlpkg -a
|
2.e. Ré-étiqueter un paquet individuel
En plus de pouvoir ré-étiqueter des systèmes de fichiers entiers, vous pouvez
aussi ré-étiqueter des paquets de Portage individuellement. Pour cela, vous
devez vous placer dans le rôle sysadm_r.
Exemple de code 5.1 : Exemple de rlpkg |
# rlpkg shadow sash
|
On utilise le script rlpkg avec un nombre quelconque de noms de paquets comme
arguments.
2.f. Chercher les bibliothèques qui utilisent les relocations de
textes
SELinux contient des protections améliorées de la mémoire. Une des
fonctionnalités supportées et d'autoriser les relocations de textes ELF. Les
bibliothèques avec des relocations de textes ont une étiquette spéciale et
l'outil rlpkg possède une option pour rechercher ces bibliothèques.
Exemple de code 6.1 : Chercher les TEXTREL |
# rlpkg -t
|
Cela sera également effectué après un ré-étiquetage complet.
2.g. Démarrer les démons dans le bon domaine
Contrôler les démons qui possèdent des scripts d'initialisation dans
/etc/init.d est très légèrement différent avec SELinux. La
commande run_init doit être utilisée pour lancer les scripts, afin de
s'assurer qu'ils soient exécutés dans le bon domaine. La commande est
identique, excepté qu'elle est préfixé par run_init. Vous devez être
dans le rôle sysadm_r.
Exemple de code 7.1 : Exemples d'utilisation de run_init |
# run_init /etc/init.d/ntpd start
# run_init /etc/init.d/apache2 restart
# run_init /etc/init.d/named stop
|
Intégration de run_init dans Gentoo
run_init a été intégré dans le système de scripts d'initialisation de
Gentoo. Avec SELinux installé, les services peuvent être démarrés et arrêtés
comme d'habitude, sauf que maintenant ils authentifieront l'utilisateur.
Exemple de code 7.2 : Exemple avec run_init une fois intégré |
# /etc/init.d/sshd restart
Authenticating root.
Password:
* Stopping sshd... [ ok ]
* Starting sshd... [ ok ]
|
2.h. Basculer entre les modes enforcing et permissive
Basculer entre les différents modes de SELinux est très simple. Envoyez 1 pour
enforcing ou 0 pour permissive au fichier /selinux/enforce pour
définir le mode. En lisant le contenu du fichier, vous obtiendrez le mode
courant. Si l'option du noyau « NSA SELinux Development Support » est
désactivée, le système sera toujours en mode enforcing et ne pourra pas être
passé en mode permissive.
Exemple de code 8.1 : Lire et régler le mode enforce |
# cat /selinux/enforce
# echo 1 > /selinux/enforce
# echo 0 > /selinux/enforce
|
Une machine dont le support du développement a été activé dans le noyau peut
être démarrée en mode enforcing en spécifiant l'option enforcing=1 sur
la ligne de commande de démarrage du noyau dans le chargeur de démarrage (Grub,
LILO, etc.).
Définir le mode au démarrage
En sus des options du noyau mentionnées précédemment, le mode de démarrage peut
être défini dans le fichier /etc/selinux/config.
Exemple de code 8.2 : /etc/selinux/config |
# SELINUX can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=
|
Le réglage défini dans ce fichier sera écrasé par la valeur donnée en argument
du noyau décrite précédemment.
2.i. Comprendre le retour de la commande sestatus
L'outil sestatus nous permet de récupérer des informations détaillées à
propos des spécificités de SELinux. L'option -v nous fournit des détails
supplémentaires à propos des contextes des processus et des fichiers. Le
résultat de la commande est divisé en quatre sections. Sestatus ne donne des
informations complètes qu'à un utilisateur connecté en root ou bien se trouvant
dans le rôle sysadm_r.
Exemple de code 9.1 : Exemple de rapport sestatus |
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Policy version: 18
|
Les informations principales du rapport sont fournies dans la première section.
La première ligne montre si les fonctions du noyau SELinux existent et sont
activées. Si le statut est désactivé (disabled), soit le noyau n'a pas le
support SELinux, soit la politique n'est pas chargée. La seconde ligne montre
le point de montage du système de fichiers SELinux. Lors d'une utilisation
normale, ce sera /selinux. La troisième ligne montre le mode SELinux
courant, soit enforcing, soit permissive. La quatrième ligne montre la version
de la base de données de la politique supportée par le noyau actuel.
Exemple de code 9.2 : Quelques booléens |
Policy booleans:
secure_mode inactive
ssh_sysadm_login inactive
user_ping inactive
|
La seconde section affiche l'état des booléens concernant la politique. La
colonne de gauche contient le nom du booléen et celle de droite son état :
active ou inactive. Cette section n'existe pas avec les noyaux en version 15.
Exemple de code 9.3 : Exemple de contextes de processus |
Process contexts:
Current context: pebenito:sysadm_r:sysadm_t
Init context: system_u:system_r:init_t
/sbin/agetty system_u:system_r:getty_t
/usr/sbin/sshd system_u:system_r:sshd_t
|
La troisième section affiche les contextes des processus courants ainsi que de
quelques processus importants. Si un processus est exécuté dans un contexte
incorrect, il ne fonctionnera pas correctement.
Exemple de code 9.4 : Exemple de contextes de fichiers |
File contexts:
Controlling term: pebenito:object_r:sysadm_devpts_t
/sbin/init system_u:object_r:init_exec_t
/sbin/agetty system_u:object_r:getty_exec_t
/bin/login system_u:object_r:login_exec_t
/sbin/rc system_u:object_r:initrc_exec_t
/sbin/runscript.sh system_u:object_r:initrc_exec_t
/usr/sbin/sshd system_u:object_r:sshd_exec_t
/sbin/unix_chkpwd system_u:object_r:chkpwd_exec_t
/etc/passwd system_u:object_r:etc_t
/etc/shadow system_u:object_r:shadow_t
/bin/sh system_u:object_r:bin_t -> system_u:object_r:shell_exec_t
/bin/bash system_u:object_r:shell_exec_t
/bin/sash system_u:object_r:shell_exec_t
/usr/bin/newrole system_u:object_r:newrole_exec_t
/lib/libc.so.6 system_u:object_r:lib_t -> system_u:object_r:shlib_t
/lib/ld-linux.so.2 system_u:object_r:lib_t -> system_u:object_r:shlib_t
|
La quatrième section affiche les contextes du terminal contrôlant le processus
courant ainsi que de quelques fichiers importants. Pour les liens symboliques,
le contexte du lien ainsi que celui de la cible de celui-ci sont affichés. Si
un fichier a un contexte incorrect, le fichier peut être inaccessible ou
posséder des permissions incorrectes par rapport à un processus en particulier.
[ << ]
[ < ]
[ Sommaire ]
[ > ]
[ >> ]
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|