Linux中Docker安全怎么保障
小樊
42
2025-11-30 11:17:46
Linux下Docker安全的分层防护实践
一 基础与镜像安全
- 保持运行时与依赖为最新版本,及时修补内核、容器引擎与容器内的组件,避免已知漏洞被利用。
- 仅使用可信来源的镜像,启用镜像签名与内容信任(如Docker Content Trust, DCT),并在构建阶段进行漏洞扫描与成分清点。
- 采用多阶段构建与最小化基础镜像(如 Alpine),减少不必要的软件包与工具,降低攻击面。
- 严禁在镜像或构建过程中嵌入明文密钥,使用Docker 密钥或外部密钥管理服务进行注入与管理。
- 注意历史风险:例如 Alpine Linux 3.3+ 的 root 曾存在空密码问题,若安装 shadow 并以非 root 运行,可能被本地提权;镜像应定期更新并避免此类风险组件。
二 运行时权限与隔离
- 禁止使用**–privileged**,避免容器获得宿主机几乎全部能力。
- 遵循最小权限:优先使用**–cap-drop ALL**,仅按需**–cap-add**必要能力(如仅绑定低端口时使用 NET_BIND_SERVICE)。
- 启用用户命名空间(user namespaces),将容器内 root 映射为宿主机非特权用户,显著缩小被攻破后的影响范围。
- 以非 root用户运行应用(Dockerfile 中创建专用用户并切换 USER)。
- 将容器根文件系统设为只读(–read-only),对确需写入的路径通过**卷(volume)**进行受控挂载。
- 限制进程数量(–pids-limit),抑制 fork 炸弹与横向移动。
- 禁止在容器内运行 sshd;如需调试,使用 docker exec 进入,且避免使用特权或 root 选项。
三 资源控制与进程限制
- 为容器设置**内存(–memory)与CPU(–cpus / --cpu-shares)**上限,防止资源耗尽导致 DoS。
- 启用PID 限制(–pids-limit),控制容器内可创建的进程数量。
- 对磁盘与写入行为进行控制(如 –storage-opt size= 等),避免无限制日志与临时文件膨胀影响宿主机。
四 网络与通信安全
- 避免使用默认 docker0 网桥,优先创建用户自定义网络并基于业务进行网络分段与访问控制。
- 仅最小暴露端口,避免使用1024 以下特权端口;对外服务通过反向代理/网关统一暴露。
- 默认桥接转发缺乏过滤,易受 ARP 欺骗与 MAC 泛洪等攻击;必要时采用更安全的网络插件或策略引擎进行微分段与白名单控制。
- 减少不必要的命名空间共享(如 host/pid/ipc/uts 等),维持容器与宿主机、容器与容器间的隔离边界。
五 监控审计与合规
- 在 CI/CD 中嵌入安全扫描与签名校验门禁,确保只有合规镜像进入生产。
- 启用运行时安全监测(系统调用、进程、文件与网络行为基线),对异常行为进行告警与阻断。
- 对容器与宿主机实施集中日志与审计,保留关键事件以便取证与合规。
- 在编排与平台层(如 Swarm/Kubernetes)启用节点互信、加密通信与证书管理等内置安全能力,形成端到端防护闭环。