1.8. rootless 컨테이너에 대한 특별한 고려 사항

루트가 아닌 사용자로 컨테이너를 실행할 때 고려해야 할 사항은 다음과 같습니다.

  • 호스트 컨테이너 스토리지의 경로는 루트 사용자(/var/lib/containers/storage) 및 non-root 사용자($HOME/.local/share/containers/storage)마다 다릅니다.
  • rootless 컨테이너를 실행하는 사용자에게는 호스트 시스템에서 다양한 사용자 및 그룹 ID로 실행할 수 있는 특수 권한이 부여됩니다. 그러나 호스트의 운영 체제에 대한 루트 권한이 없습니다.
  • /etc/subuid 또는 /etc/subgid 를 수동으로 변경하는 경우 podman system migrate 명령을 실행하여 새 변경 사항을 적용해야 합니다.
  • rootless 컨테이너 환경을 구성해야 하는 경우 홈 디렉터리에 구성 파일을 만듭니다($HOME/.config/containers). 구성 파일에는 storage.conf (스토리지 구성용) 및 containers.conf (컨테이너 설정의 경우)가 포함됩니다. 또한 registries.conf 파일을 생성하여 이미지를 가져오기, 검색 또는 실행하는 데 Podman을 사용할 때 사용 가능한 컨테이너 레지스트리를 식별할 수 있습니다.
  • 루트 권한 없이 변경할 수 없는 시스템 기능이 있습니다. 예를 들어 컨테이너 내에서 SYS_TIME 기능을 설정하고 네트워크 시간 서비스(ntpd)를 실행하여 시스템 클럭을 변경할 수 없습니다. rootless 컨테이너 환경을 무시하고 root 사용자의 환경을 사용하여 해당 컨테이너를 root로 실행해야 합니다. 예를 들면 다음과 같습니다.

    # podman run -d --cap-add SYS_TIME ntpd

    이 예제에서는 ntpd 가 컨테이너 내부가 아닌 전체 시스템의 시간을 조정할 수 있습니다.

  • rootless 컨테이너는 1024 미만의 포트 번호에 액세스할 수 없습니다. 예를 들어 컨테이너의 httpd 서비스에서 포트 80을 노출하는 서비스를 시작할 수 있지만 네임스페이스 외부에서는 액세스할 수 없습니다.

    $ podman run -d httpd

    그러나 컨테이너에는 호스트 시스템에 해당 포트를 노출하려면 root 사용자의 컨테이너 환경을 사용하여 root 권한이 필요합니다.

    # podman run -d -p 80:80 httpd
  • 워크스테이션 관리자는 사용자가 1024보다 낮은 포트에 서비스를 노출할 수 있지만 보안 영향을 이해해야 합니다. 예를 들어 일반 사용자는 공식 포트 80에서 웹 서버를 실행하고 외부 사용자가 관리자가 구성했다고 생각할 수 있습니다. 이는 테스트를 위해 워크스테이션에서 허용되지만 네트워크에서 액세스할 수 있는 개발 서버에서는 좋은 방법이 아닐 수 있으며 프로덕션 서버에서는 반드시 수행해야 합니다. 사용자가 포트 80에 바인딩할 수 있도록 하려면 다음 명령을 실행합니다.

    # echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start

추가 리소스