SELinux fonctionne avec des politiques ciblées qui définissent les actions autorisées. Les politiques décrivent les types de processus, les contextes de fichier ou de port, en posant des étiquettes sur les processus et les ressources et déterminent l’action à autoriser.
S’il n’existe pas d’entrée pour un processus, une ressource ou une action spécifique, l’action demandée sera refusée et la tentative sera écrite dans le fichier logs /var/log/audit/audit.log
sous forme de message AVC (Access Vector Cache) et un résumé sera également écrit dans /var/log/messages
.
Compréhension des problèmes liés à SELinux
/!\ Avant de modifier la configuration de SELinux il faut savoir que la pluparts des problèmes d’accès surviennent quand des services sont incorrectement implémentés ou quand des applications comportent des politiques incomplètes.
AVC - Access Vector Cache
Lorsque qu’une action est refusée par SELinux, un message AVC (Access Vector Cache) est écrit dans /var/log/audit/audit.log
et un résumé AVC est également écrit dans /var/log/messages
.
Afficher des évènements
Afficher tous les évènements. Tous les AVC deny sont des refus de SELinux :
# sealert -a /var/log/audit/audit.log |
Trouver l’UUID de l’AVC et avoir une suggestion de résolution :
# tail /var/log/messages |
Afficher le détail de l’AVC à l’aide de son UUID :
# sealert -l UUID |
La commande ausearch
permet de directement rechercher dans /var/log/audit/audit.log
et permet aussi d’avoir une suggestion de résolution. L’option -m
précise le type de message à rechercher et -ts
une unité de temps :
# ausearch -m AVC -ts today |
Aide de sealert
Extrait de l’aide :
Usage: sealert [options] |
Régler les problèmes liés à SELinux
Le détail des commandes sealert -l
, ausearch -m
et des fichiers /var/log/audit/audit.log
et /var/log/messages
donnent des indications pour résoudre les problèmes liés à SELinux.
Exemple
Il est impossible d’acceder à la page index.html
d’un site hébergé sur Apache :
# tail /var/log/audit/audit.log |
[...] |
On cherche l’UUID de l’AVC qui pose problème.
# tail /var/log/messages |
[...] |
La commande sealert
décrit l’événement et précise :
- le processus concerné
- le fichier consulté
- l’action tentée et refusée
- Des conseils pour corriger l’étiquette du fichier ou comment générer une nouvelle politique pour autoriser l’action refusée
- La partie
Raw Audit Messages
donne des informations extraites de/var/log/audit/audit.log
# sealert -l 94b82g17-5a83-24df-94bd-ef56ca5b7eb7 |
SELinux is preventing /usr/sbin/httpd from getattr access on the file /my_website/index.html. |
Autre exemple, ici il est précisé le bon contexte à appliquer (httpd_sys_content_t
) :
# sealert -l 32a6b565-58942-dadf-5687-cf55bcuaa159 |
SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. |
La commande ausearch
permet de directement rechercher dans /var/log/audit/audit.log
. L’option -m
précise le type de message à rechercher et -ts
temps.
Cette commande nous précise l’origine de l’alerte :
- processus : Web Apache httpd
- fichier : /my_website/index.html
- contexte : system_r:httpd_t
# ausearch -m AVC -ts today |
[...] |
Vérifier en listant le contexte :
# ls -ldZ /my_website/index.html |
drwxr-xr-x. 2 root root system_u:object_r:default_t:s0 6 Mar 21 11:47 /my_website/index.html |
Application du bon contexte httpd_sys_content_t
:
# semanage fcontext -a -t httpd_sys_content_t '/my_website(/.*)?' |
Et en restituant le contexte :
# restorecon -Rv /my_website |
Relabeled /my_website from unconfined_u:object_r:default_t:s0 to |
Vérifier en listant le contexte :
# ls -ldZ /my_website/index.html |
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Mar 21 11:47 /my_website/index.html |
/!\ Résumé des commandes
Commandes
# sealert |
Fichiers
/var/log/audit/audit.log // logs SELinux (audit : message AVC (Access Vector Cache)) |
Paquets
setroubleshootserver |
Cas pratique
Analyse et résolution des problèmes liés à SELinux
La page Web http://SERVER01/index.html renvoie un message d’erreur : Forbidden.
Forbidden You don't have permission to access this resource. |
Afficher les occurences de sealert
avec less
dans le fichier /var/log/messages
. (Symbole /
pour faire une recherche, n
pour next et q
pour quitter) :
[root@SERVER01 ~]# less /var/log/messages |
[...] |
Exécution de la commande sealert
suggérée, elle précise que l’étiquette de contexte du fichier /MyBlog/index.html
est incorrecte :
[root@SERVER01 ~]# sealert -l 9a96294a-264a-5972-2c6e-59f5ec64d88 |
SELinux is preventing /usr/sbin/httpd from getattr access on the file /MyBlog/index.html. |
La section Raw Audit Messages de sealert
extrait ses informations de /var/log/audit/audit.log
. La commande ausearch
permet d’y faire une recherche.
Les options de ausearch
:
m
: recherche sur le type de messagets
: précise une date
Ici le processus en cause est le serveur Web Apache httpd
, le fichier est /MyBlog/index.html
et le contexte est system_r:httpd_t
:
[root@SERVER01 ~]# ausearch -m AVC -ts today |
[...] |
Comparaison du contexte SELinux du répertoire par défaut /var/www/html
du service httpd
car le contexte httpd_sys_content_t
conviendra pour /MyBlog/index.html
:
[root@SERVER01 ~]# ls -ldZ /var/www/html |
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Sep 11 21:12 /var/www/html |
Application du contexte httpd_sys_content_t
:
[root@SERVER01 ~]# semanage fcontext -a -t httpd_sys_content_t '/MyBlog(/.*)?' |
[root@SERVER01 ~]# restorecon -Rv /MyBlog |
Il sera maintenant possible d’accéder à http://SERVER01/index.html.
Cat's Awesome Page Hello Cats ! Cats rule the WWW !!! (And #FreePaulWatson) |
Gestion de la sécurité avec SELinux
La page Web http://SERVER01/experiments.html. renvoie un message d’erreur : Forbidden.
Forbidden You don't have permission to access this resource. |
Afficher les occurences de sealert
avec less
dans le fichier /var/log/messages
. (Symbole /
pour faire une recherche, n
pour next et q
pour quitter) :
[root@SERVER01 ~]# less /var/log/messages |
[...] |
Exécution de la commande sealert
suggérée, elle précise que l’étiquette de contexte du fichier /MyBlog/index.html
est incorrecte :
[root@SERVER01 ~]# sealert -l 35c9e452-2552-4ca3-8217-493b72ba6d0b |
SELinux is preventing /usr/sbin/httpd from getattr access on the file /experimentscontent/experiments.html. |
La section Raw Audit Messages de sealert
extrait ses informations de /var/log/audit/audit.log
. La commande ausearch
permet d’y faire une recherche.
Les options de ausearch
:
m
: recherche sur le type de messagets
: précise une date
Ici le processus en cause est le serveur Web Apache httpd
, le fichier est /MyBlog/index.html
et le contexte est system_r:httpd_t
:
[root@SERVER01 ~]# ausearch -m AVC -ts recent |
[...] |
Comparaison du contexte SELinux du répertoire par défaut /var/www/html
du service httpd
car le contexte httpd_sys_content_t
conviendra pour /experiments-content
:
[root@SERVER01 ~]# ls -dZ /experiments-content /var/www/html |
unconfined_u:object_r:default_t:s0 /experiments-content |
Application du contexte httpd_sys_content_t
:
[root@SERVER01 ~]# semanage fcontext -a -t httpd_sys_content_t '/experiments-content(/.*)?' |
[root@SERVER01 ~]# restorecon -R /experiments-content/ |
Il sera maintenant possible d’accéder à http://SERVER01/experiments.html :
Experiments Put water on the fire and wait for it to boil. What happens? The fire goes out. |
Documentation
man mandb
man sealert
man ausearch
apropos _selinux