我正在尝试让应用程序与 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 聊天以获取描述现有接口的代码指针。应该是一个易于处理的补丁。