Добавить пользовательские правила AppArmor для привязки?

Я пытаюсь заставить приложение работать со snapd и столкнуться с некоторыми проблемами, связанными с разрешениями AppArmor. Кажется, что для того, чтобы мое приложение было полностью функциональным, ему нужны некоторые пользовательские правила AppArmor, которые не предоставляются ни одним из существующих интерфейсов.

Я могу заставить все работать, вручную добавляя дополнительные правила в профиль AppArmor приложения после установки оснастки в /var/lib/snapd/apparmor/profile /, например так:

/sys/devices/** r,
/sys/class/net/eth0/address r,
/dev/sda1 r,
capability sys_rawio,

Есть ли способ, чтобы Snap автоматически настраивал их при установке, или мне нужно будет поддерживать пользовательские сценарии после установки для внесения этих изменений?

Внизу этой страницы показан синтаксис yaml, который предполагает, что это возможно:

services:
  - name: bar                       # uses 'default' template with     'network-client' cap
  - name: baz                       # uses 'default' template with     specified caps
    caps:
      - network-client
      - norf-framework_client
  - name: qux                       # uses 'nondefault' template with     no caps
    security-template: nondefault
  - name: quux
    security-policy:                # uses custom security policy as     defined by relative paths
      apparmor: meta/quux.aa
      seccomp: meta/quux.sc

но это относится к Ubuntu 15.10 (я использую 16.04), и он, кажется, использует синтаксис (например, "сервисы" вместо "приложений"), в настоящее время не поддерживаемый snapd. Спасибо за любую помощь, которую вы можете предоставить.

1 ответ

Решение

В 16.04 способ сделать это с помощью "интерфейса", определенного в коде оснастки, который управляется пользовательской схемой в определении привязки. Уже определена группа, и, похоже, все, что вам нужно:

  • сырой интерфейс диска (кто-то другой тоже хочет этого)
  • сырой интерфейс Ethernet

Вам вряд ли удастся получить приземленный файл /sys/devices/*, но я подозреваю, что вам действительно нужны определенные типы доступа к определенным типам устройств, и все они могут быть спроектированы и загружены.

Лучшее место для выяснения того, что вам нужно, это #snappy на freenode IRC, пообщаться с zyga для указателей на код, описывающий существующие интерфейсы. Должен быть простой патч для работы.

Другие вопросы по тегам