У меня есть контейнер Docker (LXC), который работает MySQL. Поскольку идея Docker, как правило, заключается в «одном запущенном процессе на контейнер», если я определю профили AppArmor для двоичного файла MySQL, будут ли они реализованы? Есть ли способ для меня, чтобы проверить это?
11
cgroups
, но не так сильно . Лучше быть в безопасности, чем сожалеть, я бы предпочел, чтобы MySQL был заблокирован, чем чтобы MySQL нулевого дня нашел способ вырваться из cgroup.Ответы:
Во-первых, cgroups не используются для изоляции приложения от других в системе. Они используются для управления использованием ресурсов и доступа к устройству. Это различные пространства имен (PID, UTS, mount, user ...), которые обеспечивают некоторую (ограниченную) изоляцию.
Более того, процесс, запущенный внутри контейнера Docker, вероятно, не сможет управлять профилем AppArmor, в котором он запущен. В настоящее время используется подход к настройке определенного профиля AppArmor перед запуском контейнера.
Похоже, что драйвер выполнения libcontainer в Docker поддерживает настройку профилей AppArmor для контейнеров , но я не могу найти ни одного примера или ссылки в документе.
Очевидно, AppArmor также поддерживается с LXC в Ubuntu .
Вы должны написать профиль AppArmor для своего приложения и убедиться, что LXC / libcontainer / Docker / ... загружает его перед запуском процессов внутри контейнера.
Профили, используемые таким способом, должны быть принудительными, и для их проверки вы должны попробовать нелегальный доступ и убедиться, что он не работает.
В этом случае нет никакой связи между двоичным файлом и действующим профилем. Вы должны явно указать Docker / LXC, чтобы использовать этот профиль для вашего контейнера. Написание профиля для двоичного файла MySQL приведет к его применению только на хосте, а не в контейнере.
источник
Ответ очень вероятен: нет.
В разделе руководства по Ubuntu Server LXC обсуждается ваш точный вопрос и делается следующее утверждение:
Лучший способ избежать эксплойтов, имеющих нежелательные эффекты, - ограничить пользователя, запускающего контейнер, и использовать контейнеры LXC пользовательского пространства, которые используют функцию userns ядра. Однако в
docker
настоящее время - насколько мне известно - не поддерживаетuserns
.В таком случае MySQL будет - с точки зрения хостов - работать как непривилегированный пользователь, а внутри контейнера он может быть запущен как
root
. Вы можете использоватьiptables
привязку MySQL к внешнему порту хоста, если это необходимо.источник