Мой вопрос касается безопасности контейнера 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, выполнив:
Это заставит lxc-start работать без ограничений, но продолжит ограничивать сам контейнер. Если вы также хотите отключить ограничение контейнера, то помимо отключения
usr.bin.lxc-start
профиля необходимо добавить:в файл конфигурации контейнера. Если вы хотите запустить контейнер в пользовательском профиле, вы можете создать новый профиль в
/etc/apparmor.d/lxc/
. Его имя должно начинаться с lxc-, чтобы разрешить lxc-start переход к этому профилю. После создания политики загрузите ее, используя:Профиль будет автоматически загружен после перезагрузки, поскольку он получен из файла
/etc/apparmor.d/lxc-containers
. Наконец, чтобы контейнер CN использовал это новоеlxc-CN-profile
, добавьте следующую строку в его файл конфигурации:lxc-execute
не входит в профиль Apparmor, но контейнер, который он порождает, будет ограничен.источник
dmesg
его можно вызывать из любого контейнера (по крайней мере, в конфигурации по умолчанию). Боюсь, это не единственная угроза безопасности ...