Benutzerdefinierte AppArmor-Regeln zum Fang hinzufügen?

7

Ich versuche, eine Anwendung mit snapd zum Laufen zu bringen, und bin auf einige Probleme bezüglich der AppArmor-Berechtigungen gestoßen. Um meine App voll funktionsfähig zu machen, sind anscheinend einige benutzerdefinierte AppArmor-Regeln erforderlich, die von keiner der vorhandenen Schnittstellen bereitgestellt werden.

Ich kann die Dinge zum Laufen bringen, indem ich dem AppArmor-Profil der App nach der Snap-Installation unter / var / lib / snapd / apparmor / profile / manuell zusätzliche Regeln hinzufüge.

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

Gibt es eine Möglichkeit, dass der Snap diese bei der Installation automatisch konfiguriert, oder muss ich benutzerdefinierte Skripts nach der Installation verwalten, um diese Änderungen vorzunehmen?

Am Ende dieser Seite wird die Yaml-Syntax angezeigt, die darauf hindeutet, dass dies möglich ist:

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

Dies bezieht sich jedoch auf Ubuntu 15.10 (ich verwende 16.04) und es scheint eine Syntax zu verwenden (z. B. "Dienste" anstelle von "Apps"), die derzeit nicht von snapd unterstützt wird. Vielen Dank für jede Hilfe, die Sie leisten können.

Rumdrums
quelle

Antworten:

3

In 16.04 erfolgt dies mit einer im Snapd-Code definierten 'Schnittstelle', die von einem benutzerdefinierten Schema in Ihrer Snap-Definition gesteuert wird. Es sind bereits einige definiert, und es sieht so aus, als ob Sie nur Folgendes benötigen:

  • eine Raw-Disk-Schnittstelle (das will auch jemand anderes)
  • eine rohe Ethernet-Schnittstelle

Es ist unwahrscheinlich, dass eine Decke / sys / Geräte / * gelandet wird, aber ich vermute, dass Sie tatsächlich bestimmte Arten des Zugriffs auf bestimmte Arten von Geräten benötigen, und diese können alle entworfen und gelandet werden.

Der beste Ort, um herauszufinden, was Sie brauchen, ist #snappy im Freenode-IRC. Chatten Sie mit zyga, um Hinweise auf Code zu erhalten, der vorhandene Schnittstellen beschreibt. Sollte ein einfacher Patch sein, um zu arbeiten.

Mark Shuttleworth
quelle