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

Références