温馨提示×

Linux Docker容器安全如何保障

小樊
34
2025-11-22 14:22:31
栏目: 智能运维

Linux Docker容器安全保障

一 安全基线与内核隔离

  • 保持运行时与依赖为最新稳定版本,及时修补内核、容器引擎与镜像漏洞(例如历史上 runC 漏洞的修复版本 Docker 18.09.2)。
  • 非 root运行应用:在 Dockerfile 中创建最小权限用户并使用 USER 指令切换。
  • 最小权限的 Linux Capabilities:优先使用 CAP DROP 丢弃不必要能力,必要时仅 CAP ADD 白名单化必需能力,避免授予 CAP_SYS_ADMIN 等高危能力。
  • 启用强制访问控制:为容器配置 AppArmorSELinux 策略,限制对文件、网络、进程等资源的访问。
  • 启用 seccomp 系统调用过滤,默认策略已禁用如 reboot、mount 等危险调用,可按需自定义。
  • 使用 用户命名空间(User Namespaces) 将容器内 root 映射为宿主机非特权用户,显著降低提权风险。
  • 利用 Namespaces(PID、NET、MNT、UTS、IPC、USER)与 Cgroups 提供进程、网络、文件系统和资源隔离与限额。

二 镜像与构建安全

  • 仅使用可信基础镜像与可信仓库,定期扫描镜像漏洞并重建受影响镜像。
  • 采用多阶段构建,只将最终产物复制到生产镜像,减少攻击面与镜像体积。
  • 避免在镜像中硬编码密钥/凭证,使用 Secrets 管理或挂载只读卷注入。
  • 移除镜像中不必要的软件包、工具与服务,降低潜在被利用点。

三 运行时配置与资源隔离

  • 禁止使用 –privileged;避免共享宿主机敏感命名空间(如 –network=host、–pid=host、–ipc=host、–uts=host)。
  • 将容器根文件系统设为只读(–read-only),对确需写入的路径使用临时文件系统(tmpfs)仅写卷
  • 设置资源限额:–memory、–cpu-shares、–cpus、–blkio-weight 等,防止资源耗尽与 DoS。
  • 限制进程数量:–pids-limit,抑制 fork 炸弹与横向移动。
  • 端口与网络:避免映射1024 以下特权端口;优先使用用户自定义 bridge 网络而非默认 docker0,减少 ARP 欺骗、MAC 洪泛等风险。
  • 挂载传播:将挂载传播设为 private/slave,避免变更意外扩散。
  • 执行与提权防护:避免 docker exec --privileged–user=root;使用 no-new-privileges 禁止权限提升。

四 网络与最小暴露面

  • 默认禁止容器间通信与对宿主机的不必要访问,按需通过自定义网络与策略开放最小连通性。
  • 暴露必要端口与协议,避免使用 -P/–publish-all 暴露全部端口。
  • 在复杂环境使用网络策略限制源/目的 IP 与端口,减少东西向流量攻击面。
  • 避免使用 –network=host;如需高性能可考虑更安全的替代方案(如用户自定义 overlay 网络)。

五 监控审计与合规

  • 启用容器与宿主机日志(引擎日志、容器 stdout/stderr、审计日志),集中到 SIEM 进行关联分析。
  • 持续漏洞扫描配置基线检查(如 CIS Docker Benchmark),对高风险配置与镜像阻断部署。
  • CI/CD 中嵌入安全门禁(镜像扫描、签名校验、准入控制),实现“不可变基础设施 + 可重复构建”。
  • 针对容器短生命周期与高变化特性,采用面向容器的运行时检测/响应(行为基线、异常进程/网络连接告警)。

0