В настоящее время я начинаю проект по оценке ненадежных программ (студенческих заданий) в безопасной среде песочницы. Основная идея заключается в создании веб-приложения для GlassFish и Java-обертки вокруг lxc-utils для управления контейнерами LXC. Оно будет иметь очередь ожидающих программ, а Java-обертка будет поддерживать фиксированное количество (пул) контейнеров LXC, назначая каждой программе один (неиспользуемый) контейнер.
Каждый контейнер должен быть защищен с помощью SELinux для защиты хост-системы.
Мой вопрос: является ли создание такого механизма для среды песочницы хорошей идеей или есть более подходящее решение этой проблемы? Он должен быть легким и защищенным от творчества учащихся.
решение1
Вы не написали, почему выбрали LXC, ведь это не самое безопасное решение для виртуализации. Я активный пользователь KVM/XEN, а также LXC, и могу сказать одно: когда дело касается безопасности, я никогда не использую контейнеры Linux (неважно, LXC / OpenVZ / VServer). С KVM/XEN просто проще (и надежнее).
Если речь идет о производительности или требованиях к оборудованию, то ладно — вы можете попробовать LXC, но есть некоторые правила, которым следует следовать:
- libvirt обеспечивает строгое ограничение контейнеров при использовании SELinux (спасибо LXC_driver) — хотя не уверен, касается ли это только RHEL/Centos/Fedora (я не так часто использую Ubuntu/Debian)https://www.redhat.com/archives/libvir-list/2012-January/msg01006.html- так что переход на SELinux - хорошая идея (по моему мнению, это "must have" в таких обстоятельствах)
- Установите строгие правила cgroups, чтобы ваши гости не заморозили ваш хост и не повлияли на другие контейнеры.
- Я бы предпочел использовать контейнеры на основе LVM — это всегда еще один уровень «безопасности».
- Подумайте о сетевом решении и архитектуре. Должны ли эти контейнеры общаться друг с другом?
Начните с чтенияэтот- он довольно старый, но все же - там много знаний. А также - встречайтепространства имен пользователей
И после всего этого подумайте еще раз - у вас действительно есть столько времени, чтобы играть с безопасностью LXC? KVM просто намного проще...
решение2
Для запуска ненадежных программ пространства имен Linux по-прежнему являются лучшим решением. Его проще настроить, чем KVM, и он требует меньше ресурсов. Вы можете попробовать LXC, однако LXC был создан как более общая песочница для запуска полных образов дистрибутивов Linux. На ум приходят еще две песочницы пространств имен Linux:
- Гугл Хромsandbox, в настоящее время распространяется с Google Chrome/Chromium
- Пожарная тюрьма, безопасная песочница, созданная для запуска Mozilla Firerfox и любой другой программы с графическим интерфейсом.