9.2. 사용자 지정 컨테이너에 대한 SELinux 정책 생성 및 사용
udica
유틸리티를 사용하면 사용자 지정 컨테이너에 대한 SELinux 보안 정책을 생성할 수 있습니다.
사전 요구 사항
-
컨테이너를 관리하는
podman
툴이 설치되어 있습니다. 그렇지 않은 경우yum install podman
명령을 사용합니다. - 이 예제의 사용자 지정 Linux 컨테이너 - ubi8.
절차
udica
패키지를 설치합니다.yum install -y udica
# yum install -y udica
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는
udica
를 포함한 일련의컨테이너 소프트웨어 패키지를 제공하는 container-tools
모듈을 설치합니다.yum module install -y container-tools
# yum module install -y container-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 읽기 및 쓰기 권한이 있는
/home
디렉터리와 읽기 전용 권한으로/var/spool
디렉터리를 마운트하는 ubi8 컨테이너를 시작합니다. 컨테이너는 포트 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 이제 컨테이너가
container_t
SELinux 유형으로 실행됩니다. 이 유형은 SELinux 정책의 모든 컨테이너에 대한 일반 도메인이며 시나리오에 너무 엄격하거나 너무 느릴 수 있습니다.새 터미널을 열고
podman ps
명령을 입력하여 컨테이너의 ID를 가져옵니다.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 컨테이너 JSON 파일을 생성하고 JSON 파일의 정보를 기반으로 정책 모듈을 생성하는 데
udica
를 사용합니다.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 또는 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계에서
udica
의 출력에서 제안한 대로 정책 모듈을 로드합니다.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 컨테이너를 중지하고
--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
검증
컨테이너가
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 SELinux에서
/home 및 /
var/spool
마운트 지점에 액세스할 수 있는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux에서 포트 21에만 바인딩할 수 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow