Где границы безопасности контейнеров lxc?

8

Мой вопрос касается безопасности контейнера LXC.

Если я запускаю несколько контейнеров на своем ящике и предоставляю пользователям отдельный ssh-доступ к их собственному контейнеру, может ли любой из этих контейнеров взломать другие контейнеры на этом ящике или даже хост-компьютер?

Где границы безопасности контейнеров lxc?

Icode
источник
вы знаете, что об этом нужно беспокоиться, об этом позаботится AppArmor.
2013 г.

Ответы:

8

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

rɑːdʒɑ
источник
Большое спасибо за ваш ответ. Итак, вы говорите, что это безопасно, если я использую AppArmor?
iCode
@iCode, Да appArmor разработан для защиты приложений Ubuntu, а LXC также получает отличную поддержку с точки зрения безопасности, если вы используете AppArmor.
2013 г.
AppArmor - это еще не все, например, я обнаружил, что dmesgего можно вызывать из любого контейнера (по крайней мере, в конфигурации по умолчанию). Боюсь, это не единственная угроза безопасности ...
Даниэль Олдер