向 snap 中添加自定义 AppArmor 规则?

向 snap 中添加自定义 AppArmor 规则?

我正在尝试让应用程序与 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,

有没有办法让 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 目前不支持的语法(例如,使用“services”而不是“apps”)。感谢您提供的任何帮助。

答案1

在 16.04 中,实现此目的的方法是使用 snapd 代码中定义的“接口”,该接口由 snap 定义中的自定义架构驱动。已经定义了很多,看起来您所需要的只是:

  • 原始磁盘接口(我记得其他人也想要这个)
  • 原始以太网接口

您不太可能获得全面的 /sys/devices/*,但我怀疑您实际上需要对特定类型的设备进行特定类型的访问,并且所有这些都可以设计和登陆。

解决您所需问题的最佳地点是 freenode IRC 上的 #snappy,与 zyga 聊天以获取描述现有接口的代码指针。应该是一个易于处理的补丁。

相关内容