最有效起点是--cap-drop=ALL清空所有默认能力再按需加白,因其强制归零、规避默认冗余授权,并需协同--user、--read-only、no-new-privileges等实现纵深防御。
直接用 --cap-drop=all 清空所有默认能力,再按需加回真正需要的几个,是打造高安全等级容器最有效的起点。这不是“删掉多余项”,而是从零开始构建权限边界——避免因 docker 默认能力变更、镜像升级或隐式继承带来的意外风险。
Docker 默认保留约 14 个 capability(如 CAP_CHOWN、CAP_NET_BIND_SERVICE),看似克制,但对多数应用仍是过度授权。--cap-drop=ALL 强制归零,让容器进程在启动时几乎无法执行任何特权操作,连 chown、ping、修改时间都会失败——这正是你想要的“默认拒绝”状态。
加白不是凭经验猜,而是依据应用行为精准补充。常见组合示例:
不推荐 --cap-add=ALL;也不建议保留默认能力再逐个 --cap-drop,容易遗漏。
容器启动后,进容器执行:
capsh --print
查看 CapEff 行(有效能力列表),确认只有你显式添加的那几项。也可查:
cat /proc/1/status | grep CapEff
输出是十六进制,可用 capsh 解码比对。若看到 CAP_SYS_ADMIN、CAP_DAC_OVERRIDE、CAP_SETUIDS 等未声明的能力,说明配置没生效或被其他机制绕过。
Capability 控制的是内核调用权限,单靠它不够。必须叠加:
这些参数共同作用,才能让容器即使被攻破,也难以逃逸或横向移动。