Debian 11 Bullseye에서 권한 없는 LXC 컨테이너를 시작할 수 없습니다

Debian 11 Bullseye에서 권한 없는 LXC 컨테이너를 시작할 수 없습니다

데비안 11을 다시 설치했습니다. LXC와 관련하여 Debian 10 시스템의 작업 설정을 복사했습니다. 내가 lxcuser원하는 별도 su의 사용자를 사용하고 있습니다 lxc-start.

구성,~/.config/lxc/default.conf

lxc.idmap = u 0 165536 65536
lxc.idmap = g 0 165536 65536
lxc.apparmor.profile = unconfined
lxc.mount.auto = proc:mixed sys:ro cgroup:mixed
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:FF:xx:xx:xx:xx
#lxc.include = /etc/lxc/default.conf

파일 시스템 권한은 이전 설정에서 했던 것처럼 ACL을 사용하여 설정됩니다.

lxc-checkconfig

LXC version 4.0.6
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-5.10.0-7-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled

--- Control groups ---
Cgroups: enabled

Cgroup v1 mount points:


Cgroup v2 mount points:
/sys/fs/cgroup

Cgroup v1 systemd controller: missing
Cgroup v1 freezer controller: missing
Cgroup namespace: required
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled, not loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, loaded
Advanced netfilter: enabled, loaded
CONFIG_NF_NAT_IPV4: missing
CONFIG_NF_NAT_IPV6: missing
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, not loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, loaded

--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities:

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

디버그 옵션을 사용하여 실행한 후 다음 줄에서 오류를 정확히 지적한 것 같습니다.

DEBUG    cgfsng - cgroups/cgfsng.c:cgfsng_monitor_create:1355 - Failed to create cgroup "(null)"
WARN     cgfsng - cgroups/cgfsng.c:mkdir_eexist_on_last:1152 - Permission denied - Failed to create directory "/sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope/lxc.monitor.arch"

/sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope디렉토리의 권한을 변경해 도 아무런 효과가 없습니다. using sudo도 거기에 쓸 수 없습니다.

cgroupv2이 문제는 Debian 11에서 이 기능이 기본적으로 활성화되어 있기 때문에 발생한다고 생각합니다 . 온라인에서 찾은 다양한 해결 방법을 시도했지만 지금까지 아무런 효과가 없었습니다.

어떤 아이디어가 있나요? 권한이 없는 LXC가 cgroupv2와 작동하도록 만들거나, Debian 11에서 cgroupv2를 비활성화하고 cgroupv1을 활성화하는(또는 Debian 10의 cgroup 설정을 모방하는) 올바른 작업을 수행하십시오. 다른 솔루션도 환영합니다!

일부 링크:
같은 문제인데 해결책이 없음
내 블로그에서는 Debian 10에서 권한 없는 LXC를 설정하는 방법을 설명하고 설정을 복사했습니다.


고쳐 쓰다:systemd.unified_cgroup_hierarchy=false systemd.legacy_systemd_cgroup_controller=false"컨테이너 시작을 돕기 위해 커널 매개변수에 추가되었습니다 . 하지만 컨테이너 내부에서는 여전히 다음 오류가 발생합니다.

아치 리눅스:

Welcome to Arch Linux!

Failed to create /init.scope control group: Permission denied
Failed to allocate manager object: Permission denied
[!!!!!!] Failed to allocate manager object.
Exiting PID 1...

센토스 8:

Welcome to CentOS Linux 8!

Failed to read AF_UNIX datagram queue length, ignoring: No such file or directory
Failed to install release agent, ignoring: No such file or directory
Failed to create /init.scope control group: Permission denied
Failed to allocate manager object: Permission denied
[!!!!!!] Failed to allocate manager object, freezing.
Freezing execution.

답변1

Debian Bullseye LXC 패키지(2021년 6월 11일 금요일에 출시된 1:4.0.6-2)의 최신 버전이 최근 출시되었습니다.변경에 대한 경고cgroup v2 및 LXC 4.x를 사용하여 Debian 11에서 권한 없는 컨테이너를 시작합니다.

lxc (1:4.0.6-2) 긴급도=중간;

  • 및 명령을 통해
    권한 없는 컨테이너 실행 및 연결을 처리하는 새로운 방법을 제공합니다 . 바라보다lxc-unpriv-startlxc-unpriv-attach
    /usr/share/doc/lxc/README.Debian.gz자세한 내용은.

——피에르 엘리엇 베쿠[이메일 보호됨] 2021년 6월 11일 금요일 15:12:15 +0200

Readme의 첫 번째 부분은 OP에서 처리한 것 같습니다. OP 질문의 관련 부분은 다음과 같습니다.7) 컨테이너 시작:

  1. 컨테이너 시작

통합 그룹 계층 구조(Debian 11/bullseye로 시작하는 systemd의 기본값)에서,루트가 아닌 사용자는 루트가 아닌 사용자로 컨테이너를 시작하려면 몇 가지 추가 권한이 있는 lxc-start가 필요합니다. 가장 쉬운 방법은 systemd를 이용하는 것입니다.. 속성이 설정된 사용자 정의 서비스를 통해 컨테이너를 시작하거나 Delegate=true system-run을 사용하여 명시적으로 이를 수행할 수 있습니다.

$ systemd-run --scope --quiet --user --property=Delegate=yes \
  lxc-start -n mycontainer

또는 마지막으로 Debian에서 제공하는 도우미 스크립트를 사용할 수 있습니다 lxc-unpriv-start. systemd-run명령을 올바르게 사용하고 필요한 환경 변수가 올바르게 설정되었는지 확인합니다 .

"3) 권한 확인" 부분도 언급할 가치가 있습니다(적응할 올바른 값 포함).

$ setfacl --modify user:100000:x . .local .local/share

systemd 또는 Debian 래퍼를 사용한 예:

$ lxc-create -n busybox-amd64 -t busybox

$ lxc-start -n busybox-amd64
lxc-start: busybox-amd64: lxccontainer.c: wait_on_daemonized_start: 859 Received container state "ABORTING" instead of "RUNNING"
lxc-start: busybox-amd64: tools/lxc_start.c: main: 308 The container failed to start
lxc-start: busybox-amd64: tools/lxc_start.c: main: 311 To get more details, run the container in foreground mode
lxc-start: busybox-amd64: tools/lxc_start.c: main: 313 Additional information can be obtained by setting the --logfile and --logpriority options

$ systemd-run --scope --quiet --user --property=Delegate=yes lxc-start -n busybox-amd64
$ lxc-ls --active
busybox-amd64 
$ lxc-stop -n busybox-amd64

$ lxc-unpriv-start -n busybox-amd64
Running scope as unit: run-r1c8a4b4fd0294f688f9f63069414fbf0.scope
$ lxc-ls --active
busybox-amd64 

이 정보는 이전에는 일부 버그 보고서에만 묻혀서 정리하기가 어려웠습니다.


노트:

물론 실제 운영 체제(Debian, CentOS...)를 성공적으로 부팅할 수도 있습니다.

참고로 본 Q&A와는 관련이 없습니다.오늘 (2021-06-26)사용다운로드주형,hkp://pool.sks-keyservers.net서비스가 종료된 것 같습니다. 템플릿을 생성하려면 먼저 다음의 기본 키 서버 URL을 재정의해야 했습니다 /usr/share/lxc/templates/lxc-download.

$ export DOWNLOAD_KEYSERVER=hkp://keys.openpgp.org
$ lxc-create -n centos8-amd64 -t download -- --d centos -r 8 -a amd64
[...]
You just created a Centos 8 x86_64 (20210626_07:08) container.

관련 정보