SELinux
Ce TD est à réaliser dans une machine virtulle Fedora avec le serveur web Apache installé et activé. Avec les machines vagrant :
$ vagrant up selinux
$ vagrant ssh selinux
Objectifs
- Découvrir SELinux
- Gestion des contextes et des booléens
État de SELinux
Avant de modifier la politique SELinux, commençons par afficher l’état de SELinux et de la politique actuellement chargée :
$ sestatus -v
$ cat /etc/selinux/config
$ getenforce
$ seinfo
Contextes fichiers et processus
- Question 1 : Sous quel contexte le shell de l’utilisateur courant s’exécute-il ?
- Question 2 : Quel sont les contextes associés aux fichiers ou répertoires suivants :
/usr/bin
/etc/shadow
/etc/passwd
/home
/home/vagrant
/root
/var/www
/tmp
- Question 3 : Quel sont les contextes associés aux processus suivants :
- démon
sshd
; - démon
httpd
; init
(systemd
).
- démon
Indices
Vous pouvez vous aider des commandes :
$ ps -eZ
$ ls -Z
Gestion des booléens
Comme la politique par défaut ne peut pas couvrir l’ensemble des usages possibles de chaque logiciel potentiellement installables sur un système, nous allons mettre en place une configuration de serveur web classique et utiliser les booléens pour autoriser ce fonctionnement dans la politique SELinux.
Nous allons mettre en place un hébergement web statique à la disposition des utilisateurs en utilisant Apache.
Créez le dossier /home/vagrant/public_html
et un ficher dans ce dossier :
$ mkdir /home/vagrant/public_html
$ echo "Hello SELinux" > /home/vagrant/public_html/test
Donnez le droit à tout le monde de traverser le dossier /home/vagrant
pour qu’Apache puisse accéder à /home/vagrant/public_html
:
$ chmod o+x /home/vagrant
$ ls -l /home/vagrant
Dans la configuration d’Apache (/etc/httpd/conf.d/userdir.conf
) :
- Commentez la directive
UserDir disabled
- Décommentez la directive
UserDir public_html
Redémarrez Apache :
$ systemctl restart httpd.service
Essayez de récupérer le contenu du fichier précedement créé avec la commande curl
:
$ curl http://localhost/~vagrant/test
Cette opération doit normalement échouer.
Consulter les logs pour obtenir des informations :
$ sudo journalctl -e
$ sudo tail /var/log/httpd/error_log
$ sudo tail /var/log/audit/audit.log
Cherchez si une règle n’existe pas déjà dans la politique pour autoriser cet accès :
$ ls -alZ ~/public_html/
$ sesearch -v --allow -s httpd_t -t httpd_user_content_t
Affichez toutes les règles ajoutées par le booléen httpd_enable_homedirs
:
$ sesearch --allow -b httpd_enable_homedirs
Inspectez l’état de l’ensemble des booléens disponibles dans la politique :
$ getsebool -a
Activez le booléen pour autoriser Apache à lire le contenu du dossier public_html
dans les répertoires utilisateurs :
$ sudo setsebool httpd_enable_homedirs on
Essayez à nouveau d’obtenir la page web :
$ curl http://localhost/~vagrant/test