lxc
에서 권한이없는 컨테이너를 사용 Arch Linux
합니다. 기본 시스템 정보는 다음과 같습니다.
[chb@conventiont ~]$ uname -a
Linux conventiont 3.17.4-Chb #1 SMP PREEMPT Fri Nov 28 12:39:54 UTC 2014 x86_64 GNU/Linux
다음과 같은 사용자 정의 / 컴파일 된 커널입니다 user namespace enabled
.
[chb@conventiont ~]$ lxc-checkconfig
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
[chb@conventiont ~]$ systemctl --version
systemd 217
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN
불행히도 현재 systemd
는 잘 재생되지 않습니다 lxc
. 특히 cgroups
루트가 아닌 사용자를 설정하면 제대로 작동하지 않는 것 같거나이 작업을 수행하는 방법이 너무 익숙하지 않습니다. lxc
에서 필요한 cgroup을 만들 수있는 경우에만 권한이없는 모드로 컨테이너를 시작합니다 /sys/fs/cgroup/XXX/*
. 그러나 에 cgroup 계층을 마운트 하기 lxc
때문에 불가능 합니다 . 해결 방법은 다음을 수행하는 것 같습니다.systemd
root
/sys/fs/cgroup/*
for d in /sys/fs/cgroup/*; do
f=$(basename $d)
echo "looking at $f"
if [ "$f" = "cpuset" ]; then
echo 1 | sudo tee -a $d/cgroup.clone_children;
elif [ "$f" = "memory" ]; then
echo 1 | sudo tee -a $d/memory.use_hierarchy;
fi
sudo mkdir -p $d/$USER
sudo chown -R $USER $d/$USER
echo $$ > $d/$USER/tasks
done
이 코드 는 권한이없는 사용자를 위해 해당 cgroup
디렉토리를 cgroup
계층 구조로 만듭니다 . 그러나 내가 이해하지 못하는 것이 발생합니다. 앞에서 언급 한 내용을 실행하기 전에 다음과 같이 표시됩니다.
[chb@conventiont ~]$ cat /proc/self/cgroup
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpu,cpuacct:/
2:cpuset:/
1:name=systemd:/user.slice/user-1000.slice/session-c1.scope
위에서 언급 한 코드를 실행 한 후에 쉘에서 보았습니다.
[chb@conventiont ~]$ cat /proc/self/cgroup
8:blkio:/chb
7:net_cls:/chb
6:freezer:/chb
5:devices:/chb
4:memory:/chb
3:cpu,cpuacct:/chb
2:cpuset:/chb
1:name=systemd:/chb
그러나 다른 쉘에서는 여전히 볼 수 있습니다.
[chb@conventiont ~]$ cat /proc/self/cgroup
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpu,cpuacct:/
2:cpuset:/
1:name=systemd:/user.slice/user-1000.slice/session-c1.scope
따라서 lxc
셸에서 권한이없는 컨테이너를 시작할 수 있지만 위에서 언급 한 코드는 실행했지만 다른 코드는 실행할 수 없습니다.
누군가이 행동을 설명 할 수 있습니까?
누군가
cgroups
현재 버전systemd
(>= 217
)으로 필요한 것을 설정하는 더 좋은 방법을 찾았 습니까?