контейнер userns не запускается, как отслеживать причину?

При создании контейнера LXC (непривилегированного) для Linux на Ubuntu 14.04 со следующей командной строкой:

lxc-create -n test1 -t download -- -d $(lsb_release -si|tr 'AZ' 'a-z') -r $(lsb_release -sc) -a $(dpkg --print-architecture) 

и (не касаясь созданного файла конфигурации), затем попытайтесь запустить его с помощью:

 lxc-start -n test1 -l DEBUG 

он не работает. Файл журнала показывает мне:

 lxc-start 1420149317.700 INFO lxc_start_ui - using rcfile /home/user/.local/share/lxc/test1/config lxc-start 1420149317.700 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.701 INFO lxc_confile - read uid map: type u nsid 0 hostid 100000 range 65536 lxc-start 1420149317.701 INFO lxc_confile - read uid map: type g nsid 0 hostid 100000 range 65536 lxc-start 1420149317.701 WARN lxc_log - lxc_log_init called with log already initialized lxc-start 1420149317.701 INFO lxc_lsm - LSM security driver AppArmor lxc-start 1420149317.701 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/2' (5/6) lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/7' (7/8) lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/8' (9/10) lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/10' (11/12) lxc-start 1420149317.702 INFO lxc_conf - tty's configured lxc-start 1420149317.702 DEBUG lxc_start - sigchild handler set lxc-start 1420149317.702 DEBUG lxc_console - opening /dev/tty for console peer lxc-start 1420149317.702 DEBUG lxc_console - using '/dev/tty' as console lxc-start 1420149317.702 DEBUG lxc_console - 14946 got SIGWINCH fd 17 lxc-start 1420149317.702 DEBUG lxc_console - set winsz dstfd:14 cols:118 rows:61 lxc-start 1420149317.905 INFO lxc_start - 'test1' is initialized lxc-start 1420149317.906 DEBUG lxc_start - Not dropping cap_sys_boot or watching utmp lxc-start 1420149317.906 INFO lxc_start - Cloning a new user namespace lxc-start 1420149317.906 INFO lxc_cgroup - cgroup driver cgmanager initing for test1 lxc-start 1420149317.907 ERROR lxc_cgmanager - call to cgmanager_create_sync failed: invalid request lxc-start 1420149317.907 ERROR lxc_cgmanager - Failed to create hugetlb:test1 lxc-start 1420149317.907 ERROR lxc_cgmanager - Error creating cgroup hugetlb:test1 lxc-start 1420149317.907 INFO lxc_cgmanager - cgroup removal attempt: hugetlb:test1 did not exist lxc-start 1420149317.908 INFO lxc_cgmanager - cgroup removal attempt: perf_event:test1 did not exist lxc-start 1420149317.908 INFO lxc_cgmanager - cgroup removal attempt: blkio:test1 did not exist lxc-start 1420149317.908 INFO lxc_cgmanager - cgroup removal attempt: freezer:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: devices:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: memory:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: cpuacct:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: cpu:test1 did not exist lxc-start 1420149317.910 INFO lxc_cgmanager - cgroup removal attempt: cpuset:test1 did not exist lxc-start 1420149317.910 INFO lxc_cgmanager - cgroup removal attempt: name=systemd:test1 did not exist lxc-start 1420149317.910 ERROR lxc_start - failed creating cgroups lxc-start 1420149317.910 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.910 ERROR lxc_start - failed to spawn 'test1' lxc-start 1420149317.910 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.910 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.910 ERROR lxc_start_ui - The container failed to start. lxc-start 1420149317.910 ERROR lxc_start_ui - Additional information can be obtained by setting the --logfile and --logpriority options. 

Теперь я вижу здесь две ошибки, которые, вероятно, являются результатом первого, а именно:

lxc_start – не удалось создать группы

Однако я вижу /sys/fs/cgroup смонтирован:

 $ mount|grep cgr none on /sys/fs/cgroup type tmpfs (rw) 

