LinuxRuLinux без лишней теории
Песочница Flatpak

Разрешения Flatpak: как настроить приложения безопасно

Редакция LinuxRu6 мин чтенияСоветы

Разрешения Flatpak смотрят командой flatpak info --show-permissions, а меняют через flatpak override или графический Flatseal. Самое полезное: закрыть приложениям доступ ко всему домашнему каталогу, оставить только нужные папки и вернуть исходные права одной командой, если что-то перестало работать.

Разрешения Flatpak: как настроить приложения безопасно
Фото: Gerson Benavides, Apache License 2.0, Wikimedia Commons
Содержание
  1. Как устроена песочница
  2. Просмотр прав
  3. Основные права
  4. flatpak override
  5. Точечный доступ
  6. Где хранится и сброс
  7. Графические утилиты
  8. Поломки после правок
  9. Частые вопросы

Как устроена песочница Flatpak

Каждое приложение Flatpak запускается в отдельном окружении: своя файловая система с библиотеками из runtime, свой домашний каталог в ~/.var/app/ID/, ограниченный доступ к системным шинам и устройствам. Всё, что приложению нужно сверх этого, разработчик перечисляет в манифесте: сеть, доступ к домашней папке, звук, видеокарта, вебкамера.

Проблема в том, что эти списки пишут сами упаковщики, и пишут с запасом. Многие приложения на Flathub получают --filesystem=home или даже --filesystem=host просто потому, что так проще, чем переделывать программу под порталы. Порталы (xdg-desktop-portal) - правильный путь: приложение просит системный диалог выбора файла, и доступ выдаётся только к тому, что выбрал пользователь.

Итог для пользователя: Flatpak даёт рамку, но насколько она плотная, решаете вы. Права можно сузить для одного приложения или для всех сразу, а если что-то сломается, вернуть настройки упаковщика одной командой. Сравнение с другими форматами есть в материале Snap или Flatpak.

Как посмотреть, что разрешено приложению

Сначала узнайте точный идентификатор приложения, затем выведите его разрешения:

flatpak list --app --columns=application,name
flatpak info --show-permissions org.telegram.desktop
# только ваши изменения поверх манифеста
flatpak override --user --show org.telegram.desktop

Вывод --show-permissions похож на ini-файл. В секции [Context] перечислены shared (сеть, ipc), sockets, devices и filesystems, в [Session Bus Policy] - с какими службами D-Bus приложение может общаться.

Есть и точечная проверка: какой доступ у приложения к конкретной папке.

flatpak info --file-access=$HOME/Документы org.telegram.desktop

Ответ будет read-write, read-only или hidden. Удобно, когда не хочется разбирать список целиком.

Какие разрешения встречаются и чем они опасны

РазрешениеЧто даётРиск
--filesystem=hostПочти вся файловая система, кроме системных каталоговВысокий: доступ ко всем вашим файлам и примонтированным дискам
--filesystem=homeВесь домашний каталогВысокий: ключи SSH, конфиги, файлы браузера
--filesystem=xdg-downloadТолько папка "Загрузки"Низкий, разумный компромисс
--share=networkСетьЗависит от приложения, офлайн-редактору не нужна
--socket=x11Доступ к X-серверуСредний: в X11 программа видит ввод и окна других программ
--socket=waylandДоступ к композитору WaylandНизкий, изоляция окон сохраняется
--device=allВсе устройства, включая вебкамеру и USBСредний
--socket=session-busВся сессионная шина D-BusВысокий: можно управлять другими программами
--talk-name=org.freedesktop.FlatpakЗапуск команд вне песочницыКритический: фактически выход из песочницы

К значениям --filesystem можно добавлять суффиксы: :ro даёт доступ только на чтение, :create создаёт папку, если её нет. Пути задаются абсолютно, относительно домашнего каталога (~/Музыка) или относительно XDG-каталога (xdg-download/Telegram). Полный список значений приведён в документации Flatpak.

Сужаем права командой flatpak override

Команда flatpak override записывает ваши правила поверх манифеста. Ключ --user меняет настройки только для вашей учётной записи и не требует sudo. Без ID приложения правило применяется ко всем приложениям сразу.

Telegram: только папка загрузок

flatpak override --user --nofilesystem=home --nofilesystem=host org.telegram.desktop
flatpak override --user --filesystem=xdg-download/Telegram:create org.telegram.desktop

Отправлять файлы при этом можно: Telegram откроет системный диалог выбора файла через портал. Подробнее о самом клиенте в статье о Telegram в Linux.

Офлайн-программа без сети

flatpak override --user --unshare=network org.example.Editor

Глобальное правило для всех приложений

# никто не получает весь диск и весь домашний каталог
flatpak override --user --nofilesystem=host --nofilesystem=home
# а конкретному приложению можно вернуть доступ обратно
flatpak override --user --filesystem=home org.gimp.GIMP

Правило конкретного приложения сильнее глобального, поэтому такая схема "запретить всем, разрешить избранным" работает. Изменения вступают в силу при следующем запуске программы, так что закройте её полностью, включая значок в трее.

