Linux LXC против FreeBSD

62

Есть ли заметные различия между LXC (контейнеры Linux) и тюрьмами FreeBSD с точки зрения безопасности, стабильности и производительности?

На первый взгляд оба подхода выглядят очень похоже.

Филипп Классен
источник
1
LXC - это довольно новая технология, поэтому я ожидал бы большей безопасности и стабильности в тюрьмах. Даже не догадка о производительности. Есть некоторые известные проблемы безопасности с LXC, которые можно устранить, например, с помощью selinux. Лично мне нравится LXC.
Павел Шимерда
1
@ PavelŠimerda Я только что услышал о LXC сегодня, но был удивлен, узнав, что и Heroku, и, вероятно, Google App Engine уже используют LXC.
Филипп Классен
3
Если вы только что наткнулись на LXC, вам следует взглянуть на Docker, который использует LXC под капотом: docker.io/the_whole_story
Kev
1
Docker больше не использует lxc.
1
@nwildner больше не использует liblxc, но использует те же самые понятия: пространства имен ядра.
0xC0000022L

Ответы:

101

Независимо от того, какое причудливое имя используется здесь, оба являются решениями конкретной проблемы: лучшее решение для сегрегации, чем классический Unix chroot . Виртуализация на уровне операционной системы, контейнеры, зоны или даже «chroot with steroids» - это названия или коммерческие названия, которые определяют ту же концепцию разделения пространства пользователя, но с различными функциями.

Chroot был представлен 18 марта 1982 года, за несколько месяцев до выпуска 4.2 BSD , как инструмент для тестирования его установки и сборки системы, но сегодня у него все еще есть свои недостатки. Так как первая цель chroot состояла только в том, чтобы обеспечить путь нового рута , другие аспекты системы, которые должны были быть изолированы или управляемы, были раскрыты (сеть, представление процесса, пропускная способность ввода / вывода). Именно здесь появились первые контейнеры (виртуализация на уровне пользователя).

Обе технологии (FreeBSD Jails и LXC) используют изоляцию пространства пользователя для обеспечения еще одного уровня безопасности. Такое разделение будет гарантировать, что определенный процесс будет взаимодействовать только с другими процессами в том же контейнере на том же хосте, и если при использовании какого-либо сетевого ресурса для достижения связи «с внешним миром» все будет перенаправлено на назначенный интерфейс / канал, который этот контейнер есть.

Особенности

FreeBSD Jails:

  • Считается стабильной технологией, поскольку она является функцией FreeBSD начиная с 4.0;
  • Он берет лучшее из файловой системы ZFS в тот момент, когда вы можете клонировать тюрьмы и создавать шаблоны тюрьм, чтобы легко развернуть больше тюрем. Еще немного безумия ZFS ;
  • Хорошо документировано и развивается ;
  • Иерархические тюрьмы позволяют вам создавать тюрьмы внутри тюрьмы (нам нужно идти глубже!). Объедините с, allow.mount.zfsчтобы получить больше власти, и другие переменные, такие как children.maxдействительно, определяют максимальное количество детей в тюрьмах.
  • rctl (8) будет обрабатывать ограничения ресурсов джейлов ( память, процессор, диск, ...);
  • Тюрьмы FreeBSD обрабатывают пространство пользователя Linux ;
  • Сетевая изоляция vnet, позволяющая каждой тюрьме иметь свой собственный сетевой стек, интерфейсы, таблицы адресации и маршрутизации;
  • nullfs помочь связать папки с папками, расположенными на реальном сервере, внутри тюрьмы;
  • утилита ezjail для массового развертывания и управления тюрьмами;
  • Много настроек ядра ( sysctl). security.jail.allow.*параметры будут ограничивать действия пользователя root этой тюрьмы.
  • Возможно, тюрьмы FreeBSD расширят некоторые функции проекта VPS, такие как живая миграция, в ближайшем будущем.
  • Некоторые усилия по интеграции ZFS и Docker запущены. Все еще экспериментальный.
  • FreeBSD 12 поддерживает bhyve внутри тюрьмы и pf внутри тюрьмы, создавая дополнительную изоляцию для этих инструментов
  • За последние годы было разработано множество интересных инструментов. Некоторые из них проиндексированы в этом сообщении .
  • Альтернативы: проект FreeBSD VPS

