MyTetra Share
Делитесь знаниями!
Время создания: 10.03.2020 22:42
Автор: alensav
Текстовые метки: LXC
Раздел: !!LXD
Запись: alensav/MyTetra2/main/base/1583869378kvmadoc3mj/text.html на raw.githubusercontent.com
  • LXC
  • Начинаем

Требования

Необходимые зависимости:

  • One of glibc, musl libc, uclib or bionic as your C library
  • Linux kernel >= 2.6.32

Дополнительные зависимости для lxc-attach:

  • Linux kernel >= 3.8

Дополнительные зависимости для непривилегированных контейнеров:

  • cgmanager или другой менеджер CGroup настраивающий вашу систему на непривилегированные операции CGroups
  • Последняя версия shadow включающаяя newuidmap и newgidmap
  • Linux kernel >= 3.12

Рекомендованные библиотеки:

  • libcap (для возможности сброса привилегий)
  • libapparmor (для установки профиля apparmor для контейнера)
  • libselinux (для установки контекста selinux для контейнера)
  • libseccomp (для установки политики seccomp для контейнера)
  • libgnutls (для контрольных сумм)
  • liblua (для LUA binding)
  • python3-dev (для python3 binding)

Установка

В большинстве случаев, вы найдете последние версии LXC доступными для вашего дистрибутива Linux. Либо напрямую в репозитории пакетов дистрибутива или через какой-либо канал backport.

Для вашего первого знакомства с LXC мы рекомендуем вам использовать последний поддерживаемый релиз, такой как последний релиз исправления ошибок LXC 1.0.

Если вы используете Ubuntu, мы рекомендуем вам использовать Ubuntu 14.04 LTS как ваш хост контейнеров. релизы исправления ошибок LXC доступны напрямую в репозитории пакетов дистрибутива через короткое время после релиза и предоставляют чистый (непатченый) upstream experience.

Ubuntu также один из (если не единственный) дистрибутивов Linux поставляющийся по умолчанию со всем что нужно для безопасных, непривилегированных контейнеров LXC.

На таких системах как Ubuntu, установка LXC проста как:

sudo apt-get install lxc 

Все команды LXC будут доступны в вашей системе, все их шаблоны также как python3 binding для script LXC.

Создание непривилегированного контейнера из под пользователя

Непривилегированные контейнеры самые защищенные. Они используют связи uid и gid для выделения диапазона uids и gids контейнеру. Это означает что uid 0 (root) в контейнере на самом деле что-то около uid 100000 вне контейнера. Так что стоит чему-то пойти не так и атакующий покинет контейнер, он увидит что имеет столько же прав как пользователь nobody.

К сожалению это также означает что следующие обычные операции запрещены:

  • монтирования большинства файловых систем
  • создание нод устройств
  • любые операции uid/gid вне связанного диапазона

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

Теперь, все ниже предполагает последнюю систему Ubuntu или другой дистрибутив Linux предоставляющий такие же условия (последнее ядро, последняя версия shadow, cgmanager и выделение uid/gid по умолчанию).

Прежде всего, вам нужно удостоверится что ваш пользователь имеет связь uid и gid заданную в /etc/subuid и /etc/subgid. На системах Ubuntu, по умолчанию выделяется из 65536 uids и gids каждому новому пользователю в системе, так что у вас должен уже быть один. Если нет, вы должны использовать usermod чтобы получить один.

Далее /etc/lxc/lxc-usernet используемый для установки квоты на сетевые устройства для непривилегированных пользователей. По умолчанию, вашему пользователю запрещено создавать любые сетевые устройства на хосте, для изменения этого, добавьте:

your-username veth lxcbr0 10 

Это означает что your-username" разрешено создавать до 10 устройств veth соединенных с мостом lxcbr0.

Когда это сделано, последний шаг создание конфигурационного файла LXC.

  • Создайте директорию ~/.config/lxc если она не существует.
  • Скопируйте /etc/lxc/default.conf в ~/.config/lxc/default.conf
  • Добавьте в него следующие две линии:
  • lxc.idmap = u 0 100000 65536
  • lxc.idmap = g 0 100000 65536

Эти значения должны совпадать со значениями в /etc/subuid и /etc/subgid, значения выше подходят для первого пользователя на стандартной системе Ubuntu.

После того как вы создадите ваш первый контейнер, вы возможно должный выйти и снова войти, или даже перезагрузить ваше устройство чтобы быть уверенным что пользователь помещен в правильные cgroups. (Это необходимо только если cgmanager не установлен на вашем устройстве после установки LXC.)

А теперь, создайте ваш первый контейнер:

lxc-create -t download -n my-container 

Шаблон загрузки покажет вам список дистрибутивов, версий и архитектур для выбора. Хорошим примером будет "ubuntu", "trusty" (14.04 LTS) и "i386".

Несколькими секундами позже ваш контейнер будет создан и вы сможете запустить его:

lxc-start -n my-container -d 

Затем вы можете проверить его статус:

lxc-info -n my-container
lxc-ls -f 

И получить интерактивную оболочку внутрь:

lxc-attach -n my-container 

Его можно остановить:

lxc-stop -n my-container 

И наконец удалить:

lxc-destroy -n my-container 

Создание непривилегированного контейнера от root

Для запуска общесистемного непривилегированного контейнера (то есть, непривилегированного контейнера запущенного от root) вы должны следовать только части шагов ниже.

А именно, вам нужно вручную выделить диапазон uid и gid для root в /etc/subuid and /etc/subgid. А затем задать этот диапазон в /etc/lxc/default.conf используя такие же записи lxc.idmap как выше.

И все. Root не требует квоты на сетевые устройства и использует общий конфигурационный файл так что другие шаги не применяются.

Любой контейнер создаваемый вами от root с этого момента будет запущен непривилегированным.

Создание привилегированных контейнеров

Привилегированные контейнеры это контейнеры созданные root и запущенные от root.

В зависимости от дистрибутива Linux, они могут быть защищены некоторым сбросом привилегий, профилями apparmor, контекстом selinux или политиками seccomp но все равно, процессы до сих пор запускаются от root и вы не должны давать root доступ внутри привилегированного контейнера недоверенной стороне.

Если вам все еще необходимо создавать привилегированные контейнеры, это довольно просто. Не делайте ничего из настроек описанных выше и LXC будет создавать привилегированные контейнеры.

Так:

sudo lxc-create -t download -n privileged-container 

Создаст новый "privileged-container" привилегированный контейнер на вашей системе используя образ и загруженного шаблона.

Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования