Files
ottttto_safe-exec/README-detail.md

498 lines
9.9 KiB
Markdown
Raw Normal View History

# SafeExec 详细文档
> 完整的使用指南、配置说明、开发文档和常见问题
**主文档:** [README.md](README.md) | **变更日志:** [CHANGELOG.md](CHANGELOG.md)
---
## 📑 目录
- [使用指南](#使用指南)
- [工作原理](#工作原理)
- [批准工作流](#批准工作流)
- [风险等级详解](#风险等级详解)
- [全局控制](#全局控制)
- [高级配置](#高级配置)
- [环境变量](#环境变量)
- [自定义规则](#自定义规则)
- [非交互式模式](#非交互式模式)
- [开发文档](#开发文档)
- [架构设计](#架构设计)
- [文件说明](#文件说明)
- [API 参考](#api-参考)
- [贡献指南](#贡献指南)
- [常见问题](#常见问题)
- [故障排查](#故障排查)
- [最佳实践](#最佳实践)
- [性能优化](#性能优化)
---
## 使用指南
### 工作原理
SafeExec 通过以下步骤保护你的系统:
```
1. 命令拦截
2. 模式匹配
3. 风险评估
4. 决策
├── 安全 → 直接执行
└── 危险 → 请求批准
```
#### 架构组件
```
~/.openclaw/safe-exec/
├── pending/ # 待处理的批准请求
│ └── req_*.json # 请求详情文件
├── safe-exec-rules.json # 规则配置文件
└── safe-exec-audit.log # 审计日志
~/.openclaw/safe-exec-known-*.txt # 监控追踪文件
```
### 批准工作流
#### 1. 危险命令检测
当 Agent 尝试执行危险命令时:
```
🚨 **危险操作检测 - 命令已拦截**
**风险等级:** CRITICAL
**命令:** `rm -rf /tmp/test`
**原因:** 递归删除,使用 force 标志
**请求 ID:** `req_1769938492_9730`
此命令需要用户批准才能执行。
**批准方法:**
1. 在终端运行: `safe-exec-approve req_1769938492_9730`
2. 或者: `safe-exec-list` 查看所有待处理请求
**拒绝方法:**
`safe-exec-reject req_1769938492_9730`
```
#### 2. 批准请求
```bash
# 方法 1: 使用请求 ID
safe-exec-approve req_1769938492_9730
# 方法 2: 列出并批准最近的请求
safe-exec-list
# 输出所有待处理的请求,然后使用 ID 批准
```
#### 3. 命令执行
批准后,命令会执行并记录到审计日志。
### 风险等级详解
#### 🔴 CRITICAL危急
系统破坏性命令,需要明确批准:
- `rm -rf /` - 删除根目录
- `dd if=/dev/zero` - 磁盘覆盖
- `mkfs.*` - 格式化文件系统
- `:(){ :|:& };:` - Fork bomb
- `> /dev/sda` - 直接写入磁盘
#### 🟠 HIGH高危
可能导致数据丢失或系统变动的命令:
- `rm -rf` (非根目录) - 递归删除
- `chmod 777` - 设置全局可写权限
- `curl | bash` - 管道下载到 shell
- 写入 `/etc/`, `/boot/`, `/sys/` - 系统目录修改
- `wget | sh` - 下载并执行脚本
#### 🟡 MEDIUM中危
需要特权或影响系统的操作:
- `sudo` - 使用特权执行
- `iptables`, `firewall-cmd`, `ufw` - 防火墙修改
- `systemctl` - 服务管理
- `crontab -e` - 定时任务编辑
#### 🟢 LOW低危
相对安全的操作,可能无需批准:
- `ls`, `cat`, `grep` - 读取操作
- `cp`, `mv` (非系统目录) - 文件操作
- `mkdir`, `touch` - 创建操作
- `cd`, `pwd` - 导航操作
### 全局控制
#### 启用/禁用 SafeExec
**对话式:**
```
Enable SafeExec # 启用
Disable SafeExec # 禁用
```
**脚本式:**
```bash
~/.openclaw/skills/safe-exec/safe-exec.sh --enable
~/.openclaw/skills/safe-exec/safe-exec.sh --disable
```
**环境变量:**
```bash
export SAFE_EXEC_DISABLE=1 # 禁用
unset SAFE_EXEC_DISABLE # 启用
```
#### 查看状态
```bash
# 查看待处理的请求
safe-exec-list
# 查看审计日志(最近 50 条)
tail -n 50 ~/.openclaw/safe-exec-audit.log
# 查看配置
cat ~/.openclaw/safe-exec-rules.json
```
---
## 高级配置
### 环境变量
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `SAFE_EXEC_DISABLE` | 全局禁用 SafeExec | 未设置 |
| `OPENCLAW_AGENT_CALL` | 标识 Agent 调用(自动检测) | 自动 |
| `SAFE_EXEC_AUTO_CONFIRM` | 自动批准 LOW/MEDIUM 风险 | 未设置 |
| `SAFEXEC_CONTEXT` | 用户上下文信息 | 空 |
**使用示例:**
```bash
# 自动批准低中风险命令
export SAFE_EXEC_AUTO_CONFIRM=1
# 在 Agent 中使用(自动设置)
export OPENCLAW_AGENT_CALL=1
# 完全禁用
export SAFE_EXEC_DISABLE=1
```
### 自定义规则
编辑 `~/.openclaw/safe-exec-rules.json`
```json
{
"enabled": true,
"rules": [
{
"pattern": "docker rm.*-f",
"risk": "medium",
"reason": "强制删除 Docker 容器"
},
{
"pattern": "kubectl delete",
"risk": "high",
"reason": "删除 Kubernetes 资源"
}
]
}
```
### 非交互式模式
在非交互式环境(如 Agent 调用)中:
1. **TTY 检测**SafeExec 自动检测是否在交互式终端
2. **环境检测**:检测 `OPENCLAW_AGENT_CALL` 环境变量
3. **智能跳过**:在非交互式环境中跳过二次确认
```bash
# Agent 调用时自动启用非交互模式
export OPENCLAW_AGENT_CALL=1
```
---
## 开发文档
### 架构设计
```
┌─────────────┐
│ Agent │
└──────┬──────┘
┌──────────────────┐
│ safe-exec.sh │ ← 主入口
└──────┬───────────┘
┌────────────────────┐
│ 风险评估引擎 │
│ - 模式匹配 │
│ - 上下文分析 │
└──────┬─────────────┘
┌───┴────┐
│ 危险? │
└───┬────┘
是 │ │ 否
│ └──────────→ 直接执行
┌──────────────┐
│ 请求批准 │
│ - 写入 pending│
│ - 通知用户 │
└──────────────┘
```
### 文件说明
#### 核心脚本
| 文件 | 功能 |
|------|------|
| `safe-exec.sh` | 主执行脚本,命令拦截和风险评估 |
| `safe-exec-approve.sh` | 批准请求的脚本 |
| `safe-exec-reject.sh` | 拒绝请求的脚本 |
| `safe-exec-list.sh` | 列出待处理的请求 |
| `safe-exec-check-pending.sh` | 检查待处理请求 |
#### 文档文件
| 文件 | 说明 |
|------|------|
| `README.md` | 主要文档,快速开始 |
| `README-detail.md` | 本文档,详细说明 |
| `CHANGELOG.md` | 版本变更日志 |
| `SKILL.md` | ClawdHub skill 描述 |
| `CONTRIBUTING.md` | 贡献指南 |
#### 配置和数据
| 文件/目录 | 说明 |
|-----------|------|
| `~/.openclaw/safe-exec-rules.json` | 规则配置 |
| `~/.openclaw/safe-exec-audit.log` | 审计日志 |
| `~/.openclaw/safe-exec/pending/` | 待处理请求 |
### API 参考
#### safe-exec.sh
```bash
# 执行命令
safe-exec.sh "command"
# 启用/禁用
safe-exec.sh --enable
safe-exec.sh --disable
safe-exec.sh --status
```
#### safe-exec-approve.sh
```bash
# 批准请求
safe-exec-approve.sh <request_id>
# 查看详情
safe-exec-approve.sh --list
```
#### safe-exec-list.sh
```bash
# 列出所有待处理请求
safe-exec-list.sh
# 仅显示 CRITICAL 级别
safe-exec-list.sh --critical
```
### 贡献指南
#### 开发环境设置
```bash
# 1. Fork 并克隆仓库
git clone https://github.com/OTTTTTO/safe-exec.git
cd safe-exec
# 2. 创建功能分支
git checkout -b feature/my-feature
# 3. 测试修改
./test-safeexec.sh
# 4. 提交更改
git commit -m "feat: Add my feature"
# 5. 推送并创建 PR
git push origin feature/my-feature
```
#### 代码规范
- Bash 脚本遵循 [ShellCheck](https://www.shellcheck.net/) 建议
- 文档使用 Markdown 格式
- 提交信息遵循 [Conventional Commits](https://www.conventionalcommits.org/)
#### 测试
```bash
# 运行所有测试
./test-safeexec.sh
# 运行特定测试
./test-regression.sh
./test-context-aware.sh
```
---
## 常见问题
### 故障排查
#### Q: SafeExec 没有拦截命令
**A:** 检查以下几点:
1. 是否已启用?
```bash
~/.openclaw/skills/safe-exec/safe-exec.sh --status
```
2. 是否被环境变量禁用?
```bash
echo $SAFE_EXEC_DISABLE
```
3. 命令是否在白名单中?
#### Q: 批准命令后没有执行
**A:** 可能的原因:
1. 请求已超时5分钟
2. 命令语法错误
3. 权限不足
查看审计日志:
```bash
tail -f ~/.openclaw/safe-exec-audit.log
```
#### Q: 如何重置所有状态?
**A:** 删除数据文件:
```bash
rm -rf ~/.openclaw/safe-exec/
rm ~/.openclaw/safe-exec-*
```
### 最佳实践
#### 1. 生产环境使用
```bash
# 启用自动确认低中风险操作
export SAFE_EXEC_AUTO_CONFIRM=1
# 定期备份审计日志
cp ~/.openclaw/safe-exec-audit.log ~/.backup/
```
#### 2. 多用户环境
为每个用户配置独立的规则文件:
```bash
export SAFE_EXEC_RULES_FILE="/home/user/.safe-exec-rules.json"
```
#### 3. 与其他工具集成
**与 sudo 集成:**
```bash
# 在 sudoers 中添加
Defaults secure_path = /usr/local/bin:/usr/bin:/bin
```
**与日志系统集成:**
```bash
# 将审计日志发送到 rsyslog
tail -f ~/.openclaw/safe-exec-audit.log | logger -t safeexec
```
### 性能优化
#### 减少延迟
```bash
# 使用更快的磁盘存储
export SAFE_EXEC_DIR="/dev/shm/safe-exec"
```
#### 定期清理
```bash
# 清理过期的 pending 请求
find ~/.openclaw/safe-exec/pending/ -mtime +1 -delete
# 压缩旧日志
logrotate ~/.openclaw/safe-exec-audit.log
```
---
## 附录
### 相关资源
- [OpenClaw 文档](https://docs.openclaw.ai/)
- [ClawdHub 市场](https://www.clawhub.ai/skills)
- [Bash 最佳实践](https://github.com/koalaman/shellcheck)
### 社区
- **GitHub Issues**: https://github.com/OTTTTTO/safe-exec/issues
- **Discussions**: https://github.com/OTTTTTO/safe-exec/discussions
- **Email**: 731554297@qq.com
### 许可证
MIT License - 详见 [LICENSE](LICENSE)
---
**最后更新:** 2026-02-01
**维护者:** OTTTTTO
**版本:** v0.3.3