и cgmanager установлен:

 $ dpkg -l|awk '$1 ~ /^ii$/ && /cgmanager/ {print $2 " " $3 " " $4}' cgmanager 0.24-0ubuntu7 amd64 libcgmanager0:amd64 0.24-0ubuntu7 amd64 

Примечание. Настройки моего хоста по-прежнему upstart за upstart .

В случае каких-либо сомнений, группы поддержки ядра:

 $ grep CGROUP /boot/config-$(uname -r) CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_HUGETLB=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_SCHED=y CONFIG_BLK_CGROUP=y # CONFIG_DEBUG_BLK_CGROUP is not set CONFIG_NET_CLS_CGROUP=m CONFIG_NETPRIO_CGROUP=m 

Примечание. Настройки моего хоста по-прежнему upstart за upstart .

One Solution collect form web for “контейнер userns не запускается, как отслеживать причину?”

Оказывается, неожиданное удивление, это особая вещь, характерная для Ubuntu.


Причина

Проблема: хотя в ядре есть активированные группы (проверьте с помощью grep CGROUP /boot/config-$(uname -r) ), и cgmanager запущен, для моего пользователя нет какой-либо cgmanager . Вы можете проверить это с помощью:

 $ cat / proc / self / cgroup
 11: hugetlb: /
 10: perf_event: /
 9: blkio: /
 8: морозильник: /
 7: устройства: /
 6: память: /
 5: cpuacct: /
 4: процессор: /
 3: Имя = Systemd: /
 2: cpuset: /

если ваш UID указан в каждой из соответствующих строк, все в порядке, но если никакие группы не были определены, будет только косая черта после второй двоеточия в каждой строке.

Моя проблема была связана с запуском непривилегированного контейнера. Я мог бы начать пользоваться привилегированными контейнерами.

Оказалось, что моя проблема была тесно связана с этим потоком в lxc-users рассылки lxc-users .

средство

На Ubuntu 14.04 upstart по умолчанию, в отличие от systemd . Следовательно, определенные компоненты, которые будут установлены в дистрибутиве systemd , не будут установлены по умолчанию.

В дополнение к cgmanager было добавлено два пакета, которые мне пришлось установить, чтобы выйти за пределы ошибки, указанной в моем вопросе: cgroup-bin и libpam-systemd . Честно говоря, я не уверен на 100%, что первая строго необходима, поэтому вы можете попытаться оставить ее и прокомментировать здесь.

После установки пакетов и перезагрузки вы должны увидеть свой UID ( id -u , здесь 1000) в выходном файле:

 $ cat / proc / self / cgroup
 11: hugetlb: /user/1000.user/1.session
 10: perf_event: /user/1000.user/1.session
 9: blkio: /user/1000.user/1.session
 8: морозильник: /user/1000.user/1.session
 7: устройства: /user/1000.user/1.session
 6: память: /user/1000.user/1.session
 5: cpuacct: /user/1000.user/1.session
 4: процессор: /user/1000.user/1.session
 3: Имя = Systemd: /user/1000.user/1.session
 2: cpuset: /user/1000.user/1.session

После этого ошибка при попытке запустить гостевой контейнер становится (обрезается для краткости):

 lxc-start 1420160065.383 INFO lxc_cgroup - драйвер cgroup cgmanager для тестирования1
 lxc-start 1420160065.419 ОШИБКА lxc_start - не удалось создать настроенную сеть
 lxc-start 1420160065.446 ОШИБКА lxc_start - не удалось запустить 'test1'
 lxc-start 1420160065.451 ERROR lxc_start_ui - контейнер не запускался.

Так что до сих пор нет успеха, но мы на один шаг ближе.

Вышеупомянутый связанный lxc-users указывает на /etc/systemd/logind.conf не говоря уже о трех контроллерах: net_cls , net_prio и debug . Для меня остался только последний. После изменения вам придется повторно зарегистрироваться, хотя изменения вступят в силу после создания вашего сеанса входа в систему.

