AppArmor(Application Armor)是一种Linux内核安全模块,它通过定义安全策略来限制进程对系统资源的访问。对于您提出的问题,即如何阻止带有CAP_SYS_ADMIN/CAP_SYS_CHROOT的pid=host容器读取(某些)主机文件,以下是基础概念、相关优势、类型、应用场景以及解决方案:
要阻止带有特定能力的容器读取某些主机文件,您需要创建或修改AppArmor profile来限制这些访问。以下是一个示例profile片段,用于阻止容器读取/etc/shadow
文件:
#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
文件的所有读取和写入操作。您可以根据需要调整这些规则,以阻止对其他主机文件的访问。
container-host-access_aa_profile
。aa-genprof
工具或手动将profile加载到系统中。请注意,AppArmor的具体实现和配置可能因Linux发行版而异。上述示例和步骤可能需要根据您的具体环境进行调整。
领取专属 10元无门槛券
手把手带您无忧上云