具有映射 uid/gid 的 Libvirt lxc-enter-namespace

具有映射 uid/gid 的 Libvirt lxc-enter-namespace

我正在尝试在 CentOS 7 上的 Libvirt 下实现具有映射 uid/gid(用户命名空间)的 LXC,并安装完全独立的根。Libvirt 配置片段

  <idmap>
    <uid start='0' target='100000' count='65535'/>
    <gid start='0' target='100000' count='65535'/>
  </idmap>
  <filesystem type='mount' accessmode='passthrough'>
    <source dir='/var/lib/libvirt/lxc/test2'/>
    <target dir='/'/>
  </filesystem>

我更改了 /var/lib/libvirt/lxc/test2 中文件/目录的所有权,容器本身运行良好(只是一个测试容器,其中的 bash 脚本为 /init,运行 Apache 并捕获 SIGTERM 以正常停止 Apache)。如果我这样做,ps aux我会看到容器应用程序在用户 ID 100000 下运行

100000    7392  0.0  0.0  12476  2212 pts/0    Ss+  Feb17   0:20 /bin/sh /init
100000    7409  0.0  0.0 230408  3684 ?        Ss   Feb17   0:15 /usr/sbin/httpd
100048    7411  0.0  0.0 230544  3796 ?        S    Feb17   0:00 /usr/sbin/httpd
100048    7412  0.0  0.0 230544  3800 ?        S    Feb17   0:00 /usr/sbin/httpd

我可以看到默认的 Apache 页面,所以一切都很好。

现在,当我尝试执行此操作时,virsh lxc-enter-namespace test2 /bin/bash我发现容器内的 bash 在未知的 uid/gid 下运行

bash-4.2$ id
uid=65534 gid=65534 groups=65534

我认为它在主机系统中以真实根 (uid/gid 0/0) 身份运行。/proc/$PID/uid_map 与在容器中运行的 httpd 进程相同。

[root@lxctest ~]# cat /proc/21219/uid_map <- bash
         0     100000      65535
[root@lxctest ~]# cat /proc/7413/uid_map <- apache
         0     100000      65535

因此映射似乎有效,但 libvirt (virsh) 以错误的用户身份启动该进程。当然,主机系统中不存在用户 100000。

那么有人知道如何以用户 100000(容器根)身份附加(输入命名空间)吗?我遗漏了什么吗?

相关内容