Разрешения песочницы#
Flatpak-приложение работает в изоляции, и любой доступ наружу задаётся явно. Чем
уже разрешения, тем безопаснее приложение, поэтому давать стоит только то, что
действительно нужно. Все разрешения доступны и флагами команды package, и в
секции permissions манифеста (см. Манифест приложения).
Сокеты#
Флаг --socket <сокет> (повторяемо) даёт доступ к системным сокетам.
Допустимые значения: x11, wayland, pulseaudio, cups, pcsc, ssh-auth,
session-bus, system-bus, fallback-x11.
Графической программе обычно нужны x11 или wayland (часто с fallback-x11), звуку - pulseaudio, печати - cups.
Устройства#
Флаг --device <устройство> (повторяемо). Допустимые значения: dri (доступ к
видеоускорению), kvm, shm, all. Значение all открывает все устройства хоста и
сводит изоляцию на нет, поэтому его стоит избегать.
Общий доступ#
Флаг --share <ресурс> (повторяемо). Допустимые значения: network (сеть) и
ipc (разделяемое пространство межпроцессного взаимодействия).
Файловые системы#
Флаг --filesystem <путь> (повторяемо) открывает доступ к каталогам хоста.
Принимаются именованные расположения (например, home, host, xdg-download,
xdg-documents), абсолютный путь и путь от домашнего каталога. Суффикс :ro
делает доступ доступом только на чтение. Значение host открывает всю файловую
систему хоста, поэтому его дают только при крайней необходимости.
Сохраняемые данные#
Флаг --persist <каталог> (повторяемо) делает указанный каталог постоянным
между запусками. Такие данные хранятся в ~/.var/app/<id>/ и не теряются при
сбросе песочницы.
Имена D-Bus#
Приложение может владеть именами на шинах D-Bus и обращаться к чужим. Раздельно настраиваются сессионная и системная шина:
--own-name <имя>- владеть именем на сессионной шине.--talk-name <имя>- обращаться к имени на сессионной шине.--system-own-name <имя>- владеть именем на системной шине.--system-talk-name <имя>- обращаться к имени на системной шине.
Все флаги повторяемы. В манифесте, помимо этого, доступны явные запреты
обращения: no-talk-name для сессионной шины и no-system-talk-name для
системной. Запрет обращения к именам системной шины записывается в политику
системной шины в метаданных приложения.
Дополнительные разрешения#
Поле манифеста allow включает отдельные возможности песочницы, которых нет
среди сокетов и устройств: devel (системные вызовы отладки, нужны отладчикам
и профилировщикам), multiarch (запуск программ чужой архитектуры, например
32-битных под Wine), bluetooth, canbus и per-app-dev-shm
(собственная разделяемая память вместо общей с хостом).
permissions:
allow: [multiarch, devel]
Переменные окружения#
Поле env задаёт переменные окружения приложения, unset-env убирает
лишние. Записи в env имеют вид KEY=VALUE.
Наследование точек расширения#
Поле inherit-extensions перечисляет точки расширения среды выполнения,
которые приложение подключает к себе, не объявляя их заново. Так приложению
достаются, например, языковые пакеты или тулчейны, которые уже объявила среда.
Наследование выполняется по метаданным среды, поэтому среда должна быть
установлена на машине сборки. Если среда не объявляет запрошенную точку, сборка
останавливается и показывает список точек, которые среда объявляет на самом
деле. Собственные точки расширения приложения задаются отдельной секцией
extensions (см. Манифест приложения).
Пример#
Набор для обычной настольной программы с сетью, графикой, звуком и доступом к загрузкам, в виде флагов:
--socket x11 --socket wayland --socket pulseaudio \
--share network --device dri --filesystem xdg-download
и в манифесте:
permissions:
sockets: [x11, wayland, pulseaudio]
devices: [dri]
shares: [network]
filesystems: [xdg-download]
persist: [.myapp]
talk-name: [org.freedesktop.Notifications]