web-dev-qa-db-ja.com

カスタムAppArmorルールを追加してスナップしますか?

Snapdで動作するアプリケーションを取得しようとしていますが、AppArmorの権限に関する問題に遭遇しました。私のアプリを完全に機能させるには、既存のインターフェースのいずれでも提供されていないカスタムAppArmorルールが必要なようです。

次のように、/ var/lib/snapd/apparmor/profiles /にスナップインストールした後、アプリのAppArmorプロファイルに手動で追加のルールを追加することで、機能するようになります。

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

Snapのインストール時にこれらを自動的に構成する方法はありますか、またはこれらの変更を行うためにカスタムのポストインストールスクリプトを維持する必要がありますか?

このページ の下部には、可能性を示唆するyaml構文が示されています。

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

しかし、これはUbuntu 15.10(私は16.04を使用しています)を参照しており、現在snapdでサポートされていない構文(「apps」ではなく「services」など)を使用しているようです。あなたが提供できる助けをありがとう。

7
rumdrums

16.04では、これを行う方法は、スナップ定義のカスタムスキーマによって駆動されるsnapdコードで定義された「インターフェイス」を使用することです。すでに定義された束があり、必要なものは次のとおりです。

  • rawディスクインターフェイス(iirc他の誰かもそれを望んでいます)
  • 生のイーサネットインターフェース

ブランケット/ sys/devices/*が着陸することはまずありませんが、実際には特定のタイプのデバイスへの特定のタイプのアクセスが必要であり、それらはすべて設計および着陸することができます。

必要なものをハッシュ化する最適な場所は、freenode IRCの#snappyで、zygaとチャットして、既存のインターフェースを記述するコードへのポインターを探すことです。簡単に修正できるパッチにする必要があります。

3