【问题标题】:How does AppArmor handle Linux-kernel mount namespaces?AppArmor 如何处理 Linux 内核挂载命名空间?
【发布时间】:2021-02-20 19:58:55
【问题描述】:

我搜索了AppArmor's wiki 的 wiki,并尝试在 Internet 上搜索“apparmor mount namespace”(或类似名称)。然而,我总是对 AppArmor 如何处理它们持空白,考虑到 OCI 容器在没有挂载命名空间的情况下无法存在,这尤其奇怪。 AppArmor 是否将挂载命名空间纳入任何帐户,还是只是检查传递给某个系统调用的文件名?

如果容器内的进程切换挂载命名空间,AppArmor 是否会注意到,或者它只是挂载命名空间不可知,因为它不关心?例如,如果一个容器进程切换到初始挂载命名空间,我是否可以编写 AppArmor MAC 规则来防止该进程访问敏感的主机文件,而允许访问自己容器内的相同文件?

【问题讨论】:

  • 那么你的实际问题是什么?
  • 我的问题是了解或知道 AppArmor 架构是否考虑了 Linux 挂载命名空间?

标签: linux linux-namespaces apparmor


【解决方案1】:

我可以编写 AppArmor MAC 规则来阻止这样的进程吗? 访问敏感的主机文件。

只是不要让容器访问敏感的主机文件系统部分。这意味着不要将它们安装到容器中。如果您这样做,这超出了 AppArmor 的范围。

【讨论】:

  • 我的问题的答案是“不,AppArmor 没有考虑挂载命名空间”,对吗?我的问题不是关于将东西挂载到容器中,而是容器进程切换挂载命名空间(当然取决于功能)以及 AppArmor 是否可以处理这种情况,无论出于何种原因,例如攻击。如果我们可以确保任何时候容器都无法访问敏感部分,那我为什么还需要 AppArmor(或其他 MAC)?
【解决方案2】:

我会说 AppArmor 部分支持 linux 内核挂载命名空间。 我认为 apparmor 中的 attach_disconnected 标志表明 apparmor 知道您是在主 OS 挂载命名空间还是单独的挂载命名空间中。

此链接简要描述了 attach_disconnected 标志(尽管页面顶部的警告声称是草稿): https://gitlab.com/apparmor/apparmor/-/wikis/AppArmor_Core_Policy_Reference

以下参考资料来自 ubuntu apparmor 讨论,提供了有用的相关信息,但并未直接回答您的问题。 https://lists.ubuntu.com/archives/apparmor/2018-July/011722.html

以下参考资料来自一个 usenix 演示文稿,提供了将安全命名空间添加到 Linux 内核以供 apparmor 等框架使用的建议。这并没有直接显示 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 内核挂载命名空间”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 2011-09-05
    • 2021-08-02
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2012-10-09
    相关资源
    最近更新 更多