Aller au contenu

SELinux

·
redhat sécurité
Jérémy Norgol
Auteur
Jérémy Norgol
Consultant ingénieur Linux Devops
RH134 - Cet article fait partie d'une série.
Partie 33: Cet article

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 / Disable
  • setenforce 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
Lorsque vous modifiez le contexte SELinux d’un fichier ou répertoire avec la commande 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.

RH134 - Cet article fait partie d'une série.
Partie 33: Cet article

Articles connexes

Gestion des utilisateurs et des groupes locaux
redhat sécurité
ACL - Access Control List et cie
redhat
Cron - Le plannificateur de tâche
redhat