Snap это система управления пакетами приложений Linux (application package management system), которая упрощает разработчикам публикацию программных пакетов (self contained software packages, snaps), которые будут работать на многих дистрибутивах и версиях Linux. Snaps содержат встроенную поддержку безопасности, и разработаны так, чтобы гарантировать все приложениям поддержку принципа наименьших привилегий / полномочий. Таким образом, каждый пакет имеет доступ только к общим группам ресурсов, которые ему требуются для выполнения своей предполагаемой функции.
Для такой поддержки функций безопасности каждый пакет помещается в "песочницу", где он работает в ограниченном в правах окружении, изолированном от остальной части системы. Это достигается через комбинацию AppArmor, seccomp, mount namespaces, cgroups и традиционную систему разрешений UNIX. Чтобы затем разрешить пакету доступ к общим ресурсам, система snap предоставляет "интерфейсы" к которым пакетам может быть предоставлен доступ, как это затребовал или определил пользователь. Сюда входят такие вещи, как файлы в домашней директории пользователя (home), или файлы на извлекаемых носителях (флешках), а также аппаратные устройства, такие как веб-камеры или аудиоустройства (полный список интерфейсов можно посмотреть в документации snap [2]). Также могут быть предоставлены интерфейсы от одного snap к другому, например чтобы один snap предоставил сервисы через DBus для другого snap-приложения, или для предоставления общего содержимого (shared content) от одного snap к другому.
Доступ к определенному интерфейсу соответствует определенному разрешению для пакета snap.
[Соединения интерфейса]
Интерфейс snap предоставляется через слот (slot), декларируемый определенным пакетом snap (само ядро snap предоставляет множество слотов), в то время как другие snap потребляют данных интерфейс, объявляя себя коннектором (plug) для этого интерфейса. Каждый snap декларирует необходимые интерфейсы (например перечисляя их как коннекторы plug), а затем подключаются к соответствующему слоту с помощью демона snapd либо автоматически, либо вручную, в зависимости от интерфейса. Некоторые интерфейсы подключаются автоматически ко всем snap-ам, которые декларируют к ним коннектор (plug), поскольку они представляют небольшой риск, или интерфейс обычно полезен для большинства snap-ов (таких как desktop и сетевые интерфейсы). Другие интерфейсы, такие как извлекаемые устройства removable-media или cups-control интерфейсы, должны либо подключаться пользователем вручную, либо подключаться автоматически через специально предоставленное исключение из Snap Store, или подключаться автоматически через пользовательский специфичный для устройства gadget snap. Рецензенты Snap Store обычно только предоставляют исключения, если считается, что полезность приложения значительно снижается, если запрашиваемые интерфейсы не подключаются автоматически.
Интерфейсы, используемые snap, можно просмотреть двумя способами - либо в GUI через приложение "Software" (gnome-software, или Центр приложений), либо через командную строку. Для каждого установленного snap кнопка Permissions в программе Software покажет интерфейсы, для которых snap объявляет plug-и, и позволяя пользователю вручную подключать или отключать каждый интерфейс.
То же самое можно посмотреть через командную строку используя команду snap interfaces (или более новый вариант snap connections):
$ snap interfaces notepad3
Slot Plug
gnome-3-28-1804:gnome-3-28-1804 notepad3
gtk-common-themes:gtk-3-themes notepad3
gtk-common-themes:icon-themes notepad3
gtk-common-themes:sound-themes notepad3
:desktop notepad3
:desktop-legacy notepad3
:gsettings notepad3
:home notepad3
:network notepad3
:opengl notepad3
:wayland notepad3
:x11 notepad3
wine-platform-6-stable:wine-6-stable notepad3
wine-platform-runtime:wine-runtime notepad3
- notepad3:cups-control
- notepad3:hardware-observe
- notepad3:process-control
- notepad3:removable-media
'snap interfaces' is deprecated; use 'snap connections'.
$ snap connections notepad3
Interface Plug Slot Notes
content[gnome-3-28-1804] notepad3:gnome-3-28-1804 gnome-3-28-1804:gnome-3-28-1804 -
content[gtk-3-themes] notepad3:gtk-3-themes gtk-common-themes:gtk-3-themes -
content[icon-themes] notepad3:icon-themes gtk-common-themes:icon-themes -
content[sound-themes] notepad3:sound-themes gtk-common-themes:sound-themes -
content[wine-6-stable] notepad3:wine-6-stable wine-platform-6-stable:wine-6-stable -
content[wine-runtime] notepad3:wine-runtime wine-platform-runtime:wine-runtime -
cups-control notepad3:cups-control - -
desktop notepad3:desktop :desktop -
desktop-legacy notepad3:desktop-legacy :desktop-legacy -
gsettings notepad3:gsettings :gsettings -
hardware-observe notepad3:hardware-observe - -
home notepad3:home :home -
network notepad3:network :network -
opengl notepad3:opengl :opengl -
process-control notepad3:process-control - -
removable-media notepad3:removable-media - -
wayland notepad3:wayland :wayland -
x11 notepad3:x11 :x11 -
В показанном выше листинге видно, что интерфейсы cups-control, hardware-observe, process-control и removable-media не подключены к соответствующим коннекторам notepad3, и для них не перечислены слоты.
Пользователь может вручную подключать или отключать каждый из желаемых интерфейсов приложения. При подключении интерфейса пользователю выдается приглашение аутентификации как администратора. Пользователи без прав sudo не могут управлять разрешениями для каждого snap-приложения.
[Ссылки]
1. guide to snap permissions and interfaces site:ubuntu.com. 2. snap supported interfaces site:snapcraft.io. 3. The app store for Linux site:snapcraft.io. |