创新方案
运行不可信 OpenClaw 技能时,生成 Docker…
在需要运行权限不明或不可信的 OpenClaw 技能,并希望先获得可重复、默认最小权限的 Docker 隔离配置时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
运行不可信 OpenClaw 技能时,生特定
解决思路
- 确认用户要运行不可信技能后,生成基于 Docker 的安全沙箱,将技能与主机系统隔离。
- 明确沙箱目的:OpenClaw 技能会按申请的权限运行;带 shell 权限的恶意技能可攻陷整个系统,沙箱用于限制影响范围。
- 对只读技能使用 Minimal profile:Dockerfile 使用 `FROM node:20-alpine`,执行 `RUN adduser -D -h /workspace openclaw`,设置 `WORKDIR /workspace` 和 `USER openclaw`;不提供网络、不提供提权能力,并把项目以只读方式挂载。
- Minimal profile 的 `docker run` 命令为:`docker run --rm --network none --read-only --tmpfs /tmp:size=64m --cap-drop ALL --security-opt no-new-privileges -v "$(pwd):/workspace:ro" openclaw-sandbox`。
- 对读写技能使用 Standard profile:Dockerfile 使用 `FROM node:20-alpine`,执行 `RUN adduser -D -h /workspace openclaw`,设置 `WORKDIR /workspace` 和 `USER openclaw`。
- Standard profile 的 `docker run` 命令为:`docker run --rm --network none --cap-drop ALL --security-opt no-new-privileges --memory 512m --cpus 1 --pids-limit 100 -v "$(pwd):/workspace" openclaw-sandbox`。
- 对需要访问 API 的技能使用 Network profile:Dockerfile 使用 `FROM node:20-alpine`,执行 `RUN adduser -D -h /workspace openclaw`,设置 `WORKDIR /workspace` 和 `USER openclaw`。
- Network profile 的 `docker run` 命令为:`docker run --rm --cap-drop ALL --security-opt no-new-privileges --memory 512m --cpus 1 --pids-limit 100 --dns 1.1.1.1 -v "$(pwd):/workspace" openclaw-sandbox`。
- 网络型沙箱仍要防止提权并限制资源;若需额外安全,使用 `--network` 连接自定义 Docker 网络,并把出站流量限制到特定域名。
- 当用户提供技能权限时,按权限生成相应沙箱;输入格式为 `Skill: <name>` 和 `Permissions: fileRead, fileWrite, network, shell`。
- 输出至少包含三项:`Dockerfile`(最小基础镜像、非 root 用户)、`docker run` 命令(包含全部安全 flags)、`docker-compose.yml`(便于重复使用)。
- 始终按需包含安全 flags:`--cap-drop ALL` 用于移除全部 Linux capabilities。
- 始终按需包含 `--security-opt no-new-privileges`,防止权限提升。
- 当没有 `fileWrite` 权限时包含 `--read-only`,使文件系统只读。
- 当没有 `network` 权限时包含 `--network none`,禁用网络。
- 包含 `--memory 512m` 限制内存使用。
- 包含 `--cpus 1` 限制 CPU 使用。
- 包含 `--pids-limit 100` 限制进程数。
- 包含 `--tmpfs /tmp:size=64m` 提供临时可写空间。
- 使用 `USER openclaw` 以非 root 用户运行。
- 总是默认使用限制最严格的 profile。
- 绝不生成带 `--privileged` flag 的沙箱。
- 绝不挂载 Docker socket(`/var/run/docker.sock`)。
- 绝不挂载敏感主机目录(`~/.ssh`、`~/.aws`、`/etc`)。
- 始终使用 `--cap-drop ALL`;除非有明确理由,绝不授予单个 capability。
- 必须包含资源限制以防 DoS(memory、CPU、pids)。
- 如果技能需要 `shell`,警告用户,并建议监控沙箱输出。
- 生成的文件只写入专用输出文件夹(例如 `.openclaw/sandbox/`),绝不覆盖现有项目文件。
- 写入任何文件到磁盘前必须获得用户确认——先展示生成内容供审查。
适用边界 · 注意事项
- 当技能确实需要 `--privileged`、挂载 Docker socket 或访问 `~/.ssh`、`~/.aws`、`/etc` 等敏感主机目录时,此方案不适用。
- 当运行环境没有 Docker 或无法使用这些安全参数时,不适用。
- 当技能完全可信且不需要隔离时,可不使用该沙箱方案。