LXC — первое знакомство

Безопасность — наше все. Давно задумывался над идеей вынесения дырявого WordPress в изолированную среду. Ранее я уже использовал виртуализацию — Virtualbox. Штука интересная и достаточно простая в использовании, но, как мне показалась, немного тяжеловата для задач изоляции сервисов — долго устанавливать систему, долго настраивать, требует значительное количество ресурсов. Вообщем, не айс.

На глаза попался новый (для меня) тип виртуализации — на уровне операционной системы. Гугл сказал, что наиболее популярные варианты: OpenVZ и LXC.

OpenVZ

Изначально выбор пал именно на OpenVZ. По нему куча информации и мануалов. Что смутило сразу  — OpenVZ требует специального ядра. Что смутило позже — требуемое ядро очень древнее — 2.6 (мамонты отдыхают, на данный момент в моей системе 3.17). Есть помнить то, что «безопасность — наше все» и то, что за последние пару лет в ядре линукса было найдено достаточно много уязвимостей, то идея ставить такое решето ломает основную идею — повышения безопасности.

Но я все-таки решил попробовать это сделать. В моей любимой Linux ОС Gentoo даже нашлись парочку ебилдов: sys-kernel/openvz-sources (ядро с OpenVZ) и sys-cluster/vzctl(утилиты управления). Если кто-то хочет попробовать собрать ядро с OpenVZ, то гугл с этим поможет. Я же советую не тратить время и переходить сразу к чтению про LXC, так как ядро OpenVZ под Gentoo не собирается ни с какими конфигами.

LXC

В отличии от OpenVZ LXC не требует никакого специального ядра. Все необходимое для работы контейнера на LXC уже есть в любом современном linux ядре. Единственное что нужно сделать — пересобрать ядро с дополнительными опциями. Но для начала советую установить ебилд:

После установки вы получите полный пакет утилит для управления LXC контейнером. Помимо этого (абсолютно БЕСПЛАТНО! 🙂 ), в комплекте идет утилита lxc-checkconfig, которая проверяет текущую сборку ядра на наличие необходимых для работы модулей. Результат ее работы выглядит следующим образом.

Если все опции enable (как показано выше), то поздравляю — уже сейчас можно начать создавать контейнеры. Однако, в стандартном конфиге ядра поддержка многих опций по умолчанию не включена (о чем утилита грозит словами «missing»).

Не беда! Включим в ядро поддержку необходимых модулей. Мне больше нравится собирать ядро genkernel’ом.

Включаем поддержку необходимых опций как показано ниже.

После успешной сборки не забываем обновить конфиг grub’а:

Тем, кто до сих пор не использует grub2, придется добавлять новое ядро в конфиг вручную. Гугл поможет.

Перед перезагрузкой можно снова воспользоваться утилитой lxc-checkconfig и убедиться, что при выборе опций мы ничего не забыли:

P.S. Обычно конфиги в Gentoo складываются в /etc/kernels/.

Если все оказалось «enabled», то можно торжественно послать сервер в ребут для загрузки нового ядра.

LXC — как создать контейнер

Для гостевой системы мне нужен был Debian. Для этого необходимо установить ебилд dev-util/debootstrap. После этого можно невероятно быстро развернуть виртуальную систему с Debian:

Можно развертывать и другие linux-подобные, подробнее — http://wiki.gentoo.org/wiki/LXC.

Первое развертывание займет около 5-10 минут (скачивание исходников системы), но последующие — невероятно быстро. У меня развертывается за пару секунд. Настройки созданного контейнера, а так же сама файловая система, по умолчанию хранится в /etc/lxc/guestname/.

Запустить контейнер можно следующим образом:

Если хочется запускать через /etc/init.d/, то в комплект поставки LXC (опять же абсолютно бесплатно) включены init скрипты. Все что нужно — создать символьную ссылку:

После чего можно использовать привычные:

и добавлять виртуалки в автозапуск при помощи rc-update.

Подключиться в консоль виртуалки можно командой:

Остальную информации об управлении контейнером можно прочитать на http://wiki.gentoo.org/wiki/LXC.

Как выйти из LXC контейнера

Изначально я решил написать эту статью только ради этого сабжа, но что-то разошелся. 🙂

После перехода в контейнер командой lxc-console, показывается алерт, намекающий на то, каким образом можно покинуть этот контейнер:

Я безуспешно пытался выполнить пресловутую комбинацию из Ctrl+a, а затем — Ctrl+q, которая ни к чему не приводила и мне приходилось открывать еще один сеанс в PuTTY. Но однажды меня озарило! Нам советуют нажимать Ctrl+a <пробел> q. Пробел! Это значит, что Ctrl в момент нажатия q уже нужно отпустить.

Действительно, если после нажатия Ctrl+a отпустить Ctrl и нажать q, то управление возвращается в хостовую систему.

Мораль: нужно читать документацию, обращая внимание на мелочи. 🙂

  1. а можно насчёт дырявости вордпресса поподробнее? )

    • Я лично это заметил в модуле StatPress — дедовский способ подстановки параметров в SQL запрос…
      А вообще в интернетах постоянно сводки идут, что найдена бага в WP)

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">