에 파일을 설치하는 데 문제가 있습니다 podman
. 내 파일 권한은 이지만 0600
컨테이너를 사용할 수 없습니다. 해당 --privileged
옵션이나 볼륨 확산 옵션을 사용하면 z
작동합니다. 하지만 내 질문은 다음 옵션 중 어떤 것을 사용해야 합니까? 아니면 다른 방법이 있을 수도 있겠네요...
XY 문제를 피하기 위해 이 사례를 설명하겠습니다. certbot
DNS Cloudflare를 사용하여 인증서를 생성하고 싶습니다 . 저는 Centos 8을 사용하고 있으므로 docker/podman을 통해 수행해야 합니다. Cerbot에는 Cloudflare의 키가 필요하므로 ~/.secrets/clodflare
경로 에서 cloudflare.ini
파일을 생성하고 이를 컨테이너에 설치하려고 합니다.
답변1
요즘 제가 배운 교훈 중 일부를 공유해 보겠습니다. 나는 전문가가 아닙니다. 나는 당신이 무엇을 해야 하는지 제안할 수는 없지만, --privileged
podman 을 사용하고 실행할 때 어떤 일이 일어나는지 설명하려고 노력할 수 있습니다 :z
. 어쩌면 당신은 이미 이것을 알고 있을 것입니다.
나는 당신이 podman
루트 없이, podman -v
즉 sudo podman -v
. 또한 ~/.secrets/clodflare
귀하가 소유하고 있으며 UID는 1000
.
귀하의 경우에는 기존 Unix 권한( 0600
또는 -rw-------
)과 SELinux( container_file_t
, user_home_t:
, fusefs_t
등)의 두 가지 권한 문제가 있습니다.
UNIX 권한
- 컨테이너 내에서 파일/폴더는 다음
root
과 같습니다. 컨테이너의 프로세스가 에 의해 실행되는 경우
root
호스트에서는 사용자가 실행합니다. 따라서rw-
해당 폴더/파일에 대한 권한이 있습니다 . 나는 이것이 당신의 경우라고 생각합니다.--privileged
도 와는 아무 관련이 없습니다:z
.컨테이너의 프로세스가 다른 사용자(예: UID )에 의해 실행되는 경우 호스트 시스템에서는 UID (기본적으로 의 설정에 따라 )
1234
를 사용하는 사용자에 의해 실행됩니다 . 따라서 해당 파일에 대해서만 권한이 있습니다. 컨테이너 내(또는 호스트) 내 에서 소유권을 변경하려면 예를 들어 또는 를 실행할 수 있습니다 . 그러나 나는 이것이 당신에게 적용되지 않는다고 생각합니다.101233
/etc/subid
---
1234
101233
podman unshare chown -R 1234:1234 <path>
sudo chown -R 101234:101234 <path>
호스트에서 파일이 귀하의 소유가 아닌 경우 컨테이너에서는 의 설정에 따라 다른 사람의 소유가 됩니다
/etc/subid
.Google을 검색하면 이 주제에 대한 자세한 정보를 찾을 수 있습니다
podman namespace
.
- 컨테이너 내에서 파일/폴더는 다음
SELinux
- SELinux 지원 호스트에는 SELinux 분리 문제가 여전히 존재합니다.
- 를 사용하여
--privileged
SELinux 분리 등을 비활성화할 수 있습니다 . 그러나 파일/폴더의 레이블을 다시 지정하지는 않습니다. Podman을 실행할 때마다 다음과 같이 실행되어야 합니다podman -v <host-path>:<container-path> --previleged <image>
. - 을 추가하면
:z
Podman이 파일/폴더의 레이블을 다시 지정하도록 허용할 수 있습니다. 넌 이것만 하면 돼한 번.ls -Z
파일/폴더 목록을 통해 전후 차이점을 확인할 수 있습니다ls -Zd
. 파일이나 폴더의 레이블이 제대로 다시 지정되면 다음 번에는 ,podman -v <host-path>:<container-path> <image>
없이 실행할 수 있습니다 .:z
--privileged
- 이 문제는 제가 이해하기에는 너무 복잡하기 때문에 더 자세히 설명할 수 없습니다. 에 대한 설명이
podman run
있는 매뉴얼 페이지가 도움이 됩니다.--privileged
-v
-security-opt