首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AppArmor:如何阻止带有CAP_SYS_ADMIN/CAP_SYS_CHROOT的pid=host容器读取(某些)主机文件?

AppArmor(Application Armor)是一种Linux内核安全模块,它通过定义安全策略来限制进程对系统资源的访问。对于您提出的问题,即如何阻止带有CAP_SYS_ADMIN/CAP_SYS_CHROOT的pid=host容器读取(某些)主机文件,以下是基础概念、相关优势、类型、应用场景以及解决方案:

基础概念

  • AppArmor:一种强制访问控制(MAC)安全系统,用于限制进程对文件、网络等资源的访问。
  • CAP_SYS_ADMIN:Linux能力之一,允许进程执行一系列系统管理操作。
  • CAP_SYS_CHROOT:允许进程使用chroot()系统调用改变其根目录。

相关优势

  • 细粒度控制:AppArmor允许针对特定应用程序定义安全策略,提供比传统Unix权限更细粒度的控制。
  • 灵活性:可以动态加载和修改安全策略,无需重启系统或应用程序。

类型

  • Profile:定义了应用程序如何与系统资源交互的安全策略文件。
  • Constraints:用于进一步限制profile中定义的行为。

应用场景

  • 容器安全:在容器化环境中,AppArmor可以用来限制容器对主机系统的访问。
  • 应用程序隔离:确保应用程序只能访问其所需的最小资源集。

解决方案

要阻止带有特定能力的容器读取某些主机文件,您需要创建或修改AppArmor profile来限制这些访问。以下是一个示例profile片段,用于阻止容器读取/etc/shadow文件:

代码语言:txt
复制
#include <tunables/global>

profile container-host-access {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  /etc/shadow r,
  /etc/shadow w,
  /etc/shadow mmap,
  /etc/shadow exec,
  /etc/shadow bpf,
  /etc/shadow cgroup,
  /etc/shadow capability,
  /etc/shadow netio_intercept,
  /etc/shadow perf_event_open,
  /etc/shadow ptrace,
  /etc/shadow setdomainname,
  /etc/shadow sethostname,
  /etc/shadow sysctl,
  /etc/shadow umount,
  /etc/shadow unshare,
  /etc/shadow userfaultfd,
  /etc/shadow xattr,
  deny /etc/shadow { read write mmap exec bpf cgroup capability netio_intercept perf_event_open ptrace setdomainname sethostname sysctl umount unshare userfaultfd xattr },
}

在这个示例中,我们明确拒绝了容器对/etc/shadow文件的所有读取和写入操作。您可以根据需要调整这些规则,以阻止对其他主机文件的访问。

如何应用Profile

  1. 创建Profile文件:将上述示例保存为container-host-access_aa_profile
  2. 加载Profile:使用aa-genprof工具或手动将profile加载到系统中。
  3. 关联Profile与容器:确保您的容器运行时(如Docker)配置为使用这个AppArmor profile。

参考链接

  • [AppArmor官方文档](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree Documentation/admin-guide/LSM/apparmor.rst)
  • Docker与AppArmor集成

请注意,AppArmor的具体实现和配置可能因Linux发行版而异。上述示例和步骤可能需要根据您的具体环境进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券