Docker 27+中--security-opt是内核级安全沙箱核心入口,支持sandbox=strict、多层seccomp+SELinux+Landlock策略、no-new-privileges与用户命名空间联动、设备与sysctl硬约束等机制。

在 Docker 27 及以上版本中,--security-opt 是启用内核级安全沙箱运行模式的核心入口。它不再只是传递零散安全参数的“开关”,而是对接底层 eBPF 策略引擎、LSM 框架和沙箱抽象层(SSAL)的策略注入通道。关键不在于堆砌参数,而在于理解每个 --security-opt 值所触发的内核机制层级。
启用强制沙箱模式:sandbox=strict
这是 Docker 27 新增的最基础也是最关键的沙箱启动开关:
-
--security-opt sandbox=strict会激活 SSAL 的三阶段流程(策略预检 → 沙箱初始化 → 工作负载绑定),并在 init 进程创建前注入 JIT-optimized seccomp-bpf 字节码 - 该模式默认禁用
NET_ADMIN、SYS_MODULE、IPC_LOCK等高危 capability,且不可通过--cap-add绕过 - 配合
--read-only和--tmpfs /tmp:rw,size=64m使用,可确保根文件系统只读,临时空间受控
绑定内核安全模块:seccomp + label + landlock
单一 seccomp 配置已不足以覆盖现代攻击面,Docker 27 支持多层策略叠加:
-
--security-opt seccomp=/path/to/restricted.json:加载自定义 seccomp 策略,屏蔽ptrace、mount、setns等 53+ 高危系统调用(默认 builtin profile 已启用) -
--security-opt label:type:docker_api_t:向容器进程打 SELinux 标签,由内核 LSM 框架在 syscall 入口处执行访问控制决策 -
--security-opt sandbox=landlock-v1:启用 Landlock v1 沙箱,原子调用landlock_restrict_self(),限制进程仅能访问白名单路径(如/app),运行时不可撤销
关闭提权通路:no-new-privileges 与用户命名空间联动
该选项是防止容器内进程二次提权的“保险栓”,但在 Docker 27 中需配合新机制才真正生效:
-
--security-opt no-new-privileges:true强制设置no_new_privs位,使 execve 后无法获得新 capability —— 但前提是容器未以 root 启动 - Docker 27 默认以 UID/GID 65534(nobody)运行,且
--user=root被禁止;若需指定用户,必须显式使用--user 1001:1001 - 搭配
--userns-remap=default(需 daemon.json 配置),实现用户命名空间自动映射,从内核态隔离 UID/GID 视图
设备与挂载行为硬约束
很多逃逸始于对 /dev 或 /proc 的滥用,Docker 27 将这些限制下沉到内核策略层:
- 所有 bind mount 默认启用
noexec,nosuid,nodev,无需手动加:noexec标志 -
--security-opt device-cgroup-rules='c 1:3 rwm'可精确放行/dev/null(主1次3),其余设备被device_cgroup_rules策略拦截 -
--security-opt sysctl=user.max_user_namespaces=0禁用用户命名空间嵌套,阻断 CVE-2023-28842 类逃逸链


















