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

Незалежно від фантазійної назви, яка використовується тут, обидва є рішенням конкретної проблеми: Краще рішення для сегрегації, ніж класичний chroot Unix . Операційна віртуалізація на рівні системи, контейнери, зони або навіть "chroot зі стероїдами" - це назви або комерційні назви, що визначають одне і те ж поняття розділення простору користувачів, але з різними можливостями.

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

Обидві технології (FreeBSD Jails та LXC) використовують ізоляцію простору користувачів, щоб забезпечити ще один рівень безпеки. Ця компартменталізація забезпечить, що визначений процес буде спілкуватися лише з іншими процесами в тому ж контейнері на тому ж хості, і якщо використовувати будь-який мережевий ресурс для досягнення зв'язку "поза світом", все буде передано на призначений інтерфейс / канал, який цей контейнер має.

Особливості

СІЗО FreeBSD:

  • Вважається стабільною технологією, оскільки вона є функцією у FreeBSD з 4.0;
  • Тут потрібна найкраща файлова система ZFS в тому місці, де ви могли б клонувати в'язниці та створювати шаблони в'язниці, щоб легко розгорнути більше в'язниць. Ще трохи божевілля ZFS ;
  • Добре задокументовані та розвиваються ;
  • Ієрархічні в'язниці дозволяють створювати тюрми всередині в'язниці (нам потрібно заглибитись!). Поєднуйтесь із, allow.mount.zfsщоб досягти більшої потужності, а інші змінні, як-от children.max, визначають максимум дитячих в'язниць.
  • rctl (8) буде обробляти обмеження ресурсів в'язниць (пам'ять, процесор, диск, ...);
  • FreeBSD в'язниці обробляють простору користувачів Linux ;
  • Мережева ізоляція vnet, що дозволяє кожній в'язниці мати свій власний мережевий стек, інтерфейси, адреси та таблиці маршрутів;
  • nullfs допомогти зв’язати папки з тими, які знаходяться на реальному сервері, до всередині в'язниці;
  • утиліта ezjail для допомоги у масовому розміщенні та управлінні тюрмами;
  • Багато змінних ядер ( sysctl). security.jail.allow.*Параметри обмежать дії кореневого користувача цієї в'язниці.
  • Можливо, в'язниці FreeBSD найближчим часом поширять деякі функції проекту VPS, такі як жива міграція .
  • Докладні зусилля щодо інтеграції ZFS та Docker . Досі експериментальний.
  • FreeBSD 12 підтримує bhyve всередині в'язниці та pf всередині в'язниці, створюючи подальшу ізоляцію від цих інструментів
  • Протягом останніх років було розроблено багато цікавих інструментів. Деякі з них індексуються на цій публікації в блозі .
  • Альтернативи: Проект FreeBSD VPS

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

  • Нова технологія "in kernel", але вона схвалюється великими (особливо Canonical);
  • Непривілейовані контейнери, починаючи з LXC 1.0, роблять великий крок у безпеці всередині контейнерів;
  • Відображення UID та GID всередині контейнерів;
  • Простори імен ядра, щоб розділити IPC, mount, pid, мережу та користувачів. Цими просторами імен можна обробляти відокремлено, де процес, що використовує інший мережевий простір імен , не обов'язково буде ізольований від інших аспектів, таких як сховище;
  • Групи управління (групи) для управління ресурсами та групування їх. 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 використовує простори імен, групи, створюючи ізоляцію "за програмою" та "за програмним забезпеченням". Ключові відмінності тут . Хоча LXC створює контейнери з декількома процесами, Docker максимально скорочує контейнер до одного процесу, а потім керує цим через Docker.
  • Зусилля щодо інтеграції Docker із SELinux та зменшення можливостей всередині контейнера, щоб зробити його більш безпечним - Docker та SELinux, Dan Walsh
  • Яка різниця між Docker, LXD та LXC

Докер більше не використовує lxc. Тепер у них є специфічна ліб під назвою libcontainer, яка обробляє інтеграцію безпосередньо з іменами простору імен Kernel та функціями групи.

Жодна технологія не є панацеєю безпеки, але обидва є досить хорошими способами виділити середовище, яке не потребує повної віртуалізації завдяки змішаній інфраструктурі операційних систем. Безпека з'явиться після читання документації та впровадження змінних ядер, MAC та ізоляцій, які пропонують вам ці віртуальні ОС.

Дивитися також:


1
Варто зазначити, що lxc не має зусиль, щоб забезпечити належну ізоляцію гостей. Однак lxd намагається забезпечити ізоляцію, як ув'язнення BSD або зони Solaris.
allquixotic

lxd - це "кращий досвід" LXC, що ставить над ним інші функції. Однак, здається, цитувати цього маленького хлопця тут

@allquixotic ви маєте на увазі, якщо ви використовуєте незмінену конфігурацію, створену з шаблонів? Правда, але непривілейовані контейнери (з увімкненими користувачами) були доступні з LXC 1.x і навіть можна було автоматично запуститись під час завантаження системи, за умови, що вони належать root(і таким чином розташовуються у контейнерах для загальної системи).
0xC0000022L
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.