Использование минимальных контейнеров LXC в качестве расширенного и безопасного chroot для изоляции сервисов

3

Прежде всего, я не эксперт по безопасности, и я никогда раньше не пользовался LXC.

Я пытаюсь максимально укрепить защищенный сервер Gentoo. Для этого я думаю использовать LXC, возможно, в сочетании с KVM, чтобы изолировать как можно больше сетевых сервисов.

Я прочитал страницу руководства по LXC unix, но мне все еще непонятно, как настраиваются контейнеры Linux. Просматривая в Интернете дополнительную информацию, я нашел только документацию по запуску всей системы внутри контейнера Linux, а это не то, что я хотел бы сделать.

Я хочу использовать LXC для запуска только одного приложения внутри контейнера, включая только строгие минимальные файлы / ресурсы, требуемые приложением. Я не хочу запускать всю систему внутри контейнера, избегая даже наличия busybox.

Например, я хотел бы изолировать ntpdслужбу, насколько я знаю, что я могу синхронизировать системные часы, я не могу запустить ее внутри виртуальной машины. Но я мог запустить его внутри chrootили, я полагаю, мог бы запустить его внутри контейнера Linux для лучшей изоляции и безопасности.
Для этого мне необходимо:

  1. Определите, какие файлы требуются ntpd при настройке chroot-тюрьмы.
  2. Здесь я не знаю, что и как делать: конфигурация LXC, шаблон, куда поместить мои файлы для настройки контейнера и т. Д.
  3. Запустить его с lxc-execute

Это возможно? Какими будут различные шаги для создания, запуска и управления таким контейнером?

Бланко
источник

Ответы:

5

Исторически в LXC было много проблем безопасности, которые мешают ему быть по-настоящему изолированным, но усовершенствования инфраструктуры основного ядра Linux разрешили большинство (если не все) этих проблем.

Смотрите здесь для обзора проблем безопасности / улучшений, которые наблюдались в последующих выпусках Ubuntu, включающих LXC.

Я нашел эту документацию Oracle Unbreakable Enterprise Kernel особенно полезной для объяснения того, как делать контейнеры уровня приложения.

Из документов:

Контейнеры приложения не создаются с помощью шаблонных скриптов. Вместо этого контейнер приложения монтирует всю или часть корневой файловой системы хоста, чтобы обеспечить доступ к двоичным файлам и библиотекам, которые требуются приложению. Вы используете команду lxc-execute, чтобы вызвать lxc-init (урезанную версию / sbin / init) в контейнере. lxc-init монтирует все необходимые каталоги, такие как / proc, / dev / shm и / dev / mqueue, выполняет указанную прикладную программу и затем ожидает ее завершения. При выходе из приложения экземпляр контейнера перестает существовать.

allquixotic
источник