Confinement des conteneur avec SELinux
Objectifs
- Découvrir Podman et le confinement avec SELinux sous Fedora
Podman, Docker et SELinux
Toutes les manipulations qui vont suivre sont à effectuer dans deux machines virtuelles en parallèle (une avec SELinux, ici Fedora, et une sans SELinux, ici Ubuntu) pour pouvoir comprendre l’impact de SELinux sur l’isolation des conteneurs avec Podman et Docker. Tous les appels à podman peuvent être remplacés par des appels à Docker dans les commandes qui suivent.
Avec les machines vagrant :
$ vagrant up ubuntu containers containers-noselinux
Ouvrez ensuite trois terminaux distincts pour vous connecter aux trois machines :
$ vagrant ssh ubuntu
$ vagrant ssh containers
$ vagrant ssh containers-noselinux
Pour désactiver SELinux sur la machine virtuelle Fedora containers-noselinux
, voir les instructions dans le fichier de configuration /etc/selinux/config
:
$ sudo grubby --update-kernel ALL --args selinux=0
$ sudo reboot
Commandes podman & docker
Sur les machines Fedora, vous pouvez utiliser podman. Sur la machine Ubuntu, vous pouvez remplacer podman par docker dans les commandes ci dessous.
Récupération d’une image de conteneur
Récupérez directement du registre public l’image officiel de conteneur Fedora :
$ sudo podman pull fedora
Vérifiez qu’elle a bien été importée avec la commande :
$ sudo podman images
Par défault, c’est la version latest
de l’image qui est téléchargée.
Confinement avec SELinux
Pour lancer un shell interactif dans un conteneur utilisant cette image :
$ sudo podman run -it fedora bash
- Question 1 : Sous quel utilisateur tourne ce shell ?
- Question 2 : Est-ce le même à l’intérieur et à l’extérieur du conteneur ?
- Question 3 : Sous quel contexte SELinux et quelles catégories tourne ce processus ?
Vous pouvez vous aider des commandes suivantes pour répondre aux questions :
$ id -Z
$ sudo podman ps
$ systemd-cgls
$ ps afuxZ
$ lsns
Pour installer une commande avec dnf
sans connaître le nom du paquet :
$ dnf install /usr/bin/ps
Pour trouver quel paquet inclu un fichier :
$ rpm -qf /usr/bin/ps
Lancez un deuxième shell dans un deuxième conteneur en parallèle.
- Question 4 : Sous quel utilisateur, contexte SELinux et quelles catégories tourne ce processus ?
Lancez un nouveau shell avec la commande :
$ sudo podman run -it --rm --privileged --volume /:/host fedora bash
- Question 5 : Sous quel utilisateur, contexte SELinux et quelles catégories tourne ce processus ?
- Question 6 : Quels sont les risques présentés par cette commande ?
Inspirez-vous de la commande suivante pour obtenir des informations sur les accès autorisés par la politique SELinux pour le domaine container_t
:
$ sesearch -A -s container_t /etc/selinux/targeted/policy/policy.*