Appearance
21. 工具调用的安全性与沙箱隔离怎么做?
难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min
本题阅读地图
- 💡 简要回答
- 📝 详细解析
- 🎯 面试总结
👔面试官:工具调用的安全性与沙箱隔离怎么做?
🙋♂️我:限制模型只能调白名单里的工具。
👔面试官:白名单是一层,但工具本身可能有危险操作(如执行代码、删数据)。你能讲沙箱隔离、权限控制、审计日志这些更深层的防护吗?
🙋♂️我:那就让工具在 Docker 里跑?
👔面试官:对,Docker 是环境隔离的一层。但还有:网络隔离(不能访问内网敏感服务)、资源限制(CPU/内存/磁盘)、只读挂载、非 root 用户。而且调用前后都要有审计日志。
💡 简要回答
三层防护:
| 层级 | 措施 |
|---|---|
| 应用层 | 白名单工具、schema 校验、参数过滤 |
| 工具层 | 最小权限、接口鉴权、操作审计 |
| 环境层 | Docker/容器隔离、网络隔离、资源限制、只读挂载 |
关键原则:
- 不给模型裸权限
- 所有危险操作都有审计
- 默认拒绝,显式允许
📝 详细解析
应用层防护
白名单机制:
- 只允许调用预定义工具
- 禁止模型构造任意系统调用
Schema 校验:
- 参数类型检查
- 必填字段验证
- 格式正则校验
敏感参数过滤:
- 密码、密钥不能作为参数传入
- 从安全存储读取
工具层防护
最小权限:
- 查询工具只有读权限
- 写入操作需要额外审批
接口鉴权:
- 工具内部做权限校验
- 不依赖调用方传递的身份
操作审计:
- 记录谁、什么时候、调了什么工具、传了什么参数
- 关键操作留痕
环境层防护(沙箱)
Docker 隔离:
- 每个工具调用在独立容器
- 限制 CPU、内存、磁盘
网络隔离:
- 不能访问宿主机内网
- 外网访问白名单
文件系统:
- 只读挂载(不能修改宿主机文件)
- 临时工作目录(用完即删)
用户权限:
- 非 root 用户运行
- seccomp、AppArmor 额外限制
特别危险的工具
代码执行:
- 必须沙箱
- 禁止网络访问
- 超时强制终止
数据库操作:
- 只读账号
- SQL 注入防护
- 敏感表脱敏
文件操作:
- 限定工作目录
- 禁止访问系统目录
- 禁止删除操作
🎯 面试总结
三层防护:应用层(白名单+校验)、工具层(权限+审计)、环境层(沙箱隔离)。默认拒绝,最小权限。