9.2. Création et utilisation d'une politique SELinux pour un conteneur personnalisé
Pour générer une politique de sécurité SELinux pour un conteneur personnalisé, suivez les étapes de cette procédure.
Conditions préalables
-
L'outil
podman
de gestion des conteneurs est installé. Si ce n'est pas le cas, utilisez la commandednf install podman
. - Un conteneur Linux personnalisé - ubi8 dans cet exemple.
Procédure
Installez le paquetage
udica
:dnf install -y udica
# dnf install -y udica
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous pouvez également installer le module
container-tools
, qui fournit un ensemble de logiciels de conteneurs, dontudica
:dnf module install -y container-tools
# dnf module install -y container-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Démarrez le conteneur ubi8 qui monte le répertoire
/home
avec des autorisations de lecture seule et le répertoire/var/spool
avec des autorisations de lecture et d'écriture. Le conteneur expose le port 21.podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
# podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Notez que le conteneur fonctionne maintenant avec le type SELinux
container_t
. Ce type est un domaine générique pour tous les conteneurs dans la politique SELinux et il peut être trop strict ou trop lâche pour votre scénario.Ouvrez un nouveau terminal et entrez la commande
podman ps
pour obtenir l'ID du conteneur :podman ps
# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37a3635afb8f registry.access.redhat.com/ubi8:latest bash 15 minutes ago Up 15 minutes ago heuristic_lewin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un fichier JSON de conteneur et utilisez
udica
pour créer un module de politique basé sur les informations contenues dans le fichier JSON :podman inspect 37a3635afb8f > container.json udica -j container.json my_container
# podman inspect 37a3635afb8f > container.json # udica -j container.json my_container Policy my_container with container id 37a3635afb8f created! [...]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Alternativement :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Comme le suggère la sortie de
udica
à l'étape précédente, chargez le module de politique :semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
# semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Arrêtez le conteneur et redémarrez-le avec l'option
--security-opt label=type:my_container.process
:podman stop 37a3635afb8f podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
# podman stop 37a3635afb8f # podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Vérifiez que le conteneur fonctionne avec le type
my_container.process
:ps -efZ | grep my_container.process
# ps -efZ | grep my_container.process unconfined_u:system_r:container_runtime_t:s0-s0:c0.c1023 root 2275 434 1 13:49 pts/1 00:00:00 podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash system_u:system_r:my_container.process:s0:c270,c963 root 2317 2305 0 13:49 pts/0 00:00:00 bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifiez que SELinux autorise désormais l'accès aux points de montage
/home
et/var/spool
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifiez que SELinux n'autorise que la connexion au port 21 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow