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
.