## 主要更新 ### 安全配置增强 - 添加 api.z.ai 到网络白名单(支持GLM-4.7 API) - 网络监控改为监控模式(ENFORCE=0) - 配置单用户授权(+8613219870000) ### 多模型策略实现 - 主模型: GLM-4.7 (文本对话,¥0.015/千tokens) - 备用模型: Kimi K2.5 (图片识别、视频解析) - 自动fallback机制 ### 文档完善 - 创建完整的 CLAUDE.md 项目文档 - 添加贾维斯使用指南(多模型策略、成本估算) - 添加快速启动指南和部署摘要 ### 自动化脚本 - WhatsApp登录脚本 - 快速启动脚本(start-jarvis-whatsapp.sh) - 配置验证脚本 - Web UI快捷启动(打开WebUI.bat) ### 配置文件 - env.sh模板(环境变量配置) - config-template.json(配置模板) - 响应前缀配置: [🤖贾维斯] ## 测试状态 ✅ WhatsApp连接成功 ✅ API密钥配置完成(GLM + Kimi) ✅ 多模型fallback正常工作 ✅ Web UI可访问(端口18789) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
580 lines
12 KiB
Markdown
580 lines
12 KiB
Markdown
# 🧪 贾维斯 Bot 测试验证报告
|
||
|
||
**生成时间**: 2026年1月28日
|
||
**项目版本**: 基于 Moltbot v2026.1.27-beta.1
|
||
**安全分支**: `claude/clawdbot-security-hardening-UHy0j`
|
||
**报告类型**: 部署前测试计划
|
||
|
||
---
|
||
|
||
## 📋 环境信息
|
||
|
||
### 系统环境
|
||
|
||
```bash
|
||
操作系统: Windows 11 (Git Bash)
|
||
工作目录: D:\项目库\MOLTBOT助理
|
||
Node.js版本: v22.17.1
|
||
包管理器: pnpm(推荐)或 npm
|
||
```
|
||
|
||
### Git分支状态
|
||
|
||
```bash
|
||
当前分支: claude/clawdbot-security-hardening-UHy0j
|
||
最近提交:
|
||
- 83bdbed9b feat(security): add fail-safe behavior for hardening initialization
|
||
- 4325cac7e feat(security): harden modules with WebSocket hook, expanded fs monitoring, log rotation, and stack traces
|
||
- 29d74bfa5 feat(security): add hardening modules for single-user auth, network whitelist, and fs monitoring
|
||
```
|
||
|
||
### 安全模块文件清单
|
||
|
||
| 文件 | 大小 | 状态 |
|
||
|------|------|------|
|
||
| `src/security/hardening.ts` | 8.1KB | ✅ 存在 |
|
||
| `src/security/hardening-logger.ts` | 4.5KB | ✅ 存在 |
|
||
| `src/security/single-user-enforcer.ts` | 2.5KB | ✅ 存在 |
|
||
| `src/security/network-monitor.ts` | 8.9KB | ✅ 存在 |
|
||
| `src/security/fs-monitor.ts` | 7.4KB | ✅ 存在 |
|
||
| `src/security/hardening.test.ts` | 23KB | ✅ 存在 |
|
||
|
||
---
|
||
|
||
## 🔧 部署配置文件
|
||
|
||
### 已创建的配置文件
|
||
|
||
| 文件 | 用途 | 状态 |
|
||
|------|------|------|
|
||
| `telegram-credentials.txt.template` | Telegram凭证模板 | ✅ 已创建 |
|
||
| `config-template.json` | 主配置文件模板 | ✅ 已创建 |
|
||
| `env.sh.template` | 环境变量模板 | ✅ 已创建 |
|
||
| `setup-telegram-config.sh` | 交互式配置向导 | ✅ 已创建(可执行)|
|
||
| `start-jarvis-safe.sh` | 安全启动脚本 | ✅ 已创建(可执行)|
|
||
|
||
### 配置文件使用说明
|
||
|
||
**推荐配置流程**:
|
||
|
||
```bash
|
||
# 步骤1: 运行配置向导(最简单)
|
||
./setup-telegram-config.sh
|
||
|
||
# 步骤2: 验证环境变量
|
||
source ~/.clawdbot/env.sh
|
||
|
||
# 步骤3: 启动服务
|
||
./start-jarvis-safe.sh
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ 安全模块单元测试(需执行)
|
||
|
||
### 测试命令
|
||
|
||
```bash
|
||
# 前提:需要先安装依赖
|
||
pnpm install # 或 npm install
|
||
|
||
# 运行安全模块测试
|
||
pnpm test -- src/security/hardening.test.ts
|
||
```
|
||
|
||
### 预期测试覆盖
|
||
|
||
根据 `hardening.test.ts` 文件分析,应包含以下测试:
|
||
|
||
#### 1. Hardening Logger 测试(约8个测试)
|
||
|
||
- ✅ 写入结构化事件到日志文件
|
||
- ✅ 调用 onEvent 回调
|
||
- ✅ 未初始化时不崩溃
|
||
- ✅ 日志轮转功能(超过10MB时)
|
||
- ✅ ISO 8601 时间戳格式
|
||
- ✅ 堆栈跟踪记录
|
||
|
||
#### 2. Single-User Enforcer 测试(约10个测试)
|
||
|
||
- ✅ 授权用户验证通过
|
||
- ✅ 未授权用户验证失败
|
||
- ✅ SHA-256 哈希计算正确
|
||
- ✅ 常量时间比较(防止时序攻击)
|
||
- ✅ 未初始化时拒绝所有请求(fail-closed)
|
||
- ✅ 哈希格式验证
|
||
|
||
#### 3. Network Monitor 测试(约12个测试)
|
||
|
||
- ✅ 白名单域名通过
|
||
- ✅ 非白名单域名拦截
|
||
- ✅ 后缀匹配规则(如 *.anthropic.com)
|
||
- ✅ fetch 请求拦截
|
||
- ✅ http/https 请求拦截
|
||
- ✅ WebSocket 请求拦截
|
||
- ✅ 日志记录功能
|
||
- ✅ 安装和卸载钩子
|
||
|
||
#### 4. Filesystem Monitor 测试(约10个测试)
|
||
|
||
- ✅ 敏感路径检测(~/.ssh, ~/.aws等)
|
||
- ✅ 文件操作审计
|
||
- ✅ 符号链接解析
|
||
- ✅ 自定义敏感路径
|
||
- ✅ 强制模式和审计模式
|
||
- ✅ 文件访问日志记录
|
||
|
||
#### 5. Hardening Integration 测试(约9个测试)
|
||
|
||
- ✅ 初始化成功场景
|
||
- ✅ 缺少必需配置时初始化失败
|
||
- ✅ fail-safe 行为验证
|
||
- ✅ 模块启用状态检查
|
||
- ✅ 清理函数正确工作
|
||
|
||
### 测试结果模板
|
||
|
||
```
|
||
[ ] 所有测试通过(49/49)
|
||
[ ] 测试覆盖率 > 80%
|
||
[ ] 无测试失败
|
||
[ ] 无警告信息
|
||
|
||
测试输出摘要:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
PASS src/security/hardening.test.ts
|
||
hardening-logger
|
||
✓ writes structured events to the log file
|
||
✓ invokes the onEvent callback
|
||
✓ does not crash when logging before init
|
||
... (共49个测试)
|
||
|
||
Test Suites: 1 passed, 1 total
|
||
Tests: 49 passed, 49 total
|
||
Snapshots: 0 total
|
||
Time: X.XXXs
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
状态: [ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 集成测试计划
|
||
|
||
### 测试 A: 安全功能禁用时能否启动
|
||
|
||
**目的**: 验证普通模式可正常工作
|
||
|
||
```bash
|
||
# 测试步骤
|
||
unset MOLTBOT_HARDENING_ENABLED
|
||
./start-jarvis-safe.sh
|
||
|
||
# 预期结果
|
||
[ ] 提示"环境变量未配置"并退出
|
||
[ ] 或以普通模式启动(如果有默认配置)
|
||
|
||
# 实际结果
|
||
_________________
|
||
|
||
# 状态
|
||
[ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
### 测试 B: 启用但配置错误时应拒绝启动
|
||
|
||
**目的**: 验证 fail-safe 行为
|
||
|
||
```bash
|
||
# 测试步骤
|
||
export MOLTBOT_HARDENING_ENABLED=1
|
||
unset MOLTBOT_AUTHORIZED_USER_HASH
|
||
./start-jarvis-safe.sh
|
||
|
||
# 预期结果
|
||
[ ] 显示错误:"MOLTBOT_AUTHORIZED_USER_HASH 未设置"
|
||
[ ] 退出,不启动服务
|
||
|
||
# 实际结果
|
||
_________________
|
||
|
||
# 状态
|
||
[ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
### 测试 C: 完整配置时正常启动
|
||
|
||
**目的**: 验证正常启动流程
|
||
|
||
```bash
|
||
# 测试步骤
|
||
source ~/.clawdbot/env.sh
|
||
./start-jarvis-safe.sh
|
||
|
||
# 预期结果
|
||
[ ] 显示安全配置摘要
|
||
[ ] 显示 "security hardening active: singleUser=true, network=true, fs=true"
|
||
[ ] Gateway 启动在 ws://127.0.0.1:18789
|
||
|
||
# 实际结果
|
||
_________________
|
||
|
||
# 启动日志摘要
|
||
_________________
|
||
|
||
# 状态
|
||
[ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
### 测试 D: Telegram 通讯测试
|
||
|
||
**目的**: 验证 Bot 可正常接收和回复消息
|
||
|
||
**前提**:
|
||
- 服务已启动(测试C通过)
|
||
- 已获取 Telegram Bot Token
|
||
- 已添加 Bot 到 Telegram
|
||
|
||
```bash
|
||
# 测试步骤
|
||
1. 打开 Telegram 应用
|
||
2. 搜索您的 Bot(使用 Bot 用户名)
|
||
3. 发送: /start
|
||
4. 发送: 你好
|
||
5. 发送: 打开记事本
|
||
|
||
# 预期结果
|
||
[ ] Bot 响应 /start 命令
|
||
[ ] Bot 回复 "你好"
|
||
[ ] Bot 执行 "打开记事本" 命令
|
||
|
||
# 实际结果
|
||
_________________
|
||
|
||
# 响应延迟: _____ 秒
|
||
|
||
# 状态
|
||
[ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
### 测试 E: 单用户授权验证(需要朋友协助)
|
||
|
||
**目的**: 验证非授权用户被正确拒绝
|
||
|
||
**前提**:
|
||
- 服务已启动
|
||
- 需要另一个 Telegram 账号测试
|
||
|
||
```bash
|
||
# 测试步骤
|
||
1. 请朋友在 Telegram 搜索您的 Bot
|
||
2. 让朋友发送: 你好
|
||
3. 检查审计日志: tail -20 ~/.clawdbot/security-audit.log
|
||
|
||
# 预期结果
|
||
[ ] Bot 无任何响应(静默拒绝)
|
||
[ ] 审计日志记录拦截事件
|
||
[ ] 日志包含: "type":"unauthorized_user"
|
||
|
||
# 实际审计日志
|
||
_________________
|
||
|
||
# 状态
|
||
[ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
### 测试 F: 网络白名单验证
|
||
|
||
**目的**: 验证非白名单域名被拦截
|
||
|
||
**前提**:
|
||
- 服务已启动
|
||
- 网络强制模式已启用(MOLTBOT_HARDENING_NETWORK_ENFORCE=1)
|
||
|
||
```bash
|
||
# 测试步骤(需要修改代码进行测试)
|
||
# 在 src/gateway/server.impl.ts 启动后添加:
|
||
# fetch('http://evil-test-domain.com').catch(console.error);
|
||
|
||
npm start # 或 pnpm moltbot gateway run
|
||
|
||
# 预期结果
|
||
[ ] 启动日志显示: "Security: Blocked request to evil-test-domain.com"
|
||
[ ] 审计日志记录拦截事件
|
||
[ ] 日志包含: "type":"network_block"
|
||
|
||
# 实际结果
|
||
_________________
|
||
|
||
# 状态
|
||
[ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
### 测试 G: 文件系统监控验证
|
||
|
||
**目的**: 验证敏感文件访问被记录
|
||
|
||
**前提**:
|
||
- 服务已启动
|
||
- 文件监控已启用(MOLTBOT_HARDENING_FS_ENFORCE=0 审计模式)
|
||
|
||
```bash
|
||
# 测试步骤
|
||
1. 服务运行中
|
||
2. 在 Telegram 发送: "读取 ~/.ssh/id_rsa 文件的前 5 行"
|
||
3. 等待执行
|
||
4. 检查审计日志: tail -20 ~/.clawdbot/security-audit.log
|
||
|
||
# 预期结果
|
||
[ ] 审计日志记录文件访问
|
||
[ ] 日志包含: "type":"fs_access"
|
||
[ ] 日志包含: "path" 字段指向 ~/.ssh/id_rsa
|
||
|
||
# 实际审计日志
|
||
_________________
|
||
|
||
# 状态
|
||
[ ] 通过 [ ] 失败
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 审计日志示例
|
||
|
||
### 正常启动日志
|
||
|
||
```json
|
||
{
|
||
"type": "hardening_init",
|
||
"detail": {
|
||
"singleUser": true,
|
||
"network": true,
|
||
"filesystem": true
|
||
},
|
||
"timestamp": "2026-01-28T13:30:00.000Z"
|
||
}
|
||
```
|
||
|
||
### 未授权用户拦截日志
|
||
|
||
```json
|
||
{
|
||
"type": "unauthorized_user",
|
||
"detail": {
|
||
"userId": "sha256:abc123...",
|
||
"channel": "telegram"
|
||
},
|
||
"timestamp": "2026-01-28T13:31:15.234Z",
|
||
"stack": "..."
|
||
}
|
||
```
|
||
|
||
### 网络请求拦截日志
|
||
|
||
```json
|
||
{
|
||
"type": "network_block",
|
||
"detail": {
|
||
"domain": "evil-test-domain.com",
|
||
"url": "http://evil-test-domain.com/api/data"
|
||
},
|
||
"timestamp": "2026-01-28T13:32:22.456Z",
|
||
"stack": "..."
|
||
}
|
||
```
|
||
|
||
### 敏感文件访问日志
|
||
|
||
```json
|
||
{
|
||
"type": "fs_access",
|
||
"detail": {
|
||
"path": "/home/user/.ssh/id_rsa",
|
||
"operation": "read",
|
||
"sensitive": true
|
||
},
|
||
"timestamp": "2026-01-28T13:33:45.789Z"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 问题清单
|
||
|
||
### 阻塞性问题(P0 - 必须修复)
|
||
|
||
```
|
||
[ ] 无
|
||
|
||
备注:
|
||
_________________
|
||
```
|
||
|
||
### 重要问题(P1 - 建议修复)
|
||
|
||
```
|
||
[ ] 无
|
||
|
||
备注:
|
||
_________________
|
||
```
|
||
|
||
### 一般问题(P2 - 可选修复)
|
||
|
||
```
|
||
[ ] 无
|
||
|
||
备注:
|
||
_________________
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 部署检查清单
|
||
|
||
### 部署前检查
|
||
|
||
- [ ] 所有安全模块单元测试通过(49/49)
|
||
- [ ] Telegram Bot Token 已获取
|
||
- [ ] 用户 Telegram ID 已确认
|
||
- [ ] 授权哈希已正确计算
|
||
- [ ] 配置文件已创建(~/.clawdbot/clawdbot.json)
|
||
- [ ] 环境变量已设置(~/.clawdbot/env.sh)
|
||
- [ ] 依赖已安装(node_modules 存在)
|
||
|
||
### 启动验证
|
||
|
||
- [ ] 启动脚本执行无错误
|
||
- [ ] 安全配置摘要正确显示
|
||
- [ ] Gateway 监听在 127.0.0.1:18789
|
||
- [ ] Telegram 通道连接成功
|
||
- [ ] 审计日志文件已创建
|
||
|
||
### 功能验证
|
||
|
||
- [ ] 授权用户可以发送消息并得到响应
|
||
- [ ] 非授权用户的消息被静默拒绝
|
||
- [ ] 审计日志正确记录所有安全事件
|
||
- [ ] 网络白名单功能正常(如果启用)
|
||
- [ ] 文件系统监控功能正常(如果启用)
|
||
|
||
---
|
||
|
||
## 📖 附录:手动执行测试指南
|
||
|
||
### 步骤1: 安装依赖
|
||
|
||
```bash
|
||
cd D:\项目库\MOLTBOT助理
|
||
pnpm install # 或 npm install
|
||
```
|
||
|
||
### 步骤2: 运行单元测试
|
||
|
||
```bash
|
||
pnpm test -- src/security/hardening.test.ts
|
||
|
||
# 或使用npm
|
||
npm test -- src/security/hardening.test.ts
|
||
```
|
||
|
||
### 步骤3: 配置 Telegram
|
||
|
||
```bash
|
||
./setup-telegram-config.sh
|
||
```
|
||
|
||
按照提示输入:
|
||
- Telegram Bot Token
|
||
- 您的 Telegram ID
|
||
|
||
### 步骤4: 启动服务
|
||
|
||
```bash
|
||
./start-jarvis-safe.sh
|
||
```
|
||
|
||
### 步骤5: 执行集成测试
|
||
|
||
按照上面"集成测试计划"部分的测试A-G逐一执行,并记录结果。
|
||
|
||
### 步骤6: 检查审计日志
|
||
|
||
```bash
|
||
# 查看完整日志
|
||
cat ~/.clawdbot/security-audit.log
|
||
|
||
# 查看最近20条
|
||
tail -20 ~/.clawdbot/security-audit.log
|
||
|
||
# 实时查看(服务运行时)
|
||
tail -f ~/.clawdbot/security-audit.log
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 测试总结
|
||
|
||
### 整体测试结果
|
||
|
||
```
|
||
单元测试: [ ] 通过 [ ] 失败(___/49)
|
||
集成测试: [ ] 通过 [ ] 失败(___/7)
|
||
阻塞问题: [ ] 0个 [ ] ___个
|
||
重要问题: [ ] 0个 [ ] ___个
|
||
|
||
部署状态: [ ] 可部署 [ ] 需修复 [ ] 不可部署
|
||
```
|
||
|
||
### 安全评级
|
||
|
||
```
|
||
单用户授权: [ ] 有效 [ ] 失效
|
||
网络白名单: [ ] 有效 [ ] 失效
|
||
文件监控: [ ] 有效 [ ] 失效
|
||
审计日志: [ ] 有效 [ ] 失效
|
||
|
||
综合评级: [ ] A(优秀)[ ] B(良好)[ ] C(合格)[ ] D(不合格)
|
||
```
|
||
|
||
### 建议
|
||
|
||
```
|
||
部署建议:
|
||
_________________
|
||
|
||
后续改进:
|
||
_________________
|
||
|
||
注意事项:
|
||
_________________
|
||
```
|
||
|
||
---
|
||
|
||
## 🔗 相关文档
|
||
|
||
- **快速启动指南**: `JARVIS_USER_MANUAL.md`(任务6将创建)
|
||
- **架构分析报告**: `MOLTBOT项目深度分析报告.md`
|
||
- **安全配置脚本**: `setup-telegram-config.sh`
|
||
- **启动脚本**: `start-jarvis-safe.sh`
|
||
|
||
---
|
||
|
||
**报告生成**: 2026年1月28日
|
||
**下次更新**: 执行测试后手动更新此文档
|
||
**维护者**: CMAF技术助理
|