Требования

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

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

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

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

Установка

В большинстве случаев, вы найдете последние версии 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.

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

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

Теперь, все ниже предполагает последнюю систему 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.

Эти значения должны совпадать со значениями в /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.id_map как выше.

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

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

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

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

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

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

Так:

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

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