容器安全:Docker安全加固指南
Docker容器共享宿主机内核,如果配置不当,容器内的攻击者可能逃逸到宿主机。容器安全不容忽视。本文从镜像安全、运行时安全、网络安全三个维度介绍Docker安全加固措施。
镜像安全
使用官方镜像:优先使用官方镜像或知名厂商的镜像,避免使用来路不明的镜像。
最小化镜像:使用alpine或distroless基础镜像,减少攻击面。不要在镜像中安装不必要的工具(如curl、wget、telnet)。
镜像扫描:使用Trivy或Docker Scout扫描镜像中的已知漏洞。在CI/CD流水线中加入镜像扫描步骤,发现高危漏洞时阻止构建。
不在镜像中存放密钥:敏感信息通过环境变量或Secret注入,不要硬编码在Dockerfile中。使用多阶段构建,确保最终镜像不包含构建时的敏感信息。
运行时安全
非root运行:在Dockerfile中创建非root用户,使用 USER 指令切换。容器内不要以root身份运行应用。
只读文件系统:docker run --read-only --tmpfs /tmp。容器文件系统设为只读,防止攻击者写入恶意文件。
限制资源:使用 --memory、--cpus、--pids-limit 限制容器资源使用,防止单个容器耗尽宿主机资源。
删除特权模式:绝对不要使用 --privileged,这相当于给了容器宿主机的完全控制权。如果确实需要某些特权,使用 --cap-add 精确添加所需的能力。
网络安全
使用自定义网络:不要用默认的bridge网络。创建自定义网络,容器间通过容器名通信。
限制网络访问:不同服务放在不同网络中,通过网关或Ingress控制访问。数据库容器只允许应用容器网络访问。
不使用host网络:--network host 让容器直接使用宿主机网络栈,绕过了网络隔离。除非有特殊需求,不要使用。
