Профілі AppArmor в Docker / LXC


11

У мене є контейнер Docker (LXC), який запускає MySQL. Оскільки ідея Docker - це, як правило, "один запущений процес на контейнер", якщо я визначу профілі AppArmor, орієнтовані на бінарний файл MySQL, чи будуть вони застосовані? Чи є спосіб для мене перевірити це?


чому ви хочете використовувати apparmor всередині контейнера?
c4f4t0r

3
У випадку, якщо проти бази даних запускається нульовий день чи інший подвиг, щоб запобігти йому доступ до чого - небудь іншого. Я довіряю Linux cgroups, але не дуже . Краще бути в безпеці, ніж вибачте, я б скоріше заблокував MySQL, ніж мій нульовий день MySQL знайшов спосіб вийти з групи.
Нафтулі Кей

Відповіді:


8

По-перше, групи не використовуються для ізоляції програми від інших у системі. Вони використовуються для управління використанням ресурсів та доступу до пристроїв. Саме різні простори імен (PID, UTS, mount, user ...) забезпечують певну (обмежену) ізоляцію.

Крім того, процес, запущений всередині контейнера Docker, ймовірно, не зможе керувати профілем AppArmor, під яким він працює. Зараз застосовується підхід до налаштування конкретного профілю AppArmor перед запуском контейнера.

Схоже, драйвер виконання libcontainer в Docker підтримує налаштування профілів AppArmor для контейнерів , але я не можу знайти приклад або посилання в документі.

Мабуть, AppArmor також підтримується LXC в Ubuntu .

Ви повинні написати профіль AppArmor для своєї програми та переконайтесь, що LXC / libcontainer / Docker / ... завантажує його перед запуском процесів всередині контейнера.

Використовувані таким чином профілі слід застосовувати, а для тестування його слід спробувати незаконний доступ і переконатися, що він не працює.

У цьому випадку немає зв’язку між двійковим та фактично примусовим профілем. Ви повинні чітко сказати Docker / LXC використовувати цей профіль для вашого контейнера. Запис профілю для бінарного файлу MySQL примусово застосовуватиме його лише на хості, а не в контейнері.


Це був мій (обмежений) досвід досі. У мене виникли проблеми зі створенням профілю з контейнера Docker, але якщо профіль генерувався поза контейнером і потім скопіювався, він повинен просто працювати ™, якщо, звичайно, ви запустите AppArmor в контейнері перед запуском виконуваного файлу.
Нафтулі Кей

@Siosm: LCX! = Libcontainer. Питання стосувалося драйвера LXC.
0xC0000022L

@ 0xC0000022L: Модель застосування програми AppArmor однакова для будь-якого інструменту, який використовується для обмеження процесів у контейнерах.
Siosm

3

Відповідь дуже вірогідна: ні.

Тема посібника для сервера Ubuntu LXC майже детально обговорює ваше запитання та робить таке твердження:

Програми в контейнері не можна додатково обмежувати - наприклад, MySQL працює під профілем контейнера (захищаючи хост), але не зможе ввести профіль MySQL (для захисту контейнера).

Кращий варіант , щоб уникнути експлойтів , що мають небажані ефекти, щоб обмежити користувача , що запустив контейнер і використовувати для користувача LXC контейнери , які дозволяють ефективно використовувати особливість ядра. Однак dockerнаразі - наскільки мені відомо - не підтримує userns.

У такому випадку MySQL - з точки зору хостів - працюватиме як непривілейований користувач, тоді як всередині контейнера він може працювати як root. Потім ви можете використовувати iptablesдля прив’язки MySQL до зовнішнього порту хоста, якщо потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.