添加自定义 AppArmor 规则来捕捉?

rum*_*ums 7 apparmor ubuntu-core 16.04 snap

我正在尝试让应用程序使用 snapd,但遇到了一些有关 AppArmor 权限的问题。似乎为了让我的应用程序功能齐全,它需要一些现有接口未提供的自定义 AppArmor 规则。

在 /var/lib/snapd/apparmor/profiles/ 下进行 snap 安装后,我可以通过手动向应用程序的 AppArmor 配置文件添加其他规则来使事情正常进行,如下所示:

/sys/devices/** r,
/sys/class/net/eth0/address r,
/dev/sda1 r,
capability sys_rawio,
Run Code Online (Sandbox Code Playgroud)

有没有办法让 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
Run Code Online (Sandbox Code Playgroud)

但这是参考 Ubuntu 15.10(我使用的是 16.04),它似乎使用了 snapd 当前不支持的语法(例如,“服务”而不是“应用程序”)。感谢您的任何帮助,您可以提供。

Mar*_*rth 4

在 16.04 中,执行此操作的方法是使用 snapd 代码中定义的“接口”,该接口由 snap 定义中的自定义架构驱动。已经定义了一堆,看起来你需要的只是:

  • 原始磁盘接口(iirc 其他人也想要)
  • 原始以太网接口

您不太可能获得一揽子 /sys/devices/* 着陆,但我怀疑您实际上需要对特定类型的设备进行特定类型的访问,而这些都可以设计和着陆。

讨论您需要的内容的最佳位置是在 freenode IRC 上的 #snappy 中,与 zyga 聊天以获取描述现有接口的代码指针。应该是一个简单的补丁即可工作。