wunianxiao
|
cacd4436ce
|
fix(sandbox): builder 容器 --user uid:gid + 离线模式,修 cap-drop 写权限
步骤 9: tool_manager build 迁移到 builder 容器验证通过。
问题: --cap-drop ALL 丢掉 CAP_DAC_OVERRIDE,容器内 root 无法写
bind mount 的非 root 目录(宿主 xiao:1000)。
这是 cap-drop 正确生效的安全行为,非 bug。
修复:
- builder 容器 --user uid:gid 以宿主用户身份运行,自然能写自己
的目录,同时保留 cap-drop ALL + no-new-privileges。
- Cargo.toml 改 CARGO_HOME=/tmp/cargo + chmod 777,使任意 uid
都能复用 serde_json 预缓存。
- cargo build --offline + CARGO_NET_OFFLINE=true,配合 --network
none 真正离线编译,杜绝恶意代码下载依赖。
端到端: tool_manager create_tool → builder 容器离线编译 →
产物运行成功,审计日志记录正确。
|
2026-06-22 11:49:31 +08:00 |
|
wunianxiao
|
20f7c3ba9c
|
feat(sandbox): Docker 一次性容器执行隔离边界(步骤 6-7)
引入两类安全边界:统一审批=授权边界(上一提交),一次性 Docker
容器=执行隔离边界(本提交)。LLM 即使执行恶意代码也只能在受限容器
内运行。
spec.rs: 新增 SandboxSpec(profile/network/memory/cpus/pids_limit/
read_only),默认 profile=local 不启用容器。
executor.rs: 按 sandbox.profile 选择执行后端
- local: 本地 spawn(env_clear + 白名单注入)
- stdio: ias-stdio-runner,--network none --read-only --cap-drop ALL
--security-opt no-new-privileges,仅 bind mount 工具二进制(ro)+tmpfs /tmp
- network: ias-network-runner(预留自行联网工具)
- builder: ias-tool-builder(供 tool_manager 编译)
全局开关 IAS_DOCKER_SANDBOX=1,未启用时行为不变(向后兼容)。
tool_manager: build_tool 支持 IAS_DOCKER_BUILDER=1 在 ias-tool-builder
容器内离线编译(--network none,挂载 tool_dir 到 /work)。
docker/: 三类 Dockerfile + build-images.sh 构建脚本。
- stdio-runner: debian-slim + ca-certificates,无网络只读
- network-runner: 预留联网工具
- tool-builder: rust:1.88-slim 预缓存 serde_json,支持离线编译
spec 迁移: 17 个普通工具追加 sandbox.profile: stdio;tool_manager
保持 local(自身在宿主操作文件系统)。
端到端验证: datetime 工具本地模式 +08:00,Docker 模式 +00:00(UTC),
--rm 无容器残留。
|
2026-06-22 11:38:42 +08:00 |
|
wunianxiao
|
4f80e81b0b
|
security(executor): 统一工具级审批 + env 白名单 + 结构化结果
P0-1 统一审批: 高风险工具在 spawn 前统一走审批,与后续消息类型
(result/http/db) 无关,堵住 stdio→result 绕过审批的漏洞。
移除 http/db 分支内重复审批(入口已授权)。
P0-4 env 白名单: spawn 前 cmd.env_clear(),仅注入 PATH + spec 声明
的 env 变量,避免工具读取宿主全部 API key/数据库密码。
tool_manager spec 补充 HOME/CARGO_HOME/RUSTUP_HOME 供 cargo 使用。
P1-10 结构化结果: 引入 ToolRunOutcome{Ok,Err{kind,message}} 与
ToolErrorKind 枚举,executor/registry dispatch 返回结构化结果。
daemon 与 CLI 据此判断成败,删除脆弱的 is_tool_error 字符串前缀
匹配;失败时记录 kind 便于追踪。
|
2026-06-22 10:47:01 +08:00 |
|
wunianxiao
|
bf231352fb
|
security(tool_manager): 禁止自改保留名 + 强制 high risk + 审计日志 + 构建超时清理
P0-2: validate_tool_name 将 tool_manager 等列为保留名,禁止
create/update/build 作用于自身,杜绝持久化后门。
P0-3: spec_yaml 忽略调用方传入的 risk_level,由 tool_manager
产出的工具一律 high risk,避免创建低风险后门绕过审批。
审计: 每次调用追加记录到 tools/.tool_audit.log
(timestamp/user_id/action/tool_name/ok|err/detail)。
构建: 用 timeout 限制 180s,失败时删除残留旧二进制,
避免 reload 后调用旧版本造成"假成功"。
|
2026-06-22 10:37:42 +08:00 |
|
wunianxiao
|
32c4fcf3a8
|
feat: add tool manager capability
|
2026-06-22 10:30:12 +08:00 |
|
wunianxiao
|
99c1e9cd6c
|
Refactor tool execution pipeline
|
2026-06-21 14:30:40 +08:00 |
|