Выпуск Bubblewrap 0.11, прослойки для создания изолированных окружений

Опубликована новая версия инструментария для организации работы изолированных окружений Bubblewrap 0.11, используемого для ограничения отдельных приложений непривилегированных пользователей. На практике Bubblewrap применяется проектом Flatpak в качестве прослойки для изоляции запускаемых из пакетов приложений. Для изоляции используются традиционные для Linux технологии контейнерной виртуализации, основанные на использовании cgroups, пространств имён (namespaces), Seccomp и SELinux. Код проекта написан на языке Си и распространяется под лицензией LGPLv2+.

Bubblewrap запускается с правами root (исполняемый файл c suid-флагом) с последующим сбросом привилегий после завершения инициализации и настройки контейнера. Вместо пространств имён идентификаторов пользователя (user namespace), которые по умолчанию отключены в большинстве дистрибутивов, в Bubblewrap задействована suid-реализация некоторых возможностей user namespaces. Дополнительно для исключения всех лишних идентификаторов пользователей и процессов из создаваемого изолированного окружения, могут использоваться режимы CLONE_NEWUSER (user namespace) и CLONE_NEWPID (PID namespace). Для дополнительной защиты программы запускаются в режиме PR_SET_NO_NEW_PRIVS, запрещающем получение новых привилегий, например, при наличии флага setuid.

Изоляция на уровне файловой системы производится через создание по умолчанию нового пространства имён точек монтирования (mount namespace), в котором при помощи tmpfs создаётся пустой корневой раздел. В данный раздел при необходимости прикрепляются разделы внешней ФС в режиме “mount –bind” (например, при запуске c опцией “bwrap –ro-bind /usr /usr” раздел /usr пробрасывается из основной системы в режиме только для чтения). Сетевые возможности ограничиваются доступом к loopback-интерфейсу с изоляцией сетевого стека через флаги CLONE_NEWNET и CLONE_NEWUTS.

Ключевым отличием от похожего проекта Firejail, который также использует модель запуска с применением setuid, является то, что в Bubblewrap прослойка для создания контейнеров включает только необходимый минимум возможностей, а все расширенные функции, необходимые для запуска графических приложений, взаимодействия с рабочим столом и фильтрации обращений к Pulseaudio, вынесены на сторону Flatpak и выполняются уже после сброса привилегий. Firejail же объединяет в одном исполняемом файле все сопутствующие функции, что усложняет его аудит и поддержание безопасности на должном уровне.

В новом выпуске:

  • Предоставлена возможность создания точек монтирования, в которых используется моногослойная файловая система OverlayFS, объединяющая несколько частей других файловых систем. Для управления использованием
    OverlayFS предложены новые опции командой строки “–overlay”, “–tmp-overlay”, “–ro-overlay” и “–overlay-src”.
  • Добавлена опция “–level-prefix” для подстановки в диагностический вывод уровня приоритета записи в стиле syslog, что позволяет использовать для обработки вывода такие утилиты, как “logger” и “systemd-cat”.
  • Прекращена поддержка сборочной системы Autotools. Для сборки теперь необходим инструментарий Meson.

Release. Ссылка here.