Das hat erstmal funktioniert. Nun steht aber hier[1], das der root User
im Container genauso mächtig ist wie der des Host und auch auf diselben
Kernelfunktionen Zugriff hat. Es steht aber auch, das man die Lage mit
dem id Mapping entschärfen kann. Also habe ich (nach langem googlen) die
Config angepasst (Der block <idmap> ist dazugekommen), damit ab uid 0
und gid 0 die nächsten 1000 ids im Container auf die ids ab uid 2000 und
gid 2000 gemapt werden. Ich habe mir ein Shellscript geschrieben (ist im
Anhang), welches mir die UIDs der Dateien meines Containers entsprechend
abändert.
Dann habe ich den Container neu erstellt und gestartet.
1
moveperm.sh /vm/tor/ 2000 2000
2
virsh destroy tor
3
virsh undefine tor
4
virsh define /var/virt/tor-2.xml
5
virsh start tor
6
virsh console tor
Aber nun startet der Container nichtmehr, in der Console wird folgendes
Angezeigt:
Failed to read AF_UNIX datagram queue length, ignoring: No such file or directory
11
Failed to install release agent, ignoring: No such file or directory
12
Failed to create /system.slice/libvirtd.service/init.scope control group: Permission denied
13
Failed to allocate manager object: Permission denied
14
[!!!!!!] Failed to allocate manager object, freezing.
15
Freezing execution.
Also habe ich das zu startende Programm von /bin/systemd nach /bin/bash
geändert und nachgesehen, was passiert ist: (Der Container hat den
selben Hostnamen wie der Host bekommen, davon nicht verwirren lassen.
Die folgenden Kommandos wurden im Container eingegeben.)
1
root@panther:/# ls -la /sys/fs/cgroup/systemd/system.slice/libvirtd.service/init.scope
2
total 0
3
drwxr-xr-x 2 nobody nogroup 0 Mar 6 16:58 .
4
drwxr-xr-x 4 nobody nogroup 0 Mar 6 16:58 ..
5
-rw-r--r-- 1 nobody nogroup 0 Mar 6 16:58 cgroup.clone_children
6
-rw-r--r-- 1 nobody nogroup 0 Mar 6 16:58 cgroup.procs
7
-rw-r--r-- 1 nobody nogroup 0 Mar 6 16:58 notify_on_release
8
-rw-r--r-- 1 nobody nogroup 0 Mar 6 16:58 tasks
9
10
root@panther:/# ls -la
11
total 80
12
drwxr-xr-x 22 root root 4096 Mar 6 16:33 .
13
drwxr-xr-x 22 root root 4096 Mar 6 16:33 ..
14
-rw------- 1 root root 1493 Mar 6 19:28 .bash_history
15
drwxr-xr-x 2 root root 4096 Mar 5 22:54 .oldroot
16
drwxr-xr-x 2 root root 4096 Mar 5 21:09 bin
17
drwxr-xr-x 2 root root 4096 Oct 28 22:29 boot
18
drwxr-xr-x 3 root root 320 Mar 6 19:29 dev
19
drwxr-xr-x 40 root root 4096 Mar 5 22:54 etc
20
drwxr-xr-x 2 root root 4096 Oct 28 22:29 home
21
drwxr-xr-x 9 root root 4096 Nov 27 2014 lib
22
drwxr-xr-x 2 root root 4096 Mar 5 21:08 lib64
23
drwxr-xr-x 2 root root 4096 Mar 5 21:07 media
24
drwxr-xr-x 2 root root 4096 Mar 5 21:07 mnt
25
drwxr-xr-x 2 root root 4096 Mar 5 21:07 opt
26
dr-xr-xr-x 128 nobody nogroup 0 Mar 6 19:29 proc
27
drwx------ 2 root root 4096 Mar 5 21:29 root
28
drwxr-xr-x 4 root root 4096 Mar 5 21:07 run
29
drwxr-xr-x 2 root root 4096 Mar 5 21:10 sbin
30
drwxr-xr-x 2 root root 4096 Mar 5 21:07 srv
31
dr-xr-xr-x 13 nobody nogroup 0 Mar 6 17:06 sys
32
drwxrwxrwt 7 root root 4096 Mar 6 18:32 tmp
33
drwxr-xr-x 10 root root 4096 Mar 5 21:07 usr
34
drwxr-xr-x 11 root root 4096 Mar 5 21:07 var
35
36
37
root@panther:/# mount
38
/dev/sda2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
39
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
40
proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime)
41
proc on /proc/sys/net/ipv4 type proc (rw,nosuid,nodev,noexec,relatime)
42
proc on /proc/sys/net/ipv6 type proc (rw,nosuid,nodev,noexec,relatime)
43
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
44
libvirt on /proc/meminfo type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
45
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,size=64k,mode=755,uid=2000,gid=2000)
46
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
47
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
48
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
49
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
50
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
51
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
52
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
53
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
54
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
55
devfs on /dev type tmpfs (rw,nosuid,relatime,size=64k,mode=755)
56
devpts on /dev/pts type devpts (rw,nosuid,relatime,gid=2005,mode=620,ptmxmode=666)
57
devpts on /dev/ptmx type devpts (rw,nosuid,relatime,gid=2005,mode=620,ptmxmode=666)
58
devpts on /dev/tty1 type devpts (rw,nosuid,relatime,gid=2005,mode=620,ptmxmode=666)
59
devpts on /dev/console type devpts (rw,nosuid,relatime,gid=2005,mode=620,ptmxmode=666)
Ich interpretiere dass so, das systemd innerhalb von
/sys/fs/cgroup/systemd/system.slice/libvirtd.service/init.scope
schreibberechtigungen benötigt, aber nicht hat. Interessant finde ich
die Zeile:
1
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,size=64k,mode=755,uid=2000,gid=2000)
Dieser mount wird von libvirt durchgeführt und existiert nur im
Container. /vm/tor/sys beim Host ist leer. Anscheinend versucht libvirt
das cgroup ns Subsystem für den korrekten User zu mounten, aber dabei
geht wohl etwas schief?
Hier komme ich nichtmehr weiter; Habe ich etwas vergessen einzustellen,
oder ist das ein Bug in libvirt? Wie soll ich nun weiter Vorgehen?
PS: Gibt es zu dem ID mapping in libvirt irgendwo eine Doku? Zu diesem
Thema finde ich nur sehr wenig bei Google oder in Foren, das meiste
musste ich mir aus Mailinglisten zusammensuchen.
----------
1) https://libvirt.org/drvlxc.html#secureusers