selinux en bref
Quelques rappels selinux :
-
arret/relance provisoire de selinux (pour verifier un blocage par exemple...)
setenforce [ Permissive Enforcing ] -
infos diverses
getstatus
ps -ef -Z
ls -lZ -
si selinux est en mode permissif ou a été désactivé, il sera necessaire de ré-étiquettée tous les fichiers si l'on veut relancer selinux.
pour réaliser cette opération au prochain démarrage, il faut créer un fichier /.autorelabel
su -lc 'touch /.autorelabel'
-
modification context provisoire (ne resistera pas au restorecon...)
chcon system_u:object_r:admin_home_t:s0 /custom/index.html
chcon --reference=/var/www/html/index.html /custom/index.html
-
contexte selinux :
source : http://doc.fedora-fr.org/wiki/SELinux
- un contexte selinux est présenté de la manière suivante
utilisateur:rôle:type:niveau
- utilisateurs : tout utisateur linux est mappé par un utilisateur Selinux (dont il hérite des droits et restrictions)
semanage login -l
- roles : intermédiares entre utilisateurs et domaines selinux
ex : dossiers personnels des utilisateurs, type = home_user_t
- liste des contextes auxquels peut accéder un processus :
ex pour httpd (yum install setools-console)
sesearch --allow -s httpd_t -c file -p write
voir ici pour la commande sesearch : https://www.server-world.info/en/note?os=CentOS_7&p=selinux&f=11
tout fichier qui ne sera pas étiqueté avec l'un de ces contextes sera inaccessibles par le processus httpd
-
création d'un module selinux (ou pas)
sealert -a /var/log/audit/audit.log|less -> nb: yum install setroubleshoot-server
- soit on repositionne le context comme il devrait être :
restorecon -v /custom/index.html
- soit création d'un module pour confirmer l'exception (definitivement) :
ausearch -c "nginx" --raw | audit2allow -M my-nginx -> création fichier my-nginx.pp et .te
semodule -i my-nginx.pp -> application du module
-
permettre à httpd d'acceder à un dossier
On peut utiliser la commande chcon mais en cas d'autorelabel ou de restorecon, le fichier perdra ses droits
Donc il est préférable d'utiliser semanage...
- definition d'un contexte de type "httpd_sys_content_t" sur le repertoire '/custom' et tous les fichiers dessous
semanage fcontext -a -t httpd_sys_content_t '/custom(/.*)?'
creation du contexte dans le fichier '/etc/selinux/targeted/contexts/files/file_contexts.local'
source : redhat
- application du contexte
restorecon -Rv /custom
- suppression du contexte (ne pas virer dans le fichier ci-dessus)
semanage fcontext -d '/custom'
- lister les différents contexte ( rappel : man semanage-fcontext)
# list defaullt context
semanage fcontext -l
# list context customisés...pas ceux le base
semanage fcontext -l
- appliquer un contexte depuis celui d'un autre fichier
# on applique le contexte de truc.conf sur httpd.conf
chcon --reference=/etc/sshd.truc.conf /etc/httpd/httpd.conf
- lister les contexts selinux sur un fichier :
ls -lZ
format renvoyé : user:object:type:level
-
probleme avec vsftp
# retourne les problemes rencontrés par selinux audit2allow -a # génération d'une règle locale pour résoudre le soucis ( .pp .te ) audit2allow -a -M vsftp # application de la règle semodule -i vsftp Ps : audit2allow ne génère qu'une règle à la fois (genre ecriture, create, delete...) donc il faut generer une règle à chaque problème selinux. Pour VSFTP, il suffit de postionnerle booleen ftpd_full_access pour régler tous les soucis !!! setsebool -P ftpd_full_access 1
-
problème sur les dossiers imbriqués avec des contextes differents
problème connu chez RH : https://bugzilla.redhat.com/show_bug.cgi?id=678577
# création d'une arbo pour test [root] # mkdir -p /test/test{1..2} [root] # tree /test/ /test/ ├── test1 └── test2 # creation/application d'un context sur /test/test2 [root] # semanage fcontext -a -t etc_t '/test/test2(/.*)?' [root] # restorecon -Rv /test/test2 restorecon reset /test/test2 context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:etc_t:s0 # verif [root] # ll -Z /test/ drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 test1 drwxr-xr-x. root root unconfined_u:object_r:etc_t:s0 test2 # création/application d'un context sur /test [root] # semanage fcontext -a -t httpd_sys_content_t '/test(/.*)?' [root] # restorecon -Rv /test restorecon reset /test context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /test/test1 context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /test/test2 context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 # OUPS : la commande ecrase le contexte posé precedemment sur /test/test2 [root] # ll -Z /test drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 test1 drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 test2 # visualisation des contextes [root] # cat /etc/selinux/targeted/contexts/files/file_contexts.local # This file is auto-generated by libsemanage # Do not edit directly. /test/test2(/.*) system_u:object_r:etc_t:s0 /test(/.*)? system_u:object_r:httpd_sys_content_t:s0 # on a bien deux contextes différents :) # et pourtant /test/test2 est écrasé # MORALITE : c'est la dernière ligne du fichier qui a raison !!!!!!!!
-
restauration du contexte "par defaut"
- commande "matchpathcon" permet de connaitre le contexte que devarit posseder le fichier
matchpathcon /var/www/html/selinux/selinux.html
- restaurer le contexte qui aurait du être appliqué
restorecon -v /var/www/html/selinux/selinux.html
-
booléens Selinux :
Permettent de modifier une politique Selinux sans aucune connaissance, sans compi et sans relancer quoi que ce soit...
source : http://doc.fedora-fr.org/wiki/SELinux
- lister les booléens
semanage boolean -l (liste avec baratin)
semanage boolean -lC (liste avec baratin)
getsebool -a (liste sans baratin)
gestsebool boolean -l|grep httpd
- exemple : activer l'activation des mails depuis httpd
gestsebool boolean -l|grep httpd|grep mail
setsebool -P httpd_can_sendmail on (-P rend la directive permanente)
Ps : installer tous les man
yum search selinux yum install selinux-policy-devel mandb man semanage-fcontext
Résumé des commandes
Consultation :
sestatus : afficher le status actuel de SELinux,
getenforce : obtenir le mode SELinux courant de votre machine,
ls -Z : afficher la liste des fichiers et dossiers ainsi que leur contexte SELinux avec la commande ls (pour plus d'options, consultez le man ls),
ps -Z : afficher la liste des processus ainsi que leur contexte SELinux avec la commande ps (pour plus d'options, consultez le man pas),
sesearch : effectuer une recherche dans la politique actuellement configurée pour votre machine,
getsebool : obtenir des informations sur les booléens,
matchpathcon : afficher le contexte que devrait posséder un fichier.
Modification
setenforce : modifier le mode SELinux de votre machine,
setsebool : modifier la valeur d'un booléen,
restorecon : restaurer un contexte en fonction de la politique courante,
chcon : modifier le contexte SELinux d'un fichier,
semanage : gérer les politiques SELinux.
Pour plus d'informations sur l'une des commandes pré-citées, je vous invite à consulter la page de manuel correspondante (man macommande).
A visiter : https://www.thegeekstuff.com/2017/07/chcon-command-examples/