深色模式
AI 五档策略
每台服务器可以单独配 AI 访问策略,5 档由严到松。叠加全局总开关 + 危险黑名单 + sudo 强制审批构成纵深防御。
进入
主界面左侧导航 → AI 策略 或在每台 服务器编辑弹窗 → 策略 tab。
5 档对照
| 档位 | 元工具 | 只读工具 | 改动工具 | 适合 |
|---|---|---|---|---|
| Disabled | ❌ | ❌ | ❌ | 生产数据库、不希望 AI 触碰 |
| Readonly | ✅ auto | ✅ auto | ❌ denied | 生产机查询专用 |
| Approval | ✅ auto | ⚠️ 审批 | ⚠️ 审批 | 中等风险,每步要确认 |
| Allowlist | ✅ auto | 命中正则 auto,否则审批 | 同左 | 安全关键 + 灵活 |
| Trusted | ✅ auto | ✅ auto | ✅ auto | 开发机、沙箱 |
Trusted 也不是裸跑
即使 Trusted 档位,下列约束仍生效:
- 全局总开关 disabled / armed_until 仍拒绝
- 危险命令黑名单(rm -rf / mkfs / DROP DATABASE 等)仍永拦
- 含 sudo 仍强制走审批
- 敏感路径写入(/etc/shadow 等)仍永拦
工具分类
元工具
任何档位都放行:
list_servers/list_skills/list_runbooksevaluate_skills/get_skill/recall_experience
只读工具
不改动远端状态:
system_info/disk_usage/service_statusport_check/tail_logsftp_list/sftp_readdb_query(SELECT/WITH)redis_scan/redis_get
改动工具
会改动远端状态:
ssh_exec/ssh_exec_script/ssh_exec_multisftp_writedb_execute/db_transactionredis_set/redis_del/redis_execinstall_with_secretrun_runbook
Allowlist 模式
档位选 Allowlist 后可填正则白名单(多条):
^df\s.*
^free\s.*
^systemctl status .*
^docker ps.*判定逻辑:
工具调用进来
↓
命令对每条白名单正则尝试匹配
↓
任一命中 → auto allow
未命中 → 走审批队列适合:"我大概知道 AI 会问什么命令,定一组放行的 + 兜底审批"。
危险命令黑名单
无论档位多松,下列模式永远拦:
Lethal 级(永不可绕)
| 模式 | 含义 |
|---|---|
rm -rf / | 删根 |
mkfs.* | 格式化 |
dd of=/dev/* | 直接写硬盘 |
:(){ :|:& };: | fork bomb |
pg_resetwal | PG 数据损毁 |
redis FLUSHALL | Redis 清库 |
DROP DATABASE | MySQL/PG 删库 |
docker system prune -a --volumes | Docker 数据丢 |
kubeadm reset | k8s 节点重置 |
Severe 级(走审批)
shutdown/rebootsystemctl poweroff1pctl uninstall/1pctl reset- MySQL
SHUTDOWN
自定义扩展
在 AI 策略页 → 危险黑名单 区域 → 编辑:
^rm\s+-rf\s+/data/
^sudo\s+chown.*\s+0\b立即生效,无需重启。
sudo 强制审批
含 sudo 的命令:
- 无视档位(即使 Trusted 也走审批)
- 审批弹窗高亮 sudo 部分
- 写审计
requires_approval: contains_sudo
设计原因:sudo 提权变相消除了"低权 AI 账号"的隔离价值,必须人工把关。
服务器侧 sudo 账号白名单
如果你的 AI 账号是低权账号,但配了几条 NOPASSWD sudo(例如 nginx -s reload),可以在服务器编辑弹窗 → sudo 账号白名单 配置:
nginx -s reload
systemctl restart php-fpm命中白名单的 sudo 命令绕过强制审批(仍走档位策略)。
敏感路径写入永拦
下列路径 无视档位,AI 写入都拒:
/etc/shadow//etc/passwd/etc/sudoers//etc/sudoers.d/*~/.ssh/authorized_keys/~/.ssh/id_**.pem/*.key.env文件/boot/*
仅 sftp_write / ssh_exec(含 echo > / cat > heredoc 等模式)触发。
全局总开关
AI 策略 页顶部:
| 开关 | 行为 |
|---|---|
| Enabled | 按各服务器档位判定 |
| Disabled | 所有 AI 工具调用直接拒(save for 元工具) |
| armed_until | 临时禁用到某时间戳;适合"我下班了,今晚禁 AI" |
IP 白名单 (CIDR)
MCP 接入 签发 Token 时配:
- 默认
127.0.0.1/32 - 仅本机连
- 可加
192.168.0.0/16等私网段 - 不允许公网 CIDR(防误开)
决策流程(再贴一遍)
工具调用 →
全局开关 disabled? → denied
armed_until 未到期? → denied
Token 401 / IP 不在白名单? → denied
服务器对 Token 不可见? → denied
元工具? → auto allow
命中危险黑名单? → blocked(含技能 dangerous_commands)
含 sudo 且不在 sudo 白名单? → 审批队列
按档位:
Disabled → denied
Readonly + 是只读 → auto allow
Readonly + 是改动 → denied
Approval → 审批
Allowlist + 命中白名单 → auto allow
Allowlist + 未命中 → 审批
Trusted → auto allow
执行 → 出口脱敏 → 写审计配置实战
我有一台生产 MySQL
- 服务器档位:Readonly
- 只能跑
db_query(SELECT),AI 想 INSERT / UPDATE 直接拒 - 适合"让 AI 查日志找问题"
我有一台开发机
- 服务器档位:Trusted
- AI 想干啥都行
- 但
rm -rf /仍拦,sudo 仍审批 - 适合快速实验
我有一台堡垒机连内网 K8s
- 服务器档位:Allowlist
- 白名单:
^kubectl (get\|describe\|logs).*/^helm list.* - 兜底审批,AI 想跑
kubectl delete你能拦 - 适合精细但常用
我害怕
- 服务器档位:Approval
- 每步都审批,全程在场
- 适合"刚开始用 Reeve,先观察"
审计联动
所有决策(含 auto allow)都写 审计:
- decision 字段:auto / approved / denied / blocked
- reason 字段:触发的策略 / 黑名单规则 / 技能正则
- 可按 decision 过滤查看
故障排查
| 症状 | 排查 |
|---|---|
| AI 说"我没权限" | 检查档位是否 Disabled / Readonly |
| 我想放行某命令但审批没弹 | 档位可能是 Trusted;改 Approval |
| 危险黑名单误命中 | 调整正则;或加进 sudo 白名单 |
| 时间到了 armed_until 没恢复 | 检查全局总开关 enabled |