Я пытаюсь реализовать LXC с отображенным uid / gid (пространство имен пользователя) в Libvirt на CentOS 7 с полностью подключенным отдельным корнем. Фрагмент конфигурации 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
Я вижу, что приложения-контейнеры работают под идентификатором пользователя 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
Я вижу, что он работает как настоящий root (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 (корень контейнера)? Я что-нибудь упускаю?