Uid/Gid 권한이 있는 LXC 컨테이너: 우분투 16.04에서 systemd lxc-start가 실패합니다.

Uid/Gid 권한이 있는 LXC 컨테이너: 우분투 16.04에서 systemd lxc-start가 실패합니다.

다음과 같은 목적으로 특정 UID 및 GID에 대한 LXC 컨테이너를 생성하고 시작하고 싶습니다.

루트 사용자(sudo 사용자)로 로그인하여 lxc-create 컨테이너를 실행한 후, 동일한 루트 사용자 ID를 사용하여 lxc-start 컨테이너를 실행합니다. 컨테이너를 쳐다볼 때 컨테이너 내의 모든 프로세스를 낮은 권한(un-priv) 사용자 ID로 시작해야 합니다. 여기서 사용자에 대한 액세스는 호스트가 아닌 컨테이너로 제한됩니다. 기본적으로 ps -axu라고 하면 모든 컨테이너 프로세스의 낮은 권한 사용자 ID를 볼 수 있어야 합니다.

추신: 내 호스트는 ubuntu 16.04 LTS가 설치된 가상 머신이고 systemd init 시스템이며 내 컨테이너(busybox 유형)는 systemd 서비스를 사용하여 시작됩니다. 이를 위해 나는 busybox 템플릿을 다음과 같이 수정했습니다.

lxc.init_cmd=/lib/systemd/systemd

또한 busybox 기본 템플릿에서 모든 rcS 및 inittab 관련 스크립트를 삭제했습니다.

사용자 ID 매핑을 위해 템플릿 코드를 다음과 같이 변경했습니다.

   lxc.id_map=u 0 165536 65536
   lxc.id_map=g 0 165536 65536

그런 다음 아래 단계를 따릅니다.

컨테이너는 일반적으로 다음 명령을 사용하여 생성됩니다. (모든 템플릿 변경 사항이 반영되었는지 확인하고 문제가 없는지 확인하기 위해 /var/lib/lxc/testecho_uid/config의 구성 파일을 교차 검사했습니다.) 코드:

sudo lxc-create -n testecho_uid -t busybox_systemd_uid

포그라운드 코드를 사용하여 컨테이너를 시작하려면 다음 명령을 입력합니다.

sudo lxc-start -n testecho_uid -F

오류는 다음과 같습니다

vijay@vijay-VirtualBox:~$ sudo lxc-start -n testecho_uid -F
lxc-start: cgfsng.c: cgfsng_create: 1072 No such file or directory - Failed to create /sys/fs/cgroup/systemd//lxc/testecho_uid: No such file or directory
                                         lxc-start: cgfsng.c: cgfsng_create: 1072 No such file or directory - Failed to create /sys/fs/cgroup/systemd//lxc/testecho_uid-1: No such file or directory
                                                                                    newuidmap: uid range [0-65536) -> [165536-231072) not allowed
                                 lxc-start: start.c: lxc_spawn: 1161 failed to set up id mapping
                                                                                                lxc-start: start.c: __lxc_start: 1353 failed to spawn 'testecho_uid'
                                                    newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/systemd//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/perf_event//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/hugetlb//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/cpu//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/memory//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/pids//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/blkio//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/cpuset//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/net_cls//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/devices//lxc/testecho_uid-2
newuidmap: uid range [0-65536) -> [165536-231072) not allowed
lxc-start: conf.c: userns_exec_1: 4315 Error setting up child mappings
lxc-start: cgfsng.c: recursive_destroy: 983 Error destroying /sys/fs/cgroup/freezer//lxc/testecho_uid-2
lxc-start: lxc_start.c: main: 344 The container failed to start.
lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.

여기에 뭔가 빠졌는지 누구든지 말해 줄 수 있습니까?

다음은 내 우분투 16.04 uid 및 gid 코드 설정입니다.

vijay@vijay-VirtualBox:~$ sudo cat  /etc/subgid
vijay:100000:65536
usrlxc:165536:65536
vijay:165536:65537

