После двух с половиной лет разработки опубликована новая стабильная ветка инструментария Flatpak 1.16, предоставляющего систему для сборки самодостаточных пакетов, не привязанных к конкретным дистрибутивам Linux и выполняемых в специальном контейнере, изолирующем приложение от остальной системы. Поддержка выполнения Flatpak-пакетов обеспечена для Fedora, CentOS, Debian, Arch Linux, Gentoo, Linux Mint, Alt Linux и Ubuntu. Пакеты с Flatpak включены в репозиторий Fedora и поддерживаются в штатных программах управления приложениями GNOME и KDE.
Ключевые новшества в ветке Flatpak 1.16:
- Осуществлён переход на использование системы сборки Meson. Поддержка сборки при помощи инструментария Autotools прекращена. Для сборки Flatpak теперь требуется наличие в системе Python, как минимум версии 3.5.
- Реализован совместный доступ к сокету gssproxy, позволяющему использовать аутентификацию через Kerberos в приложениях, запускаемых в режиме sandbox-изоляции.
- При создании сокета для Wayland задействовано расширение security-context, через которое композитный сервер может идентифицировать и ограничивать приложения, запущенные в режиме sandbox-изоляции. Добавлена опция "--socket=inherit-wayland-socket" для наследования существующего сокета для Wayland.
- После установки или обновления приложений обеспечена автоматическая перезагрузка конфигурации сессионной шины D-Bus для подхвата новых экспортируемых приложениями сервисов D-Bus.
- Дистрибутивам предоставлена возможность определения репозиториев с пакетами Flatpak, используя каталог "/usr/share/flatpak/remotes.d", помимо "/etc/flatpak/remotes.d".
- Проведена работа по разделению крупных файлов с исходным кодом на небольшие модули.
- Добавлена опция "--device=input" для доступа к устройствам ввода через /dev/input.
- Для изоляции приложений задействована новая ветка инструментария bubblewrap 0.11. В дистрибутивах, собирающих Flatpak с использованием системного исполняемого файла bwrap, необходимо наличие как минимум версии bubblewrap 0.11. Усилена защита от создания в sandbox-окружениях вложенных пространств идентификаторов пользователей (user namespace).
- Упрощена настройка дополнительных языков. Обеспечено определение языков на основе информации о пользователях, выдаваемой DBus-сервисом AccountsService.
- Приложениям, использующим вложенную sandbox-изоляцию, например, на основе движка WebKit, разрешено применение протокола AT-SPI для взаимодействия с экранными ридерами. Добавлена опция "flatpak run --a11y-own-name" для выбора шины, через которую осуществляется доступ к средствам для людей с ограниченными возможностями.
- При выполнении команды "flatpak run -vv ‹app_id›", обеспечен показ всех применимых параметров sandbox-изоляции.
- Добавлена опция "--device=usb", а также параметры "--usb" и "--no-usb" для управления доступом приложения к USB-устройствам.
- Добавлена поддержка фреймворка KCompletion, применяемого для автодополнения поисковых ключей в KDE.
- Добавлены переменные окружения "FLATPAK_DATA_DIR" и "FLATPAK_DOWNLOAD_TMPDIR" для переопределения каталогов с данными (/usr/share/flatpak) и загружаемыми временными файлами (/var/tmp).
- Добавлен вывод escape-последовательностей для отображения прогресса выполнения операций в эмуляторах терминала.
Напомним, что Flatpak упрощает распространение программ, не входящих в штатные репозитории дистрибутивов, за счет подготовки одного универсального контейнера, избавляющего разработчиков программ от необходимости формировать отдельные сборки для каждого дистрибутива. Пользователям, заботящимся о безопасности, Flatpak даёт возможность выполнить вызывающее сомнение приложение в контейнере, предоставив выборочный доступ только к необходимым сетевым функциям и файлам пользователя. Пользователям, интересующимся новинками, Flatpak позволяет установить самые свежие тестовые и стабильные выпуски приложений без необходимости внесения изменений в систему. Например, Flatpak-пакеты собираются для LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio и т.д.
Для уменьшения размера в пакет включают лишь специфичные для приложения зависимости. Базовые системные и графические библиотеки (GTK, Qt, библиотеки GNOME и KDE и т.п.) поставляются в виде подключаемых типовых runtime-окружений. Ключевое отличие Flatpak от Snap в том, что Snap использует компоненты окружения основной системы и изоляцию на основе фильтрации системных вызовов, в то время как Flatpak создаёт отдельный от системы контейнер и оперирует крупными runtime-наборами, предоставляя в качестве зависимостей не пакеты, а типовые системные окружения (например, все библиотеки, необходимые для работы программ GNOME или KDE).
Помимо типового системного окружения (runtime), устанавливаемого через специальный репозиторий, поставляются дополнительные зависимости (bundle), требуемые для работы приложения. В сумме "runtime" и "bundle" образуют начинку контейнера, при том, что "runtime" устанавливается отдельно и привязывается сразу к нескольким контейнерам, что позволяет обойтись без дублирования общих для контейнеров системных файлов.
В одной системе может быть установлено несколько разных "runtime" (GNOME, KDE) или несколько версий одного "runtime" (GNOME 46, GNOME 47). Контейнер с приложением в качестве зависимости использует привязку только к определённому "runtime", без учёта отдельных пакетов, формирующих выбранный "runtime". Все недостающие элементы упаковываются непосредственно вместе с приложением. При создании контейнера содержимое "runtime" монтируется как раздел /usr, а "bundle" монтируется в каталог /app.
Начинка "runtime" и контейнеров приложений формируется с использованием технологии OSTree, при которой образ атомарно обновляется из Git-подобного хранилища, позволяющего применять методы версионного контроля к компонентам дистрибутива (например, можно быстро откатить систему к прошлому состоянию). RPM-пакеты транслируются в репозиторий OSTree при помощи прослойки rpm-ostree.
Выборочная установка и обновление пакетов внутри рабочего окружения не поддерживается - система обновляется не на уровне отдельных компонентов, а целиком, атомарно меняя своё состояние. Предоставляются средства для инкрементального применения обновлений, избавляющие от необходимости полной замены образа при каждом обновлении.
Формируемое изолированное окружение полностью независимо от используемого дистрибутива и при надлежащих настройках пакета не имеет доступа к файлам и процессам пользователя или основной системы, а также не может напрямую обращаться к оборудованию, за исключением вывода через DRI. Вывод графики и организация ввода реализованы при помощи протокола Wayland или через проброс сокета X11. Взаимодействие с внешней средой построено через систему обмена сообщениями DBus и специальный API Portals.
Для изоляции используется прослойка Bubblewrap и традиционные для Linux технологии контейнерной виртуализации, основанные на использовании cgroups, пространств имён (namespaces), Seccomp и SELinux. Для вывода звука применяется PulseAudio или PipeWire. При создании пакета изоляция может быть отключена, чем пользуются разработчики многих популярных пакетов для получения полного доступа к ФС и всем устройствам в системе.
Например, с ограниченным режимом изоляции, оставляющим полный доступ к домашнему каталогу, поставляются пакеты GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity и VLC. В случае компрометации пакетов с доступом к домашнему каталогу, несмотря на наличие в описании пакета метки "sandboxed", атакующему для выполнения своего кода достаточно изменить файл ~/.bashrc. Отдельным вопросом является контроль над внесением изменений в пакеты и доверие к сборщикам пакетов, которые часто не связаны с основным проектом или дистрибутивами.
Источник: https://www.opennet.ru/opennews/art.shtml?num=62537