Как подключить интерфейсы моментальных снимков без автоматического подключения при запуске демона (службы)

В настоящее время я прилагаю усилия, чтобы сделать наше приложение доступным для Ubuntu Core 16.04 LTS. В настоящее время я работаю над:

(classic)mike@localhost:~/$ uname -a
Linux localhost.localdomain 4.4.0-1030-raspi2 #37-Ubuntu SMP Thu Oct 20     15:06:25 UTC 2016 armv7l armv7l armv7l GNU/Linux

(classic)mike@localhost:~/$ snap --version
snap    2.28.5
snapd   2.29.3
series  16
kernel  4.4.0-1030-raspi2

Пожалуйста, обратите внимание, что Raspberry Pi не является нашей конечной целевой платформой, но в настоящее время она создает подходящий POC.

Мой вопрос касается подключения интерфейсов моментальных снимков без автоматического подключения, более конкретно, как это сделать из кода (c) или при запуске службы через systemd. Я знаком с тем, как подключать привязки из командной строки:

snap connect [snap_name]:mount-observe :mount-observe

Однако наше приложение работает как служба - командная строка не будет доступна для ручного подключения этого интерфейса и доступа к нему, и другие заглушки, обязательные для нормальной работы нашего приложения. Я очень хочу найти способ подключить эти «неавтоматические» штекеры через какой-то другой механизм.

Я попытался запустить что-то вроде:

sprintf(command, "snap connect %s:mount-observe :mount-observe", SNAP_NAME);
system(command);

Из кода c, и я также попытался запустить:

snap connect [snap_name]:mount-observe :mount-observe

в сценарии через snapcraft.yaml:

app:
  command: bin/my-wrapper-that-will-call-my-app.sh

, но ни один из них не дает желаемого результата. Я увижу исключения из Политики безопасности, такие как:

    Log: apparmor="ALLOWED" operation="exec" profile="snap.snap_name.my-service" name="/usr/bin/snap" pid=24603 comm="sh" requested_mask="x" denied_mask="x" fsuid=0 ouid=0 target="snap.snap_name.my-service-service//null-/usr/bin/snap"
    File: /usr/bin/snap (exec)
    Suggestions:
    * adjust snap to ship 'snap'
    * adjust program to use relative paths if the snap already ships 'snap'

и, хотя я работаю в devmode, я все еще не вижу свои штекеры, подключенные к выходу 'snap interfaces'.

Мне не удалось найти какую-либо ссылку на этот тип использования в документации - что мне не хватает? Мой рабочий процесс невозможен? Как я могу подключить интерфейсы, не требуя взаимодействия с пользователем в командной строке - пожалуйста, учтите, что мое приложение является службой - моя база установки не будет иметь доступа к командной строке.

С наилучшими пожеланиями, Майк Джеймс

1
задан 25 November 2017 в 18:41

1 ответ

Команда безопасности Ubuntu очень вовлечена в разработку интерфейсов. По умолчанию автоматически подключаются только те, которые либо представляют относительно небольшой риск (например, сеть), либо вызывают значительные поломки в типичном приложении (например, x11). Те, которые не подключены автоматически, имеют такую ​​причину: ими можно злоупотреблять и они не требуются для типичного приложения. В результате возможности злоупотребления подключение интерфейсов изнутри мгновенно отменяет всю цель ограничения, что объясняет, почему вы не смогли этого сделать!

Есть два способа получить привилегированные интерфейсы связано. Либо ваш пользователь должен включить его (т. Е. Подключить интерфейс вручную), либо вы можете запросить более тщательную проверку у группы безопасности, создав тему форума в категории форума «store» , задав вопрос для исключения, которое будет сделано для вашей привязки, и эти интерфейсы будут автоматически подключены. Это не резиновый штамп; вам нужно будет предоставить обоснование их использования, но такие исключения не являются чем-то необычным.

1
ответ дан 25 November 2017 в 18:41

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

Похожие вопросы: