Мой вопрос касается безопасности контейнера LXC.
Если я запускаю несколько контейнеров на своем ящике и предоставляю пользователям отдельный ssh-доступ к их собственному контейнеру, может ли какой-либо из этих контейнеров взломать другие контейнеры на этом ящике или даже хост-компьютер?
Где границы безопасности контейнеров lxc?
Как я видел в , LXC Он хранит информацию о контейнере и (с хранилищем по умолчанию) корневых файловых систем в / var / lib / lxc. Шаблоны создания контейнеров также обычно хранят кэшированную информацию о дистрибутиве в / var / cache / lxc.
Таким образом, как правило, доступ к корневой файловой системе разрешен только администратору, если при их создании не используется неправильная или неправильная конфигурация профилей пользователей.
Но разработчики Ubuntu, возможно, уже пришли к этому, и они предоставили безопасное решение с помощью AppArmor.
LXC поставляется с профилем Apparmor, предназначенным для защиты хоста от случайного злоупотребления привилегиями внутри контейнера. Например, контейнер не сможет записывать в /proc/sysrq-trigger
или в большинство /sys
файлов.
Профиль usr.bin.lxc-start вводится с помощью команды lxc-start. Этот профиль в основном не позволяет lxc-start монтировать новые файловые системы вне корневой файловой системы контейнера. Перед выполнением инициализации контейнера LXC запрашивает переключение на профиль контейнера. По умолчанию этот профиль является политикой lxc-container-default, которая определена в /etc/apparmor.d/lxc/lxc-default
. Этот профиль предотвращает доступ контейнера ко многим опасным путям и монтирует большинство файловых систем.
Если вы обнаружите, что lxc-start терпит неудачу из-за законного доступа, который запрещен его политикой Apparmor, вы можете отключить профиль lxc-start, выполнив:
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/
Это сделает lxc -start выполнить без ограничений, но продолжать ограничивать сам контейнер. Если вы также хотите отключить ограничение контейнера, то в дополнение к отключению профиля usr.bin.lxc-start
необходимо добавить:
lxc.aa_profile = unconfined
в файл конфигурации контейнера. Если вы хотите запустить контейнер в пользовательском профиле, вы можете создать новый профиль в /etc/apparmor.d/lxc/
. Его имя должно начинаться с lxc-, чтобы разрешить lxc-start переход к этому профилю. После создания политики загрузите ее, используя:
sudo apparmor_parser -r /etc/apparmor.d/lxc-containers
Профиль будет автоматически загружен после перезагрузки, поскольку он получен из файла /etc/apparmor.d/lxc-containers
. Наконец, чтобы контейнер CN использовал этот новый lxc-CN-profile
, добавьте следующую строку в его файл конфигурации:
lxc.aa_profile = lxc-CN-profile
lxc-execute
не входит в профиль Apparmor, но контейнер, который он порождает, будет ограничен.