Даниэль Беррандж (Daniel Berrange), работающий в компании Red Hat над развитием средств виртуализации, представил первый публичный выпуск пакета libvirt-sandbox,
позволяющего организовать выполнение произвольных пользовательских
приложений в изолированном окружении, построенном с использованием
libvirt. В рамках libvirt-sandbox подготовлен API, расширяющий
возможности libvirt в плане изолированного запуска отдельных приложений,
и специальная сервисная утилита virt-sandbox.
Несколько лет назад компания Red Hat подготовила утилиту sandbox,
которая позволяет организовать безопасное выполнение не вызывающих
доверия программ с обеспечением изоляции при помощи SELinux, что
накладывало определённые ограничения на функциональность sandbox.
Утилита virt-sandbox существенно отличается от своего предшественника
тем, что использует для изоляции полноценные виртуальные машины и не
ограничивается только запуском подозрительных программ, а
позиционируется также для более безопасного выполнения программ в
повседневной практике и для организации быстрого запуска виртуальных
машин для различных сетевых приложений. При использовании virt-sandbox
требующие изоляции приложения запускаются напрямую из файловой системы
базового хоста, без предварительной установки, сборки и настройки
начинки гостевой системы. В настоящее время virt-sandbox поддерживает
изоляцию с использованием гипервизора KVM и изолированных контейнеров LXC, но теоретически могут быть использованы любые системы виртуализации, поддерживаемые в libvirt (Xen, VirtualBox и т.п.).
При использовании системы виртуализации KVM возникает проблема с
необходимостью формирования полного программного окружения при
выполнении каждого приложения, запускаемого в virt-sandbox. Разработчики
virt-sandbox нашли простой выход: при каждом запуске на лету создаётся
минимальный загрузочный initrd-образ, содержащий специально созданную
программу инициализации. После того как данный образ получит управление,
программа инициализации загружает модуль ядра virtio-9p
и монтирует корневую ФС текущей базовой системы в режиме только для
чтения. Таким образом для изолированного приложения формируется гостевое
окружение, полностью аналогичное по своему составу базовой системе, но
не допускающее внесения изменений. После монтирования ФС производится
запуск указанного приложения и перенаправление ввода/вывода на
хост-систему. После завершения работы программы, виртуальная машина
автоматические завершает своё выполнение. На формирование гостевой
системы тратится всего несколько секунд, например, запуск /bin/false под
управлением virt-sandbox занимает около 4 секунд (после оптимизации
время планируется сократить до 2 секунд).
Подготовка специального API для изолированного запуска отдельных
приложений сулит интересные возможности для разработчиков сторонних
систем. Например, программист может определить желаемые характеристики
изолированного окружения, указав какую программу следует выполнить,
какие части ФС смонтировать и какие использовать параметры сети. После
вызова соответствующей функции libvirt-sandbox на базе указанной
конфигурации можно получить на выходе XML-конфигурацию libvirt для
формирования гостевой системы, соответствующей заданным характеристикам и
адаптированной для конкретной системы виртуализации.
В настоящее время полноценно работают только консольные
приложения. Реализована начальная поддержка запуска GUI-программ, но она
ещё требует значительной доработки. Среди планов на будущее отмечается:
адаптация virt-viewer и использование SPICE/VNC для организации запуска
в sandbox-режиме графических приложений; создание надлежащих политик
SELinux для доступа к базовой файловой системе в режиме только для
чтения (в настоящее время virt-sandbox работает только в
permissive-режиме SELinux); подготовка утилиты для автоматического
формирования типовых окружений для различных сервисов, например, для
обеспечения запуска изолированной копии apache; задействование
возможностей libvirt по формированию межсетевого экрана для
дополнительной фильтрации сетевого трафика от изолированных приложений.
Готовые rpm-пакеты с libvirt-sandbox подготовлены для Fedora Linux и доступны в репозитории rawhide. Планируется, что новая система изоляции будет включена в состав релиза Fedora 17.
Источник
|