Не включайте глобальный запрет на всё подряд в один вечер. Ужесточайте права по одному приложению и сразу проверяйте его в работе: открыть файл, сохранить, отправить, позвонить. Так вы будете точно знать, какое правило сломало функцию, и не будете гадать по списку из десяти переопределений.

Даём доступ к флешке, второму диску или сокету

Обратная задача тоже частая: видеоредактор не видит второй диск, а плеер не находит музыку на флешке. Не открывайте ради этого host, дайте ровно нужный путь:

# внешние диски, примонтированные через файловый менеджер
flatpak override --user --filesystem=/run/media/$USER org.kde.kdenlive
# в Debian и Ubuntu съёмные носители часто монтируются в /media
flatpak override --user --filesystem=/media/$USER:ro org.videolan.VLC
# каталог с проектами на втором диске
flatpak override --user --filesystem=/mnt/data/projects org.kde.kdenlive

Переменные окружения задаются так же: flatpak override --user --env=QT_SCALE_FACTOR=1.25 ID. Чтобы проверить разрешение один раз, не сохраняя его, передайте тот же ключ прямо в flatpak run:

flatpak run --filesystem=/mnt/data org.kde.kdenlive

Где лежат переопределения и как всё вернуть

Пользовательские правила хранятся в ~/.local/share/flatpak/overrides/, системные (сделанные с sudo без --user) в /var/lib/flatpak/overrides/. Это обычные текстовые файлы с именем ID приложения, а глобальное правило лежит в файле global. Их можно читать, копировать на другой компьютер и хранить в своих dotfiles.

ls ~/.local/share/flatpak/overrides/
cat ~/.local/share/flatpak/overrides/org.telegram.desktop
# сброс правил одного приложения
flatpak override --user --reset org.telegram.desktop
# сброс глобального правила
flatpak override --user --reset

Есть второй слой: динамические разрешения порталов. Когда приложение просит доступ к камере, геолокации или фоновой работе и вы нажимаете "Разрешить", ответ сохраняется в отдельной базе. Посмотреть и сбросить его можно так:

flatpak permission-show org.telegram.desktop
flatpak permission-reset org.telegram.desktop
# вся база по таблицам
flatpak permissions

Flatseal и настройки KDE и GNOME

Если терминал не по душе, права удобно править мышью.

  • Flatseal (com.github.tchx84.Flatseal на Flathub) показывает для каждого приложения все переключатели: файловая система, сокеты, устройства, D-Bus. Изменения он пишет в те же файлы overrides, так что команды из этой статьи и Flatseal не конфликтуют.
  • KDE Plasma имеет модуль прав Flatpak в "Параметрах системы", в разделе "Приложения". Основные переключатели там есть, тонкие правила D-Bus удобнее делать во Flatseal.
  • GNOME показывает часть разрешений в "Настройках", раздел "Приложения": доступ к файлам, уведомления, фоновую работу.
flatpak install flathub com.github.tchx84.Flatseal

На неизменяемых системах вроде Fedora Silverblue и Kinoite Flatpak - основной способ ставить программы, и Flatseal там стоит поставить сразу. Об этих системах рассказывает статья об Atomic Linux.

Приложение перестало работать после ограничений

Типичные симптомы и что проверить:

  • Не открывается или не сохраняется файл. Приложение не умеет порталы и ждёт прямого доступа. Дайте конкретную папку, а не весь home.
  • Пропал звук. Вы убрали --socket=pulseaudio. Через этот сокет приложения Flatpak работают и с PipeWire.
  • Чёрное окно или программная отрисовка. Нет --device=dri, видеокарта недоступна.
  • Не запускается в Wayland после --nosocket=x11. Программа не поддерживает Wayland, верните --socket=x11 или используйте fallback-x11.

Ничего не помогает? Сбросьте переопределения flatpak override --user --reset ID и начните заново. Если программа вообще не нужна, удалите её вместе с данными: flatpak uninstall --delete-data ID, а потом flatpak uninstall --unused уберёт осиротевшие runtime. Как ещё освободить место после Flatpak, написано в статье об очистке диска, а общие способы установки программ собраны в материале о том, как установить программу в Linux.

Частые вопросы

Безопасен ли Flatpak по умолчанию?

Частично. Песочница есть всегда, но многие приложения получают от упаковщика широкий доступ, например ко всему домашнему каталогу. Проверьте права и сузьте их.

Чем --user отличается от системного override?

С --user правило действует только для вас и хранится в ~/.local/share/flatpak/overrides. Без --user и с sudo оно применяется для всех пользователей компьютера.

Как вернуть права по умолчанию?

Выполните flatpak override --user --reset с ID приложения. Для глобального правила то же самое без ID.

Почему приложение не видит флешку?

Съёмные диски монтируются в /run/media/имя или /media/имя. Дайте доступ к этому каталогу через --filesystem, при необходимости только на чтение с суффиксом :ro.

Flatseal и flatpak override конфликтуют?

Нет, оба пишут в одни и те же файлы переопределений, изменения из одного инструмента видны в другом.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.