1.8. rootless 컨테이너에 대한 특별 고려 사항
루트가 아닌 사용자로 컨테이너를 실행할 때 고려해야 할 몇 가지 사항이 있습니다.
-
호스트 컨테이너 스토리지의 경로는 root 사용자(
/var/lib/containers/storage
) 및 루트가 아닌 사용자($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 미만의 포트에 액세스할 수 없습니다. 예를 들어, rootless 컨테이너 네임스페이스 내에서는 컨테이너에서 httpd 서비스에서 포트 80을 노출하는 서비스를 시작하지만 네임스페이스 외부에서는 액세스할 수 없습니다.
$ podman run -d httpd
그러나 해당 포트를 호스트 시스템에 노출하려면 컨테이너에 root 사용자의 컨테이너 환경을 사용하는 root 권한이 필요합니다.
# podman run -d -p 80:80 httpd
workstation 관리자는 사용자가 1024 미만의 포트에 서비스를 노출할 수 있지만 보안상의 영향을 이해해야 합니다. 예를 들어 일반 사용자는 공식 포트 80에서 웹 서버를 실행하고 외부 사용자가 관리자가 구성했다고 판단할 수 있습니다. 이 작업은 워크스테이션에서 테스트할 수 있지만, 네트워크로 액세스할 수 있는 개발 서버에 적합하지 않을 수 있으며, 프로덕션 서버에서는 이 작업을 수행하면 안 됩니다. 사용자가 포트 80에 대한 포트에 바인딩할 수 있도록 하려면 다음 명령을 실행합니다.
# echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start
추가 리소스