Это сообщение блога, сделанное одним из авторов LXC, дает следующий шаг:

Ваш пользователь, хотя он может создавать новые пространства имен пользователей, в которых он будет uid 0, и будет иметь некоторые привилегии root от ресурсов, привязанных к этому пространству имен, очевидно, не получит каких-либо дополнительных привилегий на хосте.

Одной из таких вещей является создание новых сетевых устройств на хосте или изменение конфигурации моста. Чтобы обойти это, мы написали инструмент «lxc-user-nic», который является единственной двоичной частью SETUID LXC 1.0 и выполняет одну простую задачу. Он анализирует конфигурационный файл и на основе его содержимого создаст сетевые устройства для пользователя и соединит их. Чтобы предотвратить злоупотребление, вы можете ограничить количество устройств, которые пользователь может запросить, и на какой мост они могут быть добавлены.

Примером может служить мой собственный файл / etc / lxc / lxc-usernet:

 stgraber veth lxcbr0 10 

Это объявляет, что пользователю «stgraber» разрешено создавать до 10 устройств типа veth и добавляться к мосту с именем lxcbr0.

Между тем, что предлагается пространством имен пользователей в ядре и средством setuid, у нас есть все, что необходимо для того, чтобы большинство дистрибутивов было непривилегировано.

Если у пользователя есть права sudo и вы используете Bash, используйте это:

 echo "$(whoami) veth lxcbr0 10"|sudo tee -a /etc/lxc/lxc-usernet 

и убедитесь, что тип ( veth ) совпадает с типом в конфигурации контейнера, а мост ( lxcbr0 ) настроен и вверх.

И теперь мы получаем еще один набор ошибок:

 lxc-start 1420192192.775 INFO lxc_start - клонирование нового пространства имен пользователей
 lxc-start 1420192192.775 INFO lxc_cgroup - драйвер cgroup cgmanager initing для test1
 lxc-start 1420192192.923 УВЕДОМЛЕНИЕ lxc_start - переход на gid / uid 0 в новое пространство имен пользователей
 lxc-start 1420192192.923 ОШИБКА lxc_start - Разрешение запрещено - не удалось получить доступ / home / user.  Предоставьте ему доступ «x» или добавьте ACL для корня контейнера.
 lxc-start 1420192192.923 ОШИБКА lxc_sync - неверный номер последовательности 1. ожидается 2
 lxc-start 1420192192.954 ОШИБКА lxc_start - не удалось запустить 'test1'
 lxc-start 1420192192.959 ERROR lxc_start_ui - контейнер не запускался.

Блестящий, который может быть исправлен. Еще один lxc-users теми же главными героями, что и в первом потоке, прокладывает путь.

На данный момент быстрый тест sudo chmod -R o+X $HOME придется делать, но ACL также являются жизнеспособным вариантом. YMMV.

Interesting Posts

CUPS не показывает мне принтеры, кроме как с храброго браузера

Как я могу подтвердить идентификатор удаленного хоста SSH, к которому я пытаюсь подключиться?

Получение веб-безопасных шрифтов, работающих с LinuxMint

изменение разделов слова zsh

Как использовать chcon без selinux?

i3wm: установить последовательность разделения окон таким образом, чтобы экран был разделен на квадранты

vmlinuz <-> uImage

Почему HDMI отключается случайным образом на пару секунд?

Команда вроде `column -t`, но агностик типа кодирования?

Возможно ли глобальное определение местоположения журнала java hs_err?

Как заблокировать экран для сеанса терминала?

Как мы можем разрешить пользователям без полномочий root управлять сервисом system.d?

Существует ли способ, которым злоумышленник может использовать mkdir для компрометации системы?

bash не заканчивается

Таблетка libinput «мертва» вокруг периметра

Linux и Unix - лучшая ОС в мире.