15 K8S 之容器安全上下文
Kubernetes 为安全运行 Pod 及容器运行设计了安全上下文机制,该机制允许用户和管理员定义 Pod 或容器的特权与访问控制,以配置容器与主机以及主机之上的其他容器间的隔离级别。安全上下文就是一组用来决定容器是如何创建和运行的约束条件,这些条件代表创建和运行容器时使用的运行时参数。需要提升容器权限时,用户通常只应授予容器执行其工作所需的访问权限,以“最小权限法则”来抑制容器对基础架构及其他容器产生的负面影响。
自主访问控制(DAC):传统 UNIX 的访问控制机制,它允许对象(OS 级别,例如文件等)的所有者基于 UID 和 GID 设定对象的访问权限。
Linux 功能:Linux 为突破系统上传统的两级用户(root 和普通用户)授权模型,而将内核管理权限打散成多个不同维度或级别的权限子集,每个子集称为一种“功能”或“能力”,例如 CAP_NET_ADMIN、CAP_SYS_TIME、CAP_SYS_PTRACE 和 CAP_SYS_ADMIN 等,从而允许进程仅具有一部分内核管理功能就能完成必要的管理任务。
seccomp:全称为 secure computing mode,是 Linux 内核的安全模型,用于为默认可发起的任何系统调用进程施加控制机制,人为地禁止它能够发起的系统调用,有效降低了程序被劫持时的危害级别。
AppArmor:全称为 Application Armor,意为“应用盔甲”,是 Linux 内核的一个安全模块,通过加载到内核的配置文件来定义对程序的约束与控制。
SELinux:全称为 Security-Enhanced Linux,意为安全加强的 Linux,是 Linux 内核的一个安全模块,提供了包括强制访问控制在内的访问控制安全策略机制。
Privileged 模式:即特权模式容器,该模式下容器中的 root 用户拥有所有的内核功能,即具有真正的管理员权限,它能看到主机上的所有设备,能够挂载文件系统,甚至可以在容器中运行容器;容器默认运行于非特权(unprivileged)模式。
AllowPrivilegeEscalation:控制是否允许特权升级,即进程是否能够获取比父进程更多的特权;运行于特权模式或具有 CAP_SYS_ADMIN 能力的容器默认允许特权升级。
传统 UNIX 仅实现了特权和非特权两类进程,前者是指以 0 号 UID 身份运行的进程,而后者则是从属非 0 号 UID 用户的进程。Linux 内核从 2.2 版开始将附加于超级用户的权限分割为多个独立单元,这些单元是线程级别的,它们可配置在每个线程之上,为其赋予特定的管理能力。
容器中的 root 用户将默认映射为系统上的普通用户,它实际上并不具有管理网络接口、iptables 规则和路由表等相关的权限,但内核功能 NET_ADMIN 可以为其开放此类权限。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/03b3d7144a39c5f902db8dba1】。文章转载请联系作者。
评论