Независимо от того, какое причудливое имя используется здесь, оба являются решениями конкретной проблемы: лучшее решение для сегрегации, чем классический 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 на уровне ОС.
Смотрите также: