Как я видел в 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, но контейнер, который он порождает, будет ограничен.