Security-Enhanced Linux, est un module de controle d’accès, de politique de sécurité agissant dès le kernel.
Mode de SELinux #
- Enforcing : Activé (par défaut sous RedHat, CentOs, Fedora)
- Permissive : Désactivé mais avec logs activés
- Désactivé
Voir le statut #
sestatus
getentforce
Activé / Désactivé #
setenforce 0
=> Permissive / Disablesetenforce 1
=> Enable
Configuration générale
/etc/selinux/config
SELINUX=enforcing
#SELINUX=disabled
Petite commande avant de reboot après avoir fais des modifications de SELinux: touch /.autorelabel
.
Labels #
Voilà à quoi ressemble la structure d’un label et qui traduit les politiques de sécurités utilisé par SELinux: user:role:type:level
Les labels sont attribués à la fois aux fichiers, aux processus et aux sockets réseaux:
Changer le type dans un label:
chcon -t httpd_sys_content_t FILENAME
semanage -t httpd_sys_content_t FILENAME
Fichier #
Lister le label d’un fichier:
[root@Redhat ~]# ls -lZ /usr/sbin/httpd
-rwxr-xr-x. root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
[root@Redhat ~]#
Lister le label d’un répertoire:
[root@Redhat ~]# ls -dZ /etc/httpd
-rwxr-xr-x. root root system_u:object_r:httpd_config_t:s0 /etc/httpd
[root@Redhat ~]#
Processus #
[root@Redhat ~]# ps axZ |grep httpd
system_u:system_r:httpd_t:s0 21289 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 21292 ? S 0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 21293 ? S 0:00 /usr/sbin/httpd -DFOREGROUND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 4128 pts/0 S+ 0:00 grep--color=auto httpd
[root@Redhat ~]#
Socket réseau #
[root@Redhat ~]# netstat -tnlpZ |grep http
tcp6 0 0:::80 ::* LISTEN
21289/httpd system_u:system_r:httpd_t:s0
Commande de gestion de SELinux avec semanage #
1. semanage login
#
Associer un utilisateur Linux à un utilisateur SELinux :
sudo semanage login -a -s user_u utilisateur
2. semanage user
#
Lister les utilisateurs SELinux :
sudo semanage user -l
3. semanage port
#
Associer un port à un service spécifique (par exemple Apache sur le port 8080) :
sudo semanage port -a -t http_port_t -p tcp 8080
4. semanage interface
#
Associer une interface réseau à un type SELinux :
sudo semanage interface -a -t netif_t eth0
5. semanage module
#
Gérer les modules de politique SELinux (par exemple, désactiver un module) :
sudo semanage module -d module_name
6. semanage node
#
Associer une adresse IP à un type de nœud spécifique :
sudo semanage node -a -t httpd_t -p tcp 192.168.1.10
7. semanage fcontext
(file context)
#
Définir un contexte SELinux pour un répertoire ou un fichier :
sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
8. semanage boolean
#
Activer/désactiver des booleans SELinux (par exemple, permettre l’accès aux home directories pour Apache) :
sudo setsebool -P httpd_enable_homedirs on
9. semanage permissive
#
Définir un domaine en mode permissif (logs mais sans bloquer) :
sudo semanage permissive -a httpd_t
10. semanage dontaudit
#
Masquer les logs d’audit pour certaines actions :
sudo semanage dontaudit -t httpd_t
Ces commandes permettent de configurer et gérer efficacement la politique SELinux selon les besoins de sécurité du système.
Booleans #
Obtenir la liste de tout les booléens:
getsebool -a
semanage boolean -l
Activer ou désactiver un booléen:
setsebool -P boolean_name on/off
Vérifier les logs d’erreur de SELinux ici journalctl
.
Exemple technique #
Sur un serveur Red Hat Enterprise Linux (RHEL) 9, la sécurité est renforcée par SELinux (Security-Enhanced Linux), un module qui contrôle les accès des services aux fichiers. Dans ce cas, le serveur ServerB, qui héberge le service Apache HTTP Server, rencontre un problème d’accès à un répertoire spécifique, /var/www/html/mydirectory
. SELinux bloque cet accès par défaut pour des raisons de sécurité.
Objectif : L’objectif est de modifier la politique SELinux pour autoriser Apache à accéder au répertoire cible, tout en minimisant l’impact sur les autres applications et en garantissant que ces modifications persistent après un redémarrage du serveur.
- 1. Vérifier le contexte SELinux actuel :
ls -ldZ /var/www/html/mydirectory
- 2. Appliquer le bon contexte SELinux :
Attribuer le contexte correct pour Apache au répertoire et ses sous-répertoires :
sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html/mydirectory(/.*)?'
- 3. Appliquer le nouveau contexte :
sudo restorecon -Rv /var/www/html/mydirectory
semanage fcontext
, la commande restorecon
est nécessaire pour appliquer ce contexte aux fichiers sur le système. Sans restorecon
, le changement défini par semanage
ne prendra pas effet.
- 4. Vérifier le changement de contexte :
ls -ldZ /var/www/html/mydirectory
- 5. Redémarrer Apache :
sudo systemctl restart httpd
Avec ces commandes, Apache pourra accéder à ce répertoire tout en maintenant une sécurité SELinux adéquate.