教程 docker tutorial

权限与密钥管理

在 Docker 安全管理中,合理配置容器权限和管理密钥是防止安全风险的重要措施。

1. 容器用户与权限管理

  • 避免使用 root 用户:
dockerfile
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

`

  • 设置文件和目录权限:
dockerfile
RUN mkdir /app/data && chown -R appuser:appgroup /app/data
  • 只读挂载卷:
yaml
volumes:
  - ./config:/app/config:ro

2. Docker Secrets 管理敏感信息

  • 适用于 Swarm 或 Kubernetes 部署
  • 创建 Secret:
bash
echo "mysecretpassword" | docker secret create db_password -
  • 容器中使用 Secret:
yaml
services:
  db:
    image: mysql:8
    secrets:
      - db_password

secrets:
  db_password:
    external: true
  • Secret 文件仅在容器运行时挂载,不存储在镜像中,保护敏感信息

3. 使用环境变量管理配置

  • 可以通过 .env 文件或 environment 定义非敏感配置:
yaml
services:
  app:
    image: myapp
    environment:
      APP_ENV: production
      LOG_LEVEL: info
  • 避免将密码或密钥直接写入 Compose 文件或镜像中

4. 文件与卷权限最佳实践

  • 使用非 root 用户读写数据卷
  • 挂载配置文件为只读,防止容器修改
  • 对日志和数据卷设置最小必要权限

5. 容器访问控制

  • 限制容器能力(capabilities):
bash
docker run --cap-drop ALL --cap-add CHOWN myapp
  • 使用安全配置选项:

    • read-only 根文件系统
    • 限制网络访问
    • 限制资源(CPU、内存)

6. 总结

  • 非 root 用户运行容器,减少权限风险
  • 使用 Docker Secret 管理敏感信息,防止泄露
  • 文件、卷和环境变量的合理权限设置,提高安全性
  • 配合 CI/CD 安全策略,确保生产环境容器安全运行

通过合理配置权限与密钥管理,可以有效保护 Docker 容器及敏感数据安全,实现安全可靠的容器化应用部署。