AI 助手能读写文件、执行命令、访问网络——这些强大能力的反面是安全风险。WorkBuddy 从架构层面构建了多层安全防线:沙箱隔离、权限声明、操作确认、审计追踪。理解这些机制,不仅能让你用得更安心,还能通过合理配置在安全与效率之间找到最佳平衡点。
WorkBuddy 的所有代码执行和工具调用都在沙箱中运行,与宿主系统隔离:
WorkBuddy 的文件操作被限制在工作区内:
# 默认工作区
workbuddy.workdir = /path/to/your/project
# 文件访问规则
✅ 允许:读取/写入工作区内文件
✅ 允许:在工作区内创建/删除文件
❌ 拒绝:访问工作区外的文件(如 ~/.ssh/、/etc/)
❌ 拒绝:访问 .env、credentials、*.key 等敏感文件
❌ 拒绝:符号链接跳出工作区
可以通过配置扩展或收缩工作区范围:
// .workbuddy/config.json
{
"security": {
"workspace": {
"roots": ["./src", "./tests", "./docs"],
"deny_patterns": [
"**/.env*",
"**/credentials*",
"**/*.pem",
"**/*.key",
"**/secrets/**"
],
"allow_outside_read": [
"/usr/share/dictionaries"
]
}
}
}
WorkBuddy 执行的子进程受到资源限制:
// 进程沙箱配置
{
"security": {
"subprocess": {
"timeout": 30,
"max_memory": "512MB",
"network": "whitelist",
"network_whitelist": [
"api.github.com",
"registry.npmjs.org",
"pypi.org"
],
"max_processes": 1,
"forbidden_commands": [
"rm -rf /",
"format",
"del /s /q C:",
"shutdown",
"reboot"
]
}
}
}
WorkBuddy 的网络访问遵循最小必要原则:
新安装的 Skill 默认无网络权限,需显式声明和用户授权
只允许访问声明的域名列表,防止数据外泄到未知服务器
所有网络请求记录到审计日志,包含 URL、方法、数据大小
上传内容自动检测敏感信息(API Key、密码、Token),命中则阻止
某些操作风险较高,WorkBuddy 会暂停执行并请求用户确认:
| 级别 | 操作类型 | 默认行为 | 示例 |
|---|---|---|---|
| Critical | 不可逆删除 | 必须确认 | rm -rf、DROP TABLE、格式化磁盘 |
| High | 批量修改/删除 | 必须确认 | 删除 10+ 文件、批量数据库更新、发送全员消息 |
| Medium | 外部通信 | 可配置 | 发送 HTTP 请求、推送 Git 提交、部署服务 |
| Low | 本地修改 | 自动执行 | 创建文件、修改代码、安装依赖 |
当 WorkBuddy 遇到高危操作时,会展示操作详情并等待确认:
⚠️ 高危操作确认
操作:删除文件
目标:src/legacy/ 目录下 23 个文件
原因:这些文件已被新模块替代,不再使用
影响分析:
- 无其他文件引用这些模块(已验证)
- 无测试依赖这些文件(已验证)
- 删除后不可恢复(未启用版本控制快照)
[确认执行] [查看文件列表] [取消] [修改为移动到归档目录]
对于信任的操作,可以配置自动确认以减少交互:
// .workbuddy/config.json
{
"security": {
"auto_confirm": {
"rules": [
{
"match": { "operation": "file_delete", "path": "tests/tmp/**" },
"action": "allow",
"reason": "测试临时文件,可安全删除"
},
{
"match": { "operation": "git_push", "branch": "feature/*" },
"action": "allow",
"reason": "功能分支推送,非主分支"
},
{
"match": { "operation": "subprocess", "command": "npm test" },
"action": "allow",
"reason": "测试命令,无副作用"
}
],
"default": "confirm"
}
}
}
每个 Skill 在 manifest.json 中声明所需权限,安装时用户可审查:
// manifest.json
{
"permissions": {
"filesystem": {
"access": "readwrite",
"scope": "./project/**"
},
"network": {
"access": "whitelist",
"domains": ["api.github.com", "api.npmjs.org"]
},
"subprocess": {
"access": "restricted",
"allowed": ["node", "python3", "git"],
"max_timeout": 60
},
"clipboard": false,
"notifications": true
}
}
安装 Skill 时,WorkBuddy 会展示权限摘要:
📦 安装 Skill: code-reviewer v1.2.0
权限请求:
📁 文件系统:读写当前项目目录
🌐 网络:访问 api.github.com
⚙️ 子进程:运行 node, git(最长 60 秒)
📋 剪贴板:无
🔔 通知:允许
[信任并安装] [自定义权限] [取消]
即使 Skill 声明了权限,运行时也可以进一步限制:
# 临时以只读模式运行 Skill
/skills run code-reviewer --readonly
# 临时禁止网络访问
/skills run code-reviewer --no-network
# 限制文件访问范围
/skills run code-reviewer --scope ./src/**
WorkBuddy 在多个环节自动检测和拦截敏感信息:
[REDACTED]// 敏感信息规则(可自定义)
{
"security": {
"sensitive_patterns": [
{ "name": "AWS Access Key", "pattern": "AKIA[0-9A-Z]{16}" },
{ "name": "GitHub Token", "pattern": "gh[pousr]_[A-Za-z0-9_]{36}" },
{ "name": "Private Key", "pattern": "-----BEGIN (RSA |EC )?PRIVATE KEY-----" },
{ "name": "JWT", "pattern": "eyJ[A-Za-z0-9_-]*\\.eyJ[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]*" },
{ "name": "Generic Secret", "pattern": "(password|secret|token|api_key)\\s*[:=]\\s*['\"]?[^'\"\\s]{8,}" }
]
}
}
WorkBuddy 支持配置数据不出域策略:
所有操作记录到审计日志,支持事后追溯:
# 查看审计日志
/security audit-log
# 输出示例
[2026-07-27 14:32:01] FILE_READ src/api/users.py (by: code-reviewer)
[2026-07-27 14:32:02] FILE_WRITE src/api/users.py (by: code-reviewer, +12/-3 lines)
[2026-07-27 14:32:05] SUBPROCESS npm test (by: test-runner, exit: 0)
[2026-07-27 14:32:08] NETWORK_GET api.github.com/repos/... (by: git-helper, 2.3KB)
[2026-07-27 14:32:10] FILE_DELETE tests/tmp/mock.data.json (by: test-runner, confirmed)
# 按时间范围查看
/security audit-log --from 2026-07-27 --to 2026-07-27
# 按操作类型过滤
/security audit-log --type FILE_DELETE,SUBPROCESS
# 导出审计报告
/security audit-log --export audit-2026-07.csv