9.2. 사용자 지정 컨테이너의 SELinux 정책 생성 및 사용


사용자 지정 컨테이너에 대한 SELinux 보안 정책을 생성하려면 다음 절차의 단계를 따르십시오.

사전 요구 사항

  • 컨테이너를 관리하기 위한 podman 툴이 설치되어 있습니다. 그렇지 않은 경우 dnf install podman 명령을 사용합니다.
  • 사용자 지정 Linux 컨테이너 - 이 예에서는 ubi8 입니다.

절차

  1. udica 패키지를 설치합니다.

    # dnf install -y udica

    또는 udica 를 포함한 컨테이너 소프트웨어 패키지 세트를 제공하는 container-tools 모듈을 설치합니다.

    # dnf module install -y container-tools
  2. 읽기 전용 권한과 /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 정책의 모든 컨테이너에 대한 일반 도메인이며 시나리오에 너무 엄격한 경우가 있거나 너무 느릴 수 있습니다.

  3. 새 터미널을 열고 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
  4. 컨테이너 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
  5. 이전 단계에서 udica 의 출력에 표시된 대로 policy 모듈을 로드합니다.

    # semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
  6. 컨테이너를 중지하고 --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

검증

  1. 컨테이너가 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
  2. 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]#
  3. 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.

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.