Docker安全威胁
容器化部署带来了新的安全挑战:镜像中的漏洞、容器逃逸风险、不安全的配置和权限过度开放是Docker安全的主要威胁。
镜像安全
选择可信基础镜像
- 优先使用官方镜像(Docker Official Images)
- 使用经过验证的发行版(Alpine、Distroless)
- 避免使用
latest标签,指定精确版本
镜像扫描
在CI/CD流水线中集成镜像扫描:
# CI/CD 中的镜像扫描
- name: Scan Docker image
run: |
trivy image myapp:latest
# 或使用 Docker Scout
docker scout quickview myapp:latest
推荐工具: - Trivy:开源,支持多语言和操作系统漏洞 - Snyk Container:商业方案,深度集成 - Docker Scout:Docker官方安全工具 - Grype:Anchore开源扫描器
扫描策略: - 每次构建都扫描 - 设阻断标准(如:不允许Critical级别漏洞) - 定期扫描已部署的镜像
镜像最小化
# 多阶段构建
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o app
FROM scratch
COPY --from=builder /app/app /
ENTRYPOINT ["/app"]
最小的镜像意味着最小的攻击面。
运行时安全
容器运行时配置
docker run \
--read-only \ # 只读文件系统
--cap-drop=ALL \ # 删除所有Linux能力
--cap-add=NET_BIND_SERVICE \ # 只添加必要能力
--security-opt=no-new-privileges \ # 禁止提权
--security-opt seccomp=policy.json \ # seccomp策略
myapp
Docker Compose安全配置
services:
app:
image: myapp
read_only: true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
security_opt:
- no-new-privileges:true
restart: unless-stopped
非root用户运行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
权限控制
容器权限最小化
Linux Capabilities管理: 默认情况下,Docker容器拥有部分Linux Capabilities。应删除所有不必要的Capabilities。
需要网络:cap_add NET_BIND_SERVICE, NET_RAW
需要时间:cap_add SYS_TIME
不需要:全部drop
资源限制
docker run \
--memory="512m" \ # 内存限制
--cpus="0.5" \ # CPU限制
--pids-limit=100 \ # 进程数限制
--ulimit nofile=1024:2048 # 文件描述符限制
myapp
Docker Socket安全
千万不要将/var/run/docker.sock挂载到容器中——这等于给了容器主机的root权限。如果确实需要管理Docker,使用Docker API的远程访问并配置TLS。
安全审计
Docker Bench Security
运行Docker Bench Security进行安全基线检查:
docker run --it --net host --pid host \
-v /etc:/etc:ro \
-v /var:/var:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
docker/docker-bench-security
该工具对照CIS Docker Benchmark检查配置项。
日志审计
- 启用Docker的审计日志
- 监控容器异常行为
- 记录所有镜像拉取和容器启动事件
最佳实践清单
- [ ] 使用受信任的基础镜像
- [ ] 定期扫描镜像漏洞
- [ ] 最小化镜像体积
- [ ] 以非root用户运行容器
- [ ] 删除不必要的Linux Capabilities
- [ ] 设置文件系统为只读
- [ ] 限制资源使用
- [ ] 不挂载Docker Socket
- [ ] 使用Seccomp和AppArmor配置
- [ ] 定期运行安全基准检查
容器安全需要在镜像构建、运行配置和运维管理每个环节都加以重视。
