Linux容器安全加固教程_Docker加固与镜像管理实战

13次阅读

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

Linux容器安全加固教程_Docker加固与镜像管理实战

Linux容器安全加固的核心在于从镜像源头控制风险、运行时限制权限、隔离资源并持续监控。docker本身不是“沙箱”,默认配置存在明显攻击面,必须主动收紧。

精简基础镜像,杜绝冗余组件

官方镜像常含调试工具(如curlvimbash)和非必要服务,会扩大攻击面。优先选用alpinedistroless镜像,例如用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...),确保可复现、不可篡改

容器安全不是加一层防火墙就万事大吉,而是贯穿镜像构建、分发、部署、运行全生命周期的持续实践。每个环节松动一点,整体防线就可能崩塌。

text=ZqhQzanResources