Для Flatpak подготовлена технология управляемого доступа к ресурсам вне контейнера

2016-07-08

Маттиас Класен (Matthias Clasen), лидер Fedora Desktop Team и участник GNOME Release Team, объявил о первом выпуске системы контролируемого обращения к внешним ресурсам для самодостаточных контейнеров приложений Flatpak. Для решения задач обращения к внешним ресурсам из контейнера, таким как файлы хост-системы, во flatpak изначально применялось монтирование внешних директорий в режиме bind (в snap доступ регулируется через AppArmor), что требует точной информации к каким ресурсам требуется доступ.

Для упрощения работы с внешними ресурсами для Flatpak предложена концепция порталов, реализованная через высокоуровневый API, позволяющий приложению запросить доступ к таким операциям, как открытие внешнего файла, открытие URL, вывод на печать, создание скриншота, вывод уведомления, блокировка вызова хранителя экрана, получения данных о состояния сети и информации о прокси. Указанный API удалось интегрировать с библиотекой GTK+, что позволяет обойтись без модификации приложений. Например, обработчик Portals API вызывается при обращении приложения к штатным функциям GTK, например, когда программа пытается выбрать файл через GtkFileChooserNative или вывести информацию на печать через GtkPrintOperation. Взаимодействие с фронтэндом из изолированного окружения осуществляется через DBus.

Особенностью системы порталов является то, что решение о предоставлении доступа принимается пользователем, а не изначально предопределяется составителем пакета, который не может предугадать какой файл захочет обработать в изолированном приложении пользователь, поэтому обычно доступ открывается ко всей домашней директории. При обращении к обрабатываемым через Portals API функциям вызывается специальный обработчик, который показывает пользователю диалог подтверждения операции, по аналогии с динамическими межсетевыми экранами. В случае, если пользователь подтвердит операцию, предоставляется доступ к ресурсу.

В настоящее время доступен первый выпуск модуля xdg-desktop-portal-gtk для интеграции с GTK+, а также предложен набор исправлений к GTK+, обеспечивающий прозрачную для приложений интеграцию с системой порталов. Данные изменения уже приняты в основную ветку GTK+ и будут включены в состав выпуска 3.22. При этом технология позиционируется как независящая от конкретных рабочих столов и в разработке находится аналогичный модуль для Qt.