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