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).
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

Références