Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

A l'INSA-CVL, se connecter à la machine fedora-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 SSH 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.

A l'INSA-CVL, se connecter à la machine ubuntu-containers.

Podman sans SELinux

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

A l'INSA-CVL, se connecter à la machine fedora-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