8.2. Criação e utilização de uma política SELinux para um contêiner personalizado
Para gerar uma política de segurança SELinux para um contêiner personalizado, siga as etapas deste procedimento.
Pré-requisitos
-
A ferramenta
podman
para o gerenciamento de containers está instalada. Caso não esteja, use o comandoyum install podman
. - Um recipiente Linux personalizado - ubi8 neste exemplo.
Procedimento
Instale o pacote
udica
:yum install -y udica
# yum install -y udica
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Alternativamente, instale o módulo
container-tools
, que fornece um conjunto de pacotes de software de contêineres, incluindoudica
:yum module install -y container-tools
# yum module install -y container-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Inicie o recipiente ubi8 que monta o diretório
/home
com permissões de leitura e o diretório/var/spool
com permissões de leitura e escrita. O contêiner expõe o porto 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 Note que agora o contêiner funciona com o tipo
container_t
SELinux. Este tipo é um domínio genérico para todos os contêineres da política SELinux e pode ser muito rígido ou muito frouxo para seu cenário.Digite o comando
podman ps
para obter a identificação do recipiente: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 Criar um arquivo JSON de contêineres e usar
udica
para criar um módulo de política com base nas informações do arquivo 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 sugerido pela saída de
udica
no passo anterior, carregue o 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 Pare o recipiente e inicie-o novamente com a opção
--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
Etapas de verificação
Verifique se o contêiner funciona com o 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 Verifique se a SELinux agora permite o acesso aos pontos de montagem
/home
e/var/spool
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Verifique se a SELinux permite a ligação somente à porta 21:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Recursos adicionais
-
Para mais informações, consulte as páginas de manual
udica(8)
epodman(1)
. - Para orientação sobre como começar com recipientes no RHEL e como trabalhar com imagens de recipientes, consulte o documento Building, running, and managing containers.