最小权限+明确限制+默认拒绝的docker安全加固配置:使用固定版本精简镜像(如python:3.11-slim-bookworm),创建非root用户(user appuser),cap_drop:["all"]+cap_add:["net_bind_service"],read_only:true,tmpfs挂载/tmp,ulimits限制进程与句柄,security_opt:-no-new-privileges:true,启用apparmor:docker-default及seccomp-restrictive.json,禁用icc。

直接写一套可落地的 Docker 容器安全加固配置,核心是“最小权限 + 明确限制 + 默认拒绝”。不堆砌理论,只列关键项和写法。
基础镜像与用户配置
从源头降低风险:用精简镜像、禁用 root、预设权限。
- 在 Dockerfile 中固定基础镜像版本,优先选 Alpine 或 distroless:
FROM python:3.11-slim-bookworm(避免:latest) - 创建非 root 用户并设为默认运行身份:
RUN groupadd -r app && useradd -r -g app appuserUSER appuser - 确保应用目录归属正确,避免运行时 chown:
RUN mkdir -p /app && chown appuser:app /app
运行时能力控制(cap_add/cap_drop)
Linux capabilities 是权限泄露高发区,必须显式丢弃再按需添加。
- 推荐组合写法(docker-compose.yml 示例):
cap_drop: ["ALL"]cap_add: ["NET_BIND_SERVICE"]
——仅允许绑定 80/443 等低端口,其他一律禁止 - 禁用高危能力(如无特殊需求,绝不加):
SYS_ADMIN、NET_ADMIN、SYS_MODULE、IPC_LOCK - 若需修改文件属主,优先在构建阶段完成,而非运行时加
CHOWN
文件系统与进程隔离
防止恶意写入、持久化后门或资源耗尽。
- 根文件系统设为只读:
read_only: true(docker-compose)或--read-only(cli) - 临时目录用内存文件系统:
tmpfs: [/tmp:rw,noexec,nosuid,size=64m] - 限制最大进程数和文件句柄:
ulimits:nproc: 50nofile:soft: 256hard: 512
安全选项与内核防护
启用 Docker 原生安全机制,堵住常见逃逸路径。
- 禁止运行时提权:
security_opt:- no-new-privileges:true - 启用默认 AppArmor 模板(Linux 主机支持时):
- apparmor:docker-default - 挂载自定义 Seccomp 策略(生产环境强烈建议):
- seccomp:/etc/docker/seccomp-restrictive.json
——禁用ptrace、mount、reboot等高危 syscall - 禁用容器间默认通信(如无需互联):
icc: false(配置在/etc/docker/daemon.json)











