Confinement des conteneur avec SELinux

Objectifs

  • Découvrir Podman et le confinement avec SELinux sous Fedora
  • Comparer avec AppArmor sous Ubuntu, et sans SELinux sous Fedora

Podman avec SELinux

Nous allons commencer par regarder comment SELinux est utilisé par podman pour cloisonner les conteneurs sur Fedora. Avec les machines vagrant :

$ vagrant up containers
$ vagrant ssh containers

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

Ouvrez un autre terminal, connectez vous à la machine via vagrant et cherchez le processus bash qui s’exécute dans le conteneur.

Pour cela vous pouvez chercher l’ID créé par podman pour ce conteneur :

$ sudo podman ps

Et ensuite chercher cet ID dans la liste des cgroups de votre système :

$ systemd-cgls

Une fois le PID du processus bash trouvé, pour pouvez regarder les information pour ce processus à l’aide de ps ou directement dans le fichier /proc/<PID>/staus :

$ ps afuxZ
$ cat /proc/<PID>/status | grep UID
  • 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 ?

Si vous avez besoin d’installer des commandes dans votre conteneur et que vous ne connaissez pas le nom du paquet à installer, vous pouvez directement demander à dnf de le chercher pour vous :

$ 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 le shell de ce nouveau conteneur ?

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 nouveau shell ?
  • 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.*

AppArmor sous Ubuntu

Reproduisez les commandes du TD ci dessus dans une machine Ubuntu qui utilise AppArmor. Tous les appels à podman peuvent être remplacés par des appels à Docker.

$ vagrant up ubuntu
$ vagrant ssh ubuntu

Podman sans SELinux

Reproduisez les commandes du TD ci dessus dans une machine Fedora dans laquelle nous allons désactiver SELinux.

$ vagrant up containers-noselinux
$ 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

Références