Bubblewrap - это инструмент что работает организовать работу песочницы в Linux и беги на уровне приложений непривилегированных пользователей. На практике Bubblewrap используется проектом Flatpak в качестве промежуточного уровня для изоляции приложений, запускаемых из пакетов программного обеспечения.
Для изоляции Linux использует технологии виртуализации традиционных контейнеров, основанных на использовании контрольных групп, пространств имен, Seccomp и SELinux. Для выполнения привилегированных операций по настройке контейнера Bubblewrap запускается с привилегиями root (исполняемый файл с флагом suid), за которым следует сброс привилегий после инициализации контейнера.
Нет необходимости включать пространства имен пользователей в системе, что позволяет использовать собственный набор идентификаторов в контейнерах, поскольку по умолчанию он не работает во многих дистрибутивах.
О пузырчатой пленке
Bubblewrap позиционируется как ограниченная реализация suida из подмножества функций пространства имен пользователя, чтобы исключить из среды все идентификаторы пользователей и процессов, кроме текущего, используйте режимы CLONE_NEWUSER и CLONE_NEWPID.
Для дополнительной защиты программы, работающие в Bubblewrap, запускаются в режиме PR_SET_NO_NEW_PRIVS, что запрещает новые привилегии, например, с флагом setuid.
Изоляция на уровне файловой системы выполняется путем создания по умолчанию нового пространства имен монтирования, в котором с помощью tmpfs создается пустой корневой раздел.
При необходимости к данному разделу в разделе «смонтировать – связать»(Например, начиная с опции«bwrap –ro-bind / usr / usr', Раздел / usr перенаправляется с хоста в режиме только для чтения).
Сетевые возможности ограничены доступом к интерфейсу обратной связи инвертированный с изоляцией сетевого стека с помощью индикаторов CLONE_NEWNET и CLONE_NEWUTS.
Ключевое отличие от аналогичного проекта Firejail, который также использует средство запуска setuid, это то, что в Bubblewrap, слой контейнера включает только минимально необходимые функции а все расширенные функции, необходимые для запуска графических приложений, взаимодействия с рабочим столом и фильтрации вызовов Pulseaudio, переносятся на сторону Flatpak и запускаются после сброса привилегий.
Firejail, с другой стороны, объединяет все связанные функции в один исполняемый файл., усложняя ваш аудит и сохраняя безопасность на должном уровне.
Bubblewrap в основном работает по создание пустого пространства имен монтирования во временной файловой системе который будет уничтожен после завершения обработки песочницы.
Используя переключатели, пользователь может создать желаемую среду файловой системы в пространстве имен монтирования, монтируя нужные каталоги по ссылке из хост-системы.
Пузырьковая пленка 0.4.0
Bubblewrap в настоящее время находится в версии 0.4.0, который был недавно выпущен. Код проекта написан на C и распространяется по лицензии LGPLv2 +.
Новая версия примечателен реализацией поддержки объединения пространств имен и процессов существующие пользователи (пространства имен pid).
Флаги «–userns», «–userns2» и «–pidns» были добавлены для управления соединением пространств имен.
Эта функция не работает в режиме setuid и требует отдельного режима, который может работать без привилегий root, но требует, чтобы в системе были включены пространства имен пользователей (отключены по умолчанию в Debian и RHEL / CentOS), и не исключает возможность использования потенциально уязвимых мест. оставшиеся уязвимости на грани ограничений «пользовательских пространств имен».
Из новых возможностей Bubblewrap 0.4, также наблюдается возможность сборки с использованием библиотеки musl C вместо glibc, и поддержка сохранения информации о пространстве имен в файл статистики в формате JSON.
Код Bubblewrap, а также документацию по нему можно найти на Github, ссылка это.