8.2. Creación y uso de una política SELinux para un contenedor personalizado
Para generar una política de seguridad SELinux para un contenedor personalizado, siga los pasos de este procedimiento.
Requisitos previos
-
La herramienta
podman
para la gestión de contenedores está instalada. Si no lo está, utilice el comandoyum install podman
. - Un contenedor Linux personalizado - ubi8 en este ejemplo.
Procedimiento
Instale el paquete
udica
:yum install -y udica
# yum install -y udica
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Como alternativa, instale el módulo
container-tools
, que proporciona un conjunto de paquetes de software para contenedores, incluidoudica
:yum module install -y container-tools
# yum module install -y container-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Inicia el contenedor ubi8 que monta el directorio
/home
con permisos de sólo lectura y el directorio/var/spool
con permisos de lectura y escritura. El contenedor expone el puerto 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 Tenga en cuenta que ahora el contenedor se ejecuta con el tipo de SELinux
container_t
. Este tipo es un dominio genérico para todos los contenedores en la política de SELinux y podría ser demasiado estricto o demasiado flojo para su escenario.Introduzca el comando
podman ps
para obtener el ID del contenedor: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 Cree un archivo JSON contenedor y utilice
udica
para crear un módulo de política basado en la información del archivo 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 Alternativamente:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Como sugiere la salida de
udica
en el paso anterior, cargue el módulo de política: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 Detenga el contenedor y vuelva a iniciarlo con la opción
--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
Pasos de verificación
Compruebe que el contenedor funciona con el tipo
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 Compruebe que SELinux permite ahora el acceso a los puntos de montaje
/home
y/var/spool
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Compruebe que SELinux permite el enlace sólo con el puerto 21:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Recursos adicionales
-
Para más información, consulte las páginas de manual
udica(8)
ypodman(1)
. - Para obtener orientación sobre cómo empezar con los contenedores en RHEL y cómo trabajar con imágenes de contenedores, consulte el documento Construir, ejecutar y gestionar contenedores.