9.2. 사용자 지정 컨테이너의 SELinux 정책 생성 및 사용
사용자 지정 컨테이너에 대한 SELinux 보안 정책을 생성하려면 다음 절차의 단계를 따르십시오.
사전 요구 사항
-
컨테이너를 관리하기 위한
podman
툴이 설치되어 있습니다. 그렇지 않은 경우dnf install podman
명령을 사용합니다. - 사용자 지정 Linux 컨테이너 - 이 예에서는 ubi8 입니다.
절차
udica
패키지를 설치합니다.# dnf install -y udica
또는
udica
를 포함한 컨테이너 소프트웨어 패키지 세트를 제공하는container-tools
모듈을 설치합니다.# dnf module install -y container-tools
읽기 전용 권한과
/var/spool
디렉터리를 읽기 및 쓰기 권한을 사용하여/home
디렉터리를 마운트하는 ubi8 컨테이너를 시작합니다. 컨테이너는 포트 21 을 노출합니다.# podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
이제 컨테이너는
container_t
SELinux 유형으로 실행됩니다. 이 유형은 SELinux 정책의 모든 컨테이너에 대한 일반 도메인이며 시나리오에 너무 엄격한 경우가 있거나 너무 느릴 수 있습니다.새 터미널을 열고
podman ps
명령을 입력하여 컨테이너의 ID를 가져옵니다.# 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
컨테이너 JSON 파일을 생성하고 JSON 파일의 정보를 기반으로 정책 모듈을 생성하는 데
udica
를 사용합니다.# podman inspect 37a3635afb8f > container.json # udica -j container.json my_container Policy my_container with container id 37a3635afb8f created! […]
또는 다음을 수행합니다.
# podman inspect 37a3635afb8f | udica my_container Policy my_container with container id 37a3635afb8f created! Please load these modules using: # semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil} Restart the container with: "--security-opt label=type:my_container.process" parameter
이전 단계에서
udica
의 출력에 표시된 대로 policy 모듈을 로드합니다.# semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
컨테이너를 중지하고
--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
검증
컨테이너가
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
SELinux가 이제
/home
및/var/spool
마운트 지점에 액세스할 수 있는지 확인합니다.[root@37a3635afb8f /]# cd /home [root@37a3635afb8f home]# ls username [root@37a3635afb8f ~]# cd /var/spool/ [root@37a3635afb8f spool]# touch test [root@37a3635afb8f spool]#
SELinux가 포트 21에만 바인딩을 허용하는지 확인합니다.
[root@37a3635afb8f /]# dnf install nmap-ncat [root@37a3635afb8f /]# nc -lvp 21 … Ncat: Listening on :::21 Ncat: Listening on 0.0.0.0:21 ^C [root@37a3635afb8f /]# nc -lvp 80 … Ncat: bind to :::80: Permission denied. QUITTING.
추가 리소스
-
시스템의 Ud
ica(8)
및podman(1)
도움말 페이지 - udica - 컨테이너에 대한 SELinux 정책 생성
- 컨테이너 빌드, 실행 및 관리