Контейнеры Linux (LXC):

  • Новая технология "в ядре", но одобренная крупными (особенно Canonical);
  • Непривилегированные контейнеры, начиная с LXC 1.0, делают большой шаг в безопасности внутри контейнеров;
  • UID и GID отображение внутри контейнеров;
  • Пространства имен ядра, чтобы разделить IPC, mount, pid, сеть и пользователей. Эти пространства имен могут обрабатываться обособленно, когда процесс, использующий другое пространство имен сети , не обязательно будет изолирован в других аспектах, таких как хранилище;
  • Контрольные группы (cgroups) для управления ресурсами и их группировки. CGManager - парень, чтобы достигнуть этого.
  • Профили Apparmor / SELinux и возможности ядра для более эффективного применения функций ядра, доступных для контейнеров. Seccomp также доступна в контейнерах lxc для фильтрации системных вызовов. Другие аспекты безопасности здесь .
  • Разрабатывается функциональность живой миграции. Сложно сказать, когда он будет готов к производственному использованию, поскольку docker / lxc будет иметь дело с паузой, снимком, переносом и переносом процессов в пользовательском пространстве - ref1 , ref2 .Динамическая миграция работает с базовыми контейнерами (без прохода устройства, сложных сетевых служб или специальных конфигураций хранилища).
  • Привязки API для включения разработки в python3 и 2, lua, Go, Ruby и Haskell
  • Централизованная зона «Что нового». Очень полезно, когда вам нужно проверить, была ли исправлена ​​какая-либо ошибка или была добавлена ​​новая функция. Здесь .
  • Интересной альтернативой может быть lxd , который работает под капотом с lxc, но имеет некоторые приятные функции, такие как REST API, интеграция с OpenStack и т. Д.
  • Другая интересная вещь заключается в том, что Ubuntu, похоже, поставляет zfs в качестве файловой системы по умолчанию для контейнеров 16.04 . Для поддержания согласованности проектов lxd выпустил версию 2.0, а некоторые функции связаны с zfs .
  • Альтернативы : OpenVZ , Docker
  • Докер . Обратите внимание, что Docker использует пространства имен, cgroups, создающие изоляцию «на приложение» / «на программное обеспечение». Ключевые отличия здесь . В то время как LXC создает контейнеры с несколькими процессами, Docker максимально сводит контейнер к одному процессу и затем управляет этим через Docker.
  • Усилия по интеграции Docker с SELinux и сокращению возможностей внутри контейнера, чтобы сделать его более безопасным - Docker и SELinux, Дэн Уолш
  • В чем разница между Docker, LXD и LXC

Docker больше не использует lxc. Теперь у них есть специальная библиотека libcontainer, которая напрямую обрабатывает интеграцию с низкоуровневым пространством имен ядра и cgroups.

Ни одна из этих технологий не является панацеей безопасности, но обе являются довольно хорошими способами изолировать среду, которая не требует полной виртуализации из-за смешанной инфраструктуры операционных систем. Безопасность придет после прочтения документации и реализации настраиваемых параметров ядра, MAC и изоляций, которые предлагает вам тот уровень Virt на уровне ОС.

Смотрите также:


источник
1
Стоит отметить, что из коробки lxc не предпринимает никаких усилий для обеспечения надлежащей изоляции гостя. Однако lxd пытается обеспечить изоляцию, такую ​​как тюрьмы BSD или зоны Solaris.
allquixotic
LXD - это «лучший опыт» LXC, ставящий поверх него другие функции. Тем не менее, здесь приятно процитировать этого маленького парня
@allquixotic Вы имеете в виду, если используете неизменную конфигурацию, созданную из шаблонов? Правда, но непривилегированные (с поддержкой пользователей) контейнеры были доступны с LXC 1.x и могли даже автоматически запускаться при загрузке системы, при условии, что они принадлежали root(и, таким образом, находились в общесистемном расположении для контейнеров).
0xC0000022L