最小权限管理是容器安全的强制要求,必须通过非root用户运行、精准裁剪Capabilities、只读根文件系统、禁用提权及叠加seccomp/AppArmor等机制实现纵深防御。

最小权限管理在容器化环境中不是可选项,而是必须项。它直接决定一个被攻破的容器能造成多大破坏——是仅限于自身进程,还是能横向渗透主机甚至整个集群。
以非root用户运行容器
这是最基础也最关键的一步。默认情况下,Docker 容器以内置 root 用户启动,一旦应用存在漏洞,攻击者即可获得等同于宿主机 root 的控制权。
应在构建镜像时就完成用户切换:
- 使用 RUN adduser -D appuser 创建专用系统用户(避免使用 UID 0)
- 通过 USER appuser 显式声明运行身份
- 确保应用目录、配置文件等归属该用户,避免因权限不足启动失败
在 Kubernetes 中,还需在 Pod 的 securityContext 中设置 runAsNonRoot: true 和 runAsUser: 1001,实现双保险。
精准裁剪 Linux Capabilities
Capabilities 将 root 权限拆解为独立单元,允许“按需授权”。默认容器已丢弃多数能力,但生产中常需补充少数必要项,而非全量开放。
- 推荐策略:drop: ["ALL"] 后再 add: ["NET_BIND_SERVICE"](仅需监听 80/443 端口时)
- 严格禁止 CAP_SYS_ADMIN、CAP_NET_ADMIN、CAP_SYS_MODULE 等高危能力
- Docker 命令中可用 --cap-drop=ALL --cap-add=NET_BIND_SERVICE 快速验证
强化文件系统与运行时隔离
即使用户和能力受限,仍需防止恶意写入或持久化驻留。
- 启用 readOnlyRootFilesystem: true,根文件系统设为只读
- 对必需的临时路径(如 /tmp、/run)使用 tmpfs 挂载,重启即清空
- 挂载宿主机敏感路径(如 /proc、/sys)时强制加 :ro 只读标识
- 设置 allowPrivilegeEscalation: false,彻底关闭提权通道
叠加强制访问控制机制
单靠用户和 capabilities 不足以覆盖全部攻击面,需引入内核级策略工具形成纵深防御。
- Seccomp:过滤系统调用,例如禁止 chmod、mount 等危险操作
- AppArmor:基于路径定义进程可访问的文件、网络端口、信号等资源
- SELinux(若宿主机启用):提供更细粒度的类型强制策略,适合高合规要求场景
这些策略应作为镜像或集群基线统一注入,而非逐个容器手动配置。

















