LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

да, но по сути это просто опции в ядре.

Я не про то как они называются, а про то как они работают. Вот на примере изоляции процессов. Задача: сделать чтобы хостовые процессы были недоступны для контейнерных. Хорошее решение (фрибсд): вставим в код проверки доступа условие «процесс, который хочет доступ, должен быть либо в том же контейнере, либо снаружи от процесса, к которому он обращается». Плохое решение (линукс): давайте введём разные пространства идентификаторов процессов, лишим pid универсальности, добавим специальную логику для контейнеризованного pid1, и как побочный эффект от всего этого - контейнерные процессы перестанут видеть хостовые. И так везде.

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

Да, я немного не то написал. Речь была про то, что если у тебя есть процесс с pid=12345, то ты всегда к нему можешь обратиться именно по этому pid (если права доступа позволяют), и не надо заниматься пересчётами в зависимости от того где ты находишься.

если это chroot, то какая разница?

Всмысле какая разница? В том и дело, что в докере не chroot а mount namespace, из-за которого чтоб добраться до файлов контейнера надо пачку костылей применить, и вообще сходу непонятно где что расположено. Да, это недостаток именно докера а не линукса. Линуксовый контейнер можно и через chroot сделать, хотя возможно без mount namespace там будут проблемы безопасности.

ну в общем-то разницы почти никакой

Как это никакой? Ты уже какие-то виртуальные интерфейсы и мосты создаёшь. В фрибсд между контейнерами нет мостов, они в одной хостовой сети расположены, а разделение доступа делается на уровне IP-адресов, а не на уровне интерфейсов, что намного легче в целом.

аналога thick jail

Jail-ы не настраивают себе айпи адреса вообще, им их выдаёт хост. Исключение - режим виртуализированной сети, который, как я выше писал, нужен только для роутеров, а обычно его не применяют.

То что, там разные сетевые пространства имен никакой доп. нагрузки в администрировании не дает.

Создаёт, конечно. Вот смотри, я ввожу команду

jail / x 1.2.3.4 csh
и попадаю в новосозданный контейнер с айпи-адресом 1.2.3.4 и имеющий доступ ко всем хостовым файлам (а можно и не ко всем, если другой рут вместо / указать). Никаких конфигов не требуется, команда набирается за 5 секунд и помнится наизусть. А ещё она никак не влияет на сетевые настройки хоста, т.к. не мусорит в них всякой чушью.

Исходная версия firkax, :

да, но по сути это просто опции в ядре.

Я не про то как они называются, а про то как они работают. Вот на примере изоляции процессов. Задача: сделать чтобы хостовые процессы были недоступны для контейнерных. Хорошее решение (фрибсд): вставим в код проверки доступа условие «процесс, который хочет доступ, должен быть либо в том же контейнере, либо снаружи от процесса, к которому он обращается». Плохое решение (линукс): давайте введём разные пространства идентификаторов процессов, лишим pid универсальности, добавим специальную логику для контейнеризованного pid1, и как побочный эффект от всего этого - контейнерные процессы перестанут видеть хостовые. И так везде.

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

Да, я немного не то написал. Речь была про то, что если у тебя есть процесс с pid=12345, то ты всегда к нему можешь обратиться именно по этому pid (если права доступа позволяют), и не надо заниматься пересчётами в зависимости от того где ты находишься.

если это chroot, то какая разница?

Всмысле какая разница? В том и дело, что в докере не chroot а mount namespace, из-за которого чтоб добраться до файлов контейнера надо пачку костылей применить, и вообще сходу непонятно где что расположено. Да, это недостаток именно докера а не линукса. Линуксовый контейнер можно и через chroot сделать, хотя возможно без mount namespace там будут проблемы безопасности.

ну в общем-то разницы почти никакой

Как это никакой? Ты уже какие-то виртуальные интерфейсы и мосты создаёшь. В фрибсд между контейнерами нет мостов, они в одной хостовой сети расположены, а разделение доступа делается на уровне IP-адресов, а не на уровне интерфейсов, что намного легче в целом.

аналога thick jail

Jail-ы не настраивают себе айпи адреса вообще, им их выдаёт хост. Исключение - режим виртуализированной сети, который, как я выше писал, нужен только для роутеров, а обычно его не применяют.

То что, там разные сетевые пространства имен никакой доп. нагрузки в администрировании не дает.

Создаёт, конечно. Вот смотри, я ввожу команду

jail / x 1.2.3.4 csh
и попадаю в новосозданный контейнер с айпи-адресом 1.2.3.4 и имеющий доступ ко всем хостовым файлам. Никаких конфигов не требуется, команда набирается за 5 секунд и помнится наизусть. А ещё она никак не влияет на сетевые настройки хоста, т.к. не мусорит в них всякой чушью.