Como conectar interfaces snap não auto-conectáveis no início do daemon (serviço)

1

Atualmente, estou liderando um esforço para disponibilizar nosso aplicativo em um instante para o Ubuntu Core 16.04 LTS. Atualmente estou desenvolvendo em:

(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

Por favor, note que o raspberry pi não é a nossa plataforma alvo final, mas faz um POC adequado por enquanto.

A minha pergunta é sobre a conexão de interfaces de snap não auto-conectadas, mais especificamente, como fazê-lo a partir do código (c) ou no início do serviço via systemd. Estou familiarizado com como conectar snaps na linha de comando:

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

No entanto, nosso aplicativo é executado como um serviço - a linha de comando não estará disponível para conectar manualmente essa interface, e o acesso a esse e outros plugues é obrigatório para a função normal de nosso aplicativo. Estou muito ansioso para encontrar uma maneira de conectar esses plugues 'não auto' através de algum outro mecanismo.

Eu tentei executar algo como:

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

Do código c e também tentei executar:

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

em um script via snapcraft.yaml:

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

mas nenhum parece fornecer o resultado desejado. Veremos exceções da Política de segurança como:

    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'

e, embora eu esteja rodando no devmode, ainda não vejo meus plugs conectados pela saída 'snap interfaces'.

Não consegui encontrar nenhuma referência a esse tipo de uso na documentação. O que estou perdendo? Meu fluxo de trabalho não é possível? Como posso conectar interfaces sem exigir interação do usuário na linha de comando - considere que meu aplicativo é um serviço - minha base de instalação não terá acesso à linha de comando.

Atenciosamente,   Mike James

    
por Mike James 25.11.2017 / 16:41

1 resposta

1

A equipe de segurança do Ubuntu está muito envolvida com o desenvolvimento de interfaces. Os únicos que são automaticamente conectados por padrão são aqueles que representam um risco relativamente pequeno (por exemplo, rede) ou causam uma quebra significativa na aplicação típica (por exemplo, x11). Aqueles que não são automaticamente conectados são assim por um motivo: eles podem ser abusados e não são necessários para o aplicativo típico. Como resultado da possibilidade de abuso, as interfaces de conexão de dentro do tipo de estalo anulam todo o propósito do confinamento, o que explica por que você não conseguiu fazê-lo!

Existem duas maneiras de obter interfaces privilegiadas conectadas. Ou o seu usuário precisa optar por ele (ou seja, conectar a interface manualmente), ou você pode solicitar uma verificação mais aprofundada da equipe de segurança, criando um tópico no fórum no " store "categoria do fórum , pedindo que uma exceção seja feita para o snap, e tenha essas interfaces conectadas automaticamente. Não é um carimbo de borracha; você precisará fornecer justificativa para usá-los, mas essas exceções não são incomuns.

    
por Kyle 25.11.2017 / 21:33