容器安全需要从多个层面进行防护,包括主机安全、镜像安全、运行时安全和网络安全。
最佳实践:
- 使用非root用户运行容器:docker run -u 1000:1000 myapp
- 启用用户命名空间隔离:dockerd --userns-remap=default
- 避免使用--privileged
标志
- 移除不必要的Linux能力:docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp
关键措施: - 使用官方或可信来源的基础镜像 - 定期更新基础镜像和安全补丁 - 使用多阶段构建减少攻击面 - 移除不必要的工具和包
# 多阶段构建示例
FROM golang:1.18 as builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
RUN adduser -D myuser
USER myuser
COPY --from=builder /app/myapp .
CMD ["./myapp"]
工具推荐:
- Trivy: trivy image myimage:latest
- Clair
- Anchore
- Docker Scan (内置)
重要配置: - 启用seccomp配置文件限制系统调用 - 使用AppArmor或SELinux进行强制访问控制 - 限制资源使用(CPU,内存等) - 设置容器重启策略
# 使用自定义seccomp配置文件运行容器
docker run --security-opt seccomp=/path/to/seccomp.json myapp
# 限制资源示例
docker run -d --name myapp --memory="512m" --cpus="1.5" myapp
安全建议: - 使用自定义桥接网络而非默认网络 - 限制不必要的网络访问 - 为容器间通信启用TLS加密 - 使用网络策略(如Kubernetes NetworkPolicies)
# 创建自定义网络
docker network create --driver bridge isolated_net
# 使用自定义网络运行容器
docker run --network=isolated_net myapp
工具与策略: - 使用Falco进行运行时异常检测 - 收集和分析容器日志 - 监控容器行为基线 - 实施定期安全审计
# 使用Falco监控
falco -r /etc/falco/falco_rules.yaml
如果使用Kubernetes,还需考虑:
通过实施这些多层次的安全措施,可以显著提高Linux服务器上容器化应用程序的安全性,降低潜在攻击风险。