系统进程级容器化隔离需从运行时环境、权限边界、网络通路和资源约束四层面同步收紧:非root用户+能力裁剪启动、用户命名空间映射、网络与文件系统强制隔离、资源限制及Seccomp白名单。

直接配置系统进程级的容器化隔离,核心不是“把进程塞进容器”,而是让关键业务进程在受控、受限、可审计的容器环境中启动和运行。这需要从运行时环境、权限边界、网络通路和资源约束四个层面同步收紧。
用非root用户+能力裁剪启动业务进程
避免业务进程以root身份运行是第一道硬隔离。Docker默认允许root,但生产环境必须禁用:
- 在Dockerfile中明确创建普通用户并切换:
RUN addgroup -g 1001 -r appgroup && adduser -S appuser -u 1001USER appuser - 运行时进一步裁剪Linux能力,例如只保留业务必需项:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE --cap-add=DAC_OVERRIDE your-image - 禁用高危能力如
CAP_SYS_ADMIN、CAP_NET_RAW,它们是容器逃逸的主要入口。
启用用户命名空间映射防提权
即使容器内进程是root,也要让它在宿主机上对应一个无特权的高位UID。这不是可选项,而是基础防御:
- 在Docker daemon.json中启用用户命名空间支持:
{"userns-remap": "default"} - 重启Docker服务后,所有新建容器自动启用UID/GID映射(如容器内UID 0 → 宿主机UID 100000)
- 配合
--user参数双重约束:docker run --user 1001:1001 your-image
网络与文件系统强制隔离
进程一旦联网或读写磁盘,就可能成为攻击跳板。必须显式关闭默认宽松行为:
- 禁止默认bridge网络访问外网:启动时加
--network none,再按需通过自定义网络连接 - 敏感服务仅绑定127.0.0.1或Unix socket,不暴露到容器网络栈
- 挂载目录设为只读:
--read-only --tmpfs /tmp:rw,size=64m - 关键配置文件用
--mount type=bind,source=/host/conf,target=/app/conf,readonly方式挂载
限制资源并启用Seccomp白名单
资源不限制,就无法防DoS;系统调用不收敛,就无法防0day利用:
- 设置硬性资源上限:
--memory=512m --cpus=1.0 --pids-limit=100 - 加载精简Seccomp策略(推荐使用Docker官方
default.json并删减):--security-opt seccomp=/path/to/restricted.json - 策略中明确禁止
clone、unshare、ptrace等逃逸相关调用











