Adiciona regras personalizadas do AppArmor para encaixar?

7

Estou tentando fazer com que um aplicativo funcione com o snapd e encontrei alguns problemas relacionados às permissões do AppArmor. Parece que, para que meu aplicativo seja totalmente funcional, ele precisa de algumas regras personalizadas do AppArmor que não são fornecidas por nenhuma das interfaces existentes.

Consigo fazer com que as coisas funcionem adicionando manualmente regras adicionais ao perfil AppArmor do aplicativo após a instalação instantânea em / var / lib / snapd / apparmor / profiles /, assim:

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

Existe uma maneira de fazer com que o Snap os configure automaticamente quando é instalado, ou eu precisarei manter scripts de pós-instalação personalizados para fazer essas alterações?

A parte inferior da esta página mostra a sintaxe yaml que sugere que é possível:

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

mas isso é em referência ao Ubuntu 15.10 (estou usando 16.04), e parece usar a sintaxe (por exemplo, 'services' em vez de 'apps') não suportada atualmente pelo snapd. Obrigado por qualquer ajuda que você possa fornecer.

    
por rumdrums 10.07.2016 / 00:08

1 resposta

3

No 16.04, a maneira de fazer isso é com uma 'interface' definida no código snapd, que é orientada por um esquema customizado na sua definição de snap. Há um monte já definido, e parece que tudo que você precisa é:

  • uma interface de disco bruto (iirc alguém quer isso também)
  • uma interface Ethernet em estado bruto

É improvável que você adquira um cobertor / sys / devices / *, mas suspeito que você realmente precise de tipos específicos de acesso a tipos específicos de dispositivos, e todos eles podem ser projetados e desembarcados.

O melhor lugar para descobrir o que você precisa é em #snappy no freenode IRC, conversar com zyga em busca de códigos para descrever as interfaces existentes. Deve ser um patch simples para trabalhar.

    
por Mark Shuttleworth 10.07.2016 / 13:51