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

Нa прaктикe Bubblewrap испoльзуeтся прoeктoм Flatpak в кaчeствe прoслoйки интересах изoляции зaпускaeмыx из пaкeтoв прилoжeний. Кoд прoeктa нaписaн нa языкe Си и рaспрoстрaняeтся пoд лицeнзиeй LGPLv2+. На изoляции испoльзуются традиционные для Linux технологии контейнерной виртуализации, основанные нате использовании cgroups, пространств имён (namespaces), Seccomp и SELinux. Угоду кому) выполнения привилегированных операций по настройке контейнера Bubblewrap запускается с правами root (исполняемый обложка c suid-флагом) с последующим сбросом привилегий за завершения инициализации контейнера. Активация в системе пространств имён идентификаторов пользователя (user namespaces), позволяющих использовать до конца в контейнерах собственный отдельный набор идентификаторов, в целях работы не требуется, так что по умолчанию не работает кайфовый многих дистрибутивах (Bubblewrap позиционируется равно как ограниченная suid-реализация подмножества возможностей user namespaces - ради исключения всех идентификаторов пользователей и процессов с окружения, кроме текущего, используются режимы CLONE_NEWUSER и CLONE_NEWPID). Ради дополнительной защиты исполняемые под управлением Bubblewrap программы запускаются в режиме 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 же объединяет в одном исполняемом файле повально сопутствующие функции, что усложняет его аудирование и поддержание безопасности на должном уровне. С иголки выпуск примечателен реализацией поддержки присоединения существующих пространств имён идентификаторов пользователей (user namespaces) и процессов (pid namespaces). В (видах управления подключением пространств имён добавлены флаги "--userns", "--userns2" и "--pidns". Данная потенциальность не работает в режиме setuid и требует применения отдельного режима, кто может работать без получения прав root, а требует активации user namespaces в системе (по мнению умолчанию отключены в Debian и RHEL/CentOS) и неважный (=маловажный) исключает возможность эксплуатации потенциально остающихся уязвимостей чтобы обода ограничений "user namespaces". Изо новых возможностей Bubblewrap 0.4 опять же отмечается возможность сборки с Си-библиотекой musl за glibc и поддержка сохранения информации о пространствах имён в обложка со статистикой в формате JSON.