问题描述
我搜索过 AppArmor's wiki 的 wiki 并尝试在 Internet 上搜索“apparmor mount namespace”(或类似内容)。然而,我总是对 AppArmor 处理它们的方式一无所知,考虑到 OCI 容器在没有挂载命名空间的情况下无法存在,这尤其奇怪。 AppArmor 是否将挂载命名空间纳入任何帐户,还是只是检查传递给某个系统调用的文件名?
如果容器内的进程切换挂载命名空间,AppArmor 是否会注意到它,或者它只是挂载命名空间无关,因为它不在乎?例如,如果容器进程切换到初始挂载命名空间,我是否可以编写 AppArmor MAC 规则来阻止此类进程访问敏感主机文件,而允许访问其自身容器内的相同文件?
解决方法
我可以编写 AppArmor MAC 规则来防止这样的过程吗? 访问敏感主机文件。
不要让容器访问敏感的主机文件系统部分。这意味着不要将它们安装到容器中。如果您这样做,这超出了 AppArmor 的处理范围。
,我想说 AppArmor 是部分 linux 内核挂载命名空间感知的。 我认为 apparmor 中的 attach_disconnected 标志表明 apparmor 知道您是在主操作系统挂载命名空间中还是在单独的挂载命名空间中。
在此链接中简要描述了 attach_disconnected 标志(尽管页面顶部的警告声称是草稿): https://gitlab.com/apparmor/apparmor/-/wikis/AppArmor_Core_Policy_Reference
以下参考来自 ubuntu apparmor 讨论,提供了有用的相关信息,但并未直接回答您的问题。 https://lists.ubuntu.com/archives/apparmor/2018-July/011722.html
以下引用来自 useenix 演示文稿,提供了向 Linux 内核添加安全命名空间以供 apparmor 等框架使用的建议。这并没有直接显示 apparmor 当前如何/是否使用内核挂载命名空间进行决策,但它的相关性足以引起人们的兴趣。 https://www.usenix.org/sites/default/files/conference/protected-files/security18_slides_sun.pdf https://www.usenix.org/conference/usenixsecurity18/presentation/sun
我不知道我在这里的回答是否完整到足以被视为对您问题的完整回答,但是我没有足够的声望点来评论。我还发现,当单独指定“命名空间”这个词时,很难知道 AppArmor 文档的意思是“apparmor 策略命名空间”还是“linux 内核挂载命名空间”。