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

8次阅读

Docker 容器安全需从镜像构建、运行时配置和宿主机协同三层面加固:构建时用 distroless 或精简 Alpine 镜像、固定摘要、多阶段构建、删临时文件与工具、CVE 扫描;运行时设非 root 用户、只读根文件系统、精确 capability 授权;生命周期需语义化版本、cosign 签名验证、定期清理;宿主机启用 SELinux/GRSEC、资源限制、自定义网络与防火墙协同防护。

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

Docker 容器本身不自带 安全防护 能力,安全必须从镜像构建、运行时配置和宿主机协同三个层面主动加固。

构建可信基础镜像

默认的 alpinedebian:slim虽小,但未经安全审计。应优先选用官方 distroless 镜像(如 gcr.io/distroless/static),或基于Alpine Linux 并启用 apk –no-cache 安装软件。禁止使用 :latest 标签,固定镜像摘要(@sha256:…)防止依赖漂移。

  • Dockerfile 多阶段构建,编译环境与运行环境分离,最终镜像只含二进制和必要配置
  • 删除 /tmp/var/cache 等临时文件,移除 curlbash 等非必需 工具,降低攻击面
  • 使用 trivygrype对镜像做 CVE 扫描,CI 中设阈值阻断高危漏洞镜像推送

运行时最小权限控制

容器默认以 root 用户运行,一旦逃逸即获得宿主机 root 权限。必须显式指定非特权用户,并禁用危险能力。

  • Dockerfile 中添加USER 1001:1001,配合RUN addgroup -g 1001 -f appgroup && adduser -S appuser -u 1001
  • 启动容器时加参数:–read-only挂载根文件系统为只读,–tmpfs /tmp:rw,size=10m提供必要可写空间
  • –cap-drop=ALL –cap-add=NET_BIND_SERVICE 精确授权,禁用 SYS_ADMINDAC_OVERRIDE 等高危 capability

镜像生命周期管理

镜像不是一次构建永久可用,需建立版本、签名、清理闭环机制。

  • 按语义化版本(v1.2.3)打标签,避免 :dev:test 等模糊标识
  • cosign 对镜像签名:cosign sign –key cosign.key myreg.example/app:v1.2.3,运行前用 cosign verify 校验
  • 定期清理无标签镜像和悬空层:docker image prune -f;生产环境禁用docker build,统一由 CI 流水线构建并推送到私有仓库

宿主机与网络协同防护

容器安全不能脱离宿主机环境。内核参数、cgroup 限制和网络策略是最后一道防线。

  • 宿主机启用 GRSECSELinux(如 container_t 上下文),限制容器进程访问宿主机资源
  • –memory=512m –cpus=1.0 –pids-limit=100 硬性限制资源,防 DoS 类攻击
  • 禁用 –network=host,用自定义 bridge 网络 +–iptables=false 配合宿主机 firewalld 或 nftables 精细控制进出流量
text=ZqhQzanResources