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