암호:

vijay@vijay-VirtualBox:~$ sudo cat  /etc/subuid
vijay:100000:65536
usrlxc:165536:65536
vijay:165536:65537

위의 질문이 명확하지 않은 경우 아래에서 동일한 시나리오와 유사한 다른 질문을 참조하세요. 루트 사용자나 sudo 사용자가 권한이 없는 컨테이너에 액세스(lxc start & Attach)할 수 있는 방법이 있습니까? 즉, 아무런 문제 없이 lxc 사용자로 로그인하여 lxc 사용자(sudo 사용자/루트 아님)를 사용하여 권한 없는 컨테이너를 생성, 시작 및 연결했습니다. 이제 루트 사용자 또는 sudo 사용자로부터 lxc 사용자가 생성한 권한 없는 컨테이너를 시작하고 연결하려고 합니다.

그게 가능합니까? 그렇다면 어떻게 해야 하는지 알려주세요. sudo/root 사용자의 lxc-ls를 확인했는데 lxc 사용자가 만든 컨테이너가 아닌 sudo 사용자가 만든 컨테이너만 나열되었습니다.

또는

lxc-start를 실행할 때 루트/sudo 사용자가 권한 있는 컨테이너의 모든 프로세스/스레드를 실행하거나 특정 UID(예: lxc 사용자)에 대해 어떤 방법으로든 실행/실행할 수 있습니까? 또한 구성에 다음 lxc 사용자 uid 및 gid를 제공하려고 시도했습니다(결국 busybox 템플릿 변경). 위의 주석 오류가 발생합니다. 코드: lxc.id_map=u 0 165536 65536 lxc.id_map=g 0 165536 65536 가능한 모든 방법을 시도했지만 운이 없었습니다. 이 주제에 대해 알려주십시오.

다음은 비공개 컨테이너 생성 실험에서 생성한 우분투 데스크톱 lxc 사용자 --> "usrlxc"의 사용자 세부 정보입니다. Sudo 사용자 --> "vijay" - 이것은 내 우분투 16.04 가상 머신의 sudo 사용자입니다. 루트 사용자 --> # 내 우분투 설정이나 lxc 설정에 뭔가가 있다면 알려주세요.

답변1

지금까지 실험적인 LXC에서 권한 있는 컨테이너의 UID/GIP를 매핑하는 옵션을 찾지 못했습니다. 이를 통해 UID/GID 매핑은 권한이 없는 컨테이너에 대해서만 수행될 수 있다는 것을 이해할 수 있습니다. 내가 틀렸다면 정정해주세요. 즉, 루트 사용자(또는 sudo 사용자)에서는 un-priv 컨테이너에 액세스할 수 없습니다. 즉, sudo lxc-ls를 실행하면 un -priv가 아닌 root/sudo 사용자가 만든 컨테이너만 나열됩니다. 컨테이너는 낮은 권한의 사용자(내 경우에는 usrlxc)에 의해 생성되었습니다. 따라서 루트/sudo 사용자로부터 lxc-start/attach un-priv 컨테이너를 실행할 수 없습니다.

그래서 저는 systemD 서비스 파일을 사용하여 이를 관리하려고 합니다. 아직 끝나지 않았습니다. lxc-create /stop을 수행할 수 있습니다. 그러나 특정 사용자에 대해 systemD 서비스에서 lxc-start를 실행하는 문제에 직면하면 이 문제는 곧 해결될 것입니다. systemD 서비스 방법 대신 root/sudo 로그인에서 권한 없는 컨테이너를 시작하기 위한 더 나은 솔루션이 있는 경우 알려주시기 바랍니다.

답변2

비슷한 문제가 있습니다. 지도 UID/GIP를 이해하는 데 문제가 있습니다. run 인 경우 lxc-ls명령은 명령을 실행하는 사용자가 만든 컨테이너만 반환합니다. sudo는 lxc-ls루트 또는 sudoer가 생성한 컨테이너 목록만 반환합니다.

관련 정보