web-dev-qa-db-fra.com

Ajouter des règles AppArmor personnalisées à la capture?

J'essaie de faire fonctionner une application avec snapd et j'ai rencontré quelques problèmes concernant les autorisations d'AppArmor. Il semble que pour que mon application soit pleinement fonctionnelle, elle a besoin de règles AppArmor personnalisées qui ne sont fournies par aucune des interfaces existantes.

Je peux faire fonctionner les choses en ajoutant manuellement des règles supplémentaires au profil AppArmor de l'application après l'installation instantanée sous/var/lib/snapd/apparmor/profiles /, comme ceci:

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

Existe-t-il un moyen de faire en sorte que le composant logiciel enfichable les configure automatiquement lors de son installation ou dois-je conserver des scripts de post-installation personnalisés pour pouvoir apporter ces modifications?

Le bas de cette page montre la syntaxe de yaml suggérant que cela est possible:

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

mais cela fait référence à Ubuntu 15.10 (j'utilise 16.04) et il semble utiliser une syntaxe (par exemple, "services" au lieu de "applications") qui n'est actuellement pas prise en charge par snapd. Merci pour toute l'aide que vous pouvez apporter.

7
rumdrums

Pour cela, en 16.04, utilisez une "interface" définie dans le code de composant logiciel enfichable, pilotée par un schéma personnalisé dans votre définition de composant logiciel enfichable. Il y a un groupe déjà défini, et il semble que tout ce dont vous avez besoin est:

  • une interface de disque brute (quelqu'un d'autre le souhaite aussi)
  • une interface ethernet brute

Il est peu probable que vous obteniez une couverture/un système/des périphériques/*, mais je suppose que vous avez en fait besoin de types d'accès spécifiques à des types spécifiques de périphériques, et ceux-ci peuvent tous être conçus et débarqués.

Le meilleur endroit pour trouver ce dont vous avez besoin est dans #snappy sur freenode IRC, discutez avec zyga pour des pointeurs de code décrivant les interfaces existantes. Devrait être un simple patch pour travailler.

3
Mark Shuttleworth