Linux容器安全加固需贯穿全生命周期:精简镜像(优选distroless)、非root运行、启用命名空间/cgroups隔离、禁用高危cap、限制资源、签名验证与漏洞扫描。

Linux容器安全加固的核心在于从镜像源头控制风险、运行时限制权限、隔离资源并持续监控。Docker本身不是“沙箱”,默认配置存在明显攻击面,必须主动收紧。
精简基础镜像,杜绝冗余组件
官方镜像常含调试工具(如curl、vim、bash)和非必要服务,会扩大攻击面。优先选用alpine或distroless镜像,例如用gcr.io/distroless/static:nonroot替代ubuntu:22.04。
- 构建时禁用包管理器缓存:
RUN apt-get update && apt-get install -y xxx && rm -rf /var/lib/apt/lists/* - 删除临时文件、文档、手册页:
RUN rm -rf /usr/share/doc /usr/share/man /tmp/* - 避免使用
FROM scratch直接打包二进制——它不支持动态链接,调试困难;distroless是更稳妥的替代方案
以非root用户运行容器进程
Docker默认以root身份启动容器内主进程,一旦被突破即可获得宿主机root权限。必须显式指定低权限用户。
- 在Dockerfile中添加:
RUN addgroup -g 1001 -f appgroup && adduser -S appuser -u 1001,再用USER appuser - 运行时强制覆盖:
docker run --user 1001:1001,配合--read-only和--tmpfs /tmp:rw,size=10m进一步限制写入 - 检查镜像是否含敏感文件权限:运行
docker run --rm IMAGE ls -l /etc/shadow,若可读则说明镜像未清理系统凭证
启用命名空间与cgroups硬隔离
Linux内核机制是容器隔离的基础,但Docker默认未全部启用。需通过运行时参数关闭危险能力、限制资源。
- 禁用高危cap:
--cap-drop=ALL --cap-add=NET_BIND_SERVICE(仅开放端口绑定所需能力) - 关闭特权模式:永远不要用
--privileged,改用--device按需挂载硬件设备 - 限制内存/CPU:
--memory=512m --memory-swap=512m --cpus=1.0,防止容器耗尽宿主机资源 - 挂载
/proc为只读:--read-only --tmpfs /run --tmpfs /tmp,阻断/proc/self/exe等提权路径
镜像签名与可信仓库管控
未经验证的镜像可能被中间人篡改或包含后门。必须建立镜像准入流程,而非依赖“看起来像官方镜像”。
- 启用Docker Content Trust(DCT):
export DOCKER_CONTENT_TRUST=1,拉取前自动校验签名 - 私有仓库集成Notary或Cosign:对CI构建的镜像打签,Kubernetes中通过
imagePolicyWebhook拦截未签名镜像 - 扫描镜像漏洞:
trivy image --severity HIGH,CRITICAL IMAGE_NAME,将扫描结果作为CI流水线门禁 - 禁止使用
latest标签:明确指定SHA256摘要(如nginx@sha256:abc123...),确保可复现、不可篡改
容器安全不是加一层防火墙就万事大吉,而是贯穿镜像构建、分发、部署、运行全生命周期的持续实践。每个环节松动一点,整体防线就可能崩塌。










