User Tools

Site Tools


informatique:linux:selinux

sécurité

SELinux

SELinux (Security-Enhanced Linux) est un module de sécurité pour les système Linux. Il a été développé par la NSA afin de limiter les accès des programmes et processus aux seuls fichiers dont ils ont besoin, ce qui évite les risques lorsqu'une faille de sécurité dans ceux-ci est exploité par un individu malveillant.

Il existes 3 modes/états de fonctionnement :

  • Enforcing = actif
  • Permissive = mêmes traitements que Enforcing, mais se contente de logger les blocages
  • Disable = module désactivé (nécessite de rebooter la machine)

On obtient le mode avec la commande getenforce ; on le modifie avec setenforce [0 | 1] (Permissive | Enforcing).

getenforce
 Enforcing
setenforce 0

Il existe 2 politiques :

  • targeted (seuls les démons réseaux sont surveillés)
  • strict (full protection)

SELinux implique un système de contexte = sorte de tag par fichier, qui est ensuite associé ou non à un processus. Pour obtenir les contextes des fichiers et processus on utilise les commandes classique ps et ls avec l'argument -Z ; sous Redhat le contexte retourné est de la forme : user:object (rôle):type.

ps -ZC sendmail
 LABEL                             PID TTY          TIME CMD
 system_u:system_r:sendmail_t     2710 ?        00:00:00 sendmail
 system_u:system_r:sendmail_t     2719 ?        00:00:00 sendmail

→ liste le contexte actuel du processus sendmail

ls -Z /usr/sbin/sendmail*
 lrwxrwxrwx  root root  system_u:object_r:sbin_t         /usr/sbin/sendmail -> /etc/alternatives/mta
 -rwxr-sr-x  root smmsp system_u:object_r:sendmail_exec_t /usr/sbin/sendmail.sendmail

→ liste le contexte réel de l'exécutable sendmail

Pour lister les mappages (= contextes souhaités, c'est à dire liste d'associations entre un chemin d'accès d'un fichier et un contexte) de la politique par défaut :

semanage fcontext -l

Liste des contextes souhaités de “/etc/mail” :

semanage fcontext -l | grep /etc/mail
 /etc/mail(/.*)?                           all files          system_u:object_r:etc_mail_t:s0
 /etc/mailman(/.*)?                        all files          system_u:object_r:mailman_data_t:s0
 /etc/mail/aliases                         regular file       system_u:object_r:etc_aliases_t:s0
 /etc/mail/aliases\.db                     regular file       system_u:object_r:etc_aliases_t:s0  

Pour modifier la base de contextes par défaut de SELinux :

semanage fcontext -a -t public_content_rw_t '/var/ftp/incoming(/.*)?'

On ajoute (-a) (ou on delete (-d)) le contexte (-t) public_content_rw_t au répertoire exact /var/ftp/incoming (qui va nous servir à déposer des fichiers en FTP pour les anonymes.

Pour changer le contexte de sécurité d'un fichier mais pas la base (conseillé) :

chcon -t <contexte> <fichier>

Pour restaurer le contexte de sécurité par défaut du fichier (listé dans la BD interne). C'est les recommandations donc utile uniquement pour les fichier système classiques (pas pour un programme home-made par exemple) :

restorecon -v <fichier>

Les contextes public_content_t et public_content_rw_t servent pour les fichiers qui doivent être accessibles depuis plusieurs services, respectivement en lecture seule ou écriture.

Les booléens déterminent si certaines règles s'appliquent lors de l'exécution ; liste des booléens pré-créés pour httpd :

getsebool -a | grep http
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_cvs_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_prewikka_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> on
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_rotatelogs_disable_trans --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_nfs --> off

Désactivation des CGI pour le démon httpd

setsebool -P httpd_enable_cgi 0

De la doc…

man httpd_selinux
man -k selinux

En installant le paquet setroubleshoot (sous Redhat) on peut utiliser des commande de troubleshooting :

yum intall setroubleshoot
service setroubleshoot start
sealert [<paquet>]
sealert -b
sealert -l <id_de_l'erreur>

system-config-selinux est l'outil graphique pour gérer SELinux.

Les logs de SELinux sont déposés dans /var/log/audit/audit.log.

informatique/linux/selinux.txt · Last modified: 2013/10/14 20:44 by 127.0.0.1