Linux LXC по сравнению с тюрьмой FreeBSD

Чтобы сделать правильно это потребовало бы перепарсинга всех опций CP, и это не хорошая идея. Но вот что-то, что должно приблизиться:

# run cp command as-given, unless any argument ends in a slash
safecp() {
  for arg; do
    case $arg in */)
      echo "safecp: trailing slash in cp $*" >&2
      return 1
      ;;
    esac
  done
  cp "$@"
}

С другой стороны, попытайтесь поместить

set mark-directories off

в Вашем ~/.inputrc заставить удар не автоматически добавить наклонную черту когда завершающие вкладку каталоги.

64
29.04.2014, 04:42
1 ответ

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

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

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

Features

Jails:

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

Linux Containers (LXC):

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

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

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

См. также:

106
27.01.2020, 19:32

Теги

Похожие вопросы