容器安全:非根用户容器与准入控制器实践
1. 非根用户容器概述
在容器部署中,一个常见的安全建议是不以根用户(root)运行容器。尽管 Linux 容器采用了沙箱技术(如 Linux cgroups 和命名空间),但如果容器以根用户运行(这是默认设置),它实际上会以根用户身份在节点上运行,只是处于沙箱环境中。一旦存在“容器逃逸”漏洞,以根用户运行的容器可能会获得节点的完全根访问权限,这是非常危险的。
Docker 默认以根用户运行所有进程,虽然“容器逃逸”漏洞相对较少,但为了遵循“纵深防御”原则,建议以非根用户运行容器。这样即使攻击者突破容器并利用 Linux 中的容器逃逸漏洞,也无法获得节点的提升权限,从而增加了系统的安全性。
Docker 默认使用根用户是为了开发者的便利。以根用户身份在容器中操作可以使用特权端口(端口号低于 1024),并且无需处理文件夹权限问题。然而,以非根用户构建和运行容器可能会引入一些需要解决的错误。但如果从一开始就采用这一原则,解决这些问题可能并不困难,并且能为系统增加一层防御。
2. Kubernetes 中防止容器以根用户运行
在 Kubernetes 中,防止容器以根用户运行相对简单。可以通过为 Pod 添加注解来实现这一目标。以下是一个示例部署文件,用于强制容器不以根用户运行:
apiVersion: apps/v1
kind: Deployment
metadata:
name: timeserver
spec:
replicas: 1
selector:
matchLabels:
pod
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



