Forum: PC Hard- und Software Libvirt+LXC; uid mapping problem


von Daniel A. (daniel-a)


Angehängte Dateien:

Lesenswert?

Ich habe nun einen libvirt_lxc container erstellt, dazu habe ich 
folgendes gemacht:
1
echo LIBVIRT_DEFAULT_URI=lxc:/// >> /etc/environment
2
mkdir -p /vm/tor/
3
cd /vm/tor/
4
debootstrap --variant=minbase --arch=amd64 stretch . http://httpredir.debian.org/debian
5
virsh define /var/virt/tor-1.xml
6
virsh start tor
7
virsh console tor

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:
1
Connected to domain tor
2
Escape character is ^]
3
systemd 229 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN)
4
Detected virtualization lxc-libvirt.
5
Detected architecture x86-64.
6
7
Welcome to Debian GNU/Linux stretch/sid!
8
9
Set hostname to <panther>.
10
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

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.