SELinux (Security-Enhanced Linux) protège les ressources en permettant de définir une politique de contrôle d’accès obligatoire aux ressources d’un système Linux.
SELinux applique des règles d’accès définissant les actions autorisées entre les différents processus et ressources. Toute action non définie dans une règle n’est pas autorisée.
Sa principale fonction est de protéger les données utilisateurs contre toute utilisation inappropriée des services ou applications.
Mode de fonctionnement
SELinux a 3 modes de fonctionnement :
- Enforcing : Applique les politiques chargées
- Mode par défaut dans RHEL
- Permissive : Charge les politiques et est actif
- N’applique pas les règles de contrôle d’accès
- Logue les accès non autorisés
- Pour tester les applications et les règles, et résoudre les problèmes
- Disabled : SELinux est désactivé (déconseillé)
- Les actions ne sont ni refusées ni loguées
Contextes SELinux
Chaque ressource (fichier, répertoire, processus, port, …) possède une étiquette appelée contexte SELinux et se terminent généralement par _t
.
Les contextes sont stockes dans les attributs etendus des fichiers dans le filsystem.
L’étiquette correspond à une règle définie pour autoriser un processus à accéder à la ressource étiquetée.
Exemple :
unconfined_u:objetc_r:httpd_sys_content_t:S0/var/www/html/index.html |
Les étiquettes ont les champs :
- user :
unconfined_u
- role :
objetc_r
- type :
httpd_sys_content_t
- security level :
S0
- cible :
/var/www/html/index.html
Gestion des modes de fonctionnement
Modification
Les commandes getenforce
affiche le mode SELinux actuel et setenforce
modifie le mode SELinux :
# getenforce |
Definition persistante
Pour configurer SELinux de façon PERSISTANTE il faut modifier /etc/selinux/config
:
[...] |
Pour que la configuration soit prise en compte il faudra reboot la machine.
Gestion des contextes de fichiers
Les commandes semanage fcontext
, restorecon
et chcon
permettent de gérer le contexte SELinux des fichiers. Il est également possible de le lister avec ls -Z
.
Contexte par défaut et héritage
Les fichiers héritent ou concervent leurs contexte en fonction d’une copie ou d’un déplacement.
Ici 2 fichiers dans /tmp
avec le contexte propre au dossier /tmp
:
# ls -Z /tmp |
En déplaçant file_ToMove.txt
et en copiant file_ToCopy.txt
, on voit que seul le contexte de file_ToCopy.txt
a changé (puiqu’il s’agit d’un nouveau fichier, avec un inode différent, il a hérité du contexte du répertoire parent) :
# ls -Z /var/www/html/ |
Modifier le contexte
Les commandes chcon
et restorecon
permettent de changer et de restaurer un contexte de fichiers.
Ce répertoire a un contexte SELinux default_t
hérité de son répertoire parent :
# ls -Zd /My_Directory |
On change sont contexte en httpd_sys_content_t
avec chcon
:
# chcon -t httpd_sys_content_t /My_Directory |
On rétabli la valeur par défaut du contexte avec restorecon
:
# restorecon -v /My_Directory |
Gérer les politiques de contexte
Les commandes semanage fcontext
et restorecon
permettent de gérer et de restaurer un contexte de fichiers.
Pour lister TOUTES les politiques de contexte :
# semanage fcontext -l |
Pour ajouter une politique de contexte de fichier SELinux sur un répertoire :
# semanage fcontext -a -t httpd_sys_content_t '/MyDirectory(/.*)?' |
Pour restaurer le contexte par défaut sur un répertoire et toute sa sous-arboressence :
# restorecon -RFvv /MyDirectory |
Pour afficher les modifications :
# semanage fcontext -l -C |
⚠️ Important : Page du Manuel
MANUEL
– EXAMPLE
– – Remember to runrestorecon
after you set the file context
– – Add file-context for everything under /web
– –# semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
Gérer les politiques avec les booléens
Les commandes setsebool
, getbool
et semanage boolean -l
permettent de gérer les règles de politique SELinux de façon plus granulaire (propre aux applications).
Afficher les valeurs booléenes :
# getsebool -a |
Lister les booléens cgi
:
# getsebool -a | grep cgi |
Modifier le contexte de git_cgi_use_nfs
:
# setsebool git_cgi_use_nfs on |
Lister :
# getsebool -a | grep cgi |
Pour rendre une modification PERSISTANTE on utilise -P
:
# setsebool -P git_cgi_enable_homedirs on |
Après un reboot, lister :
# getsebool -a | grep cgi |
Afficher les valeurs booléenes et des informations supplémentaires :
# semanage boolean -l |
⚠️ Résumé des commandes
Commandes :
// Affiche|Modifie le contexte |
// Affiche le contexte |
// Gérer le contexte des FICHIERS |
Fichiers :
/etc/selinux/config // Modification PERSISTANTE |
Paquets pour gérer les contextes (restorecon
et ``semanage`):
policycoreutils
policycoreutils-python-utils
Résumé : Difference entre changement de contexte et booléen ?
- Changement de contexte (configuration génerale) =
getenforce
,setenforce
- Contexte = etiquette sur un fichier pour que SELinux puisse prendre des decisions sur les regle :
chcon
- Booléen = modification dans les regles elles memes, passage on|off :
setsebool
,getsebool
Documentation
https://fr.wikipedia.org/wiki/SELinux
MAN getenforce(8)
MAN setenforce(8)
MAN selinux_config(5)
MAN chcon(1)
MAN restorecon(8)
MAN semanage(8)
MAN semanage-fcontext(8)
MAN ftpd_selinux
MAN httpd_selinux
MAN booleans(8)
MAN getsebool(8)
MAN setsebool(8)
MAN semanage(8)
MAN semanage-boolean(8)