Install
openclaw skills install @thomaszhou22/danger-guardopenclaw skills install @thomaszhou22/danger-guard拦截危险命令执行,要求 sudo 密码确认,发送飞书/邮件告警。
当用户要求执行以下类型操作时自动激活:
Linux/macOS:
rm -rf /rm -rf /*rm -rf / --no-preserve-rootrm -rf ~rm -rf ~/rm -rf /Usersrm -rf /homefind / -type f -exec rm {} +find . -type f -deletemv / /dev/nullmv /home/user/* /dev/nullWindows:
format C:format D:rd /s /q C:\rd /s /q C:\Windowsrmdir /s /q C:\del /s /q /f C:\del /s /q C:\*.*deltree /y C:\*.*attrib -s -h -r C:\Windows\system32\*.* /s /dLinux/macOS:
dd if=/dev/zero of=/dev/sdadd if=/dev/urandom of=/dev/sdadd if=/dev/zero of=/dev/sd*mkfs.ext4 /dev/sda1mkfs.xfs /dev/sdamkfs -t ext4 /dev/sdacommand > /dev/sdaecho "data" | dd of=/dev/sdayes > /dev/sdaWindows:
diskpart cleandiskpart clean allClear-Disk -Number X -RemoveDataGet-Disk X | Clear-Disk -RemoveDataLinux/macOS:
chmod -R 777 /chmod -R 000 /chown -R root:root /chown -R nobody /sudo /bin/bashsudo su -sudo -iWindows:
takeown /f C:\* /r /d yicacls C:\* /grant everyone:F /tLinux/macOS:
:(){:|:&};: (fork bomb)fork while fork (macOS)shutdown -h nowshutdown nowreboothaltinit 0poweroffkill -9 -1 (杀死所有进程)history | shcat /dev/random > /dev/sdaWindows:
shutdown /s /t 0shutdown /r /t 0taskkill /f /im *Get-Process | Stop-Process -Force%0|%0 (batch fork bomb)while($true) { start-process } (PowerShell fork bomb)Linux/macOS:
curl http://... | shcurl http://... | bashwget http://... | shwget http://... -O- | shcurl http://... | sudo shWindows:
powershell Invoke-WebRequest http://... | Invoke-Expressioniwr http://... | iexpowershell (New-Object Net.WebClient).DownloadString('http://...') | iexgit push --forcegit push -fgit push --force-with-leasegit push --mirrorgit reset --hardgit clean -fdgit clean -fdxgit checkout -- .git branch -Dgit stash dropgit stash cleargit reflog expiregit gc --prune=nowdocker system prune -a --volumes -fdocker system prune -afdocker system prune --volumesdocker volume prune -fdocker volume prune -adocker container prune -fdocker image prune -adocker image prune -afdocker rm $(docker ps -aq)docker rmi $(docker images -q)docker volume rm $(docker volume ls -q)docker-compose down -vdocker-compose down --volumesDROP TABLEDROP DATABASEDROP SCHEMATRUNCATE TABLEDELETE FROM table_name (无 WHERE 子句)UPDATE table_name SET ... (无 WHERE 子句)npm install -g <package> (全局安装)pip install <package> (非虚拟环境)docker run --privilegedsudo <any command> (需要确认)/etc/、/var/、/usr/、/bin/、/sbin/ 的修改立即停止,不执行任何命令。
从 memory/danger-guard-config.json 读取:
os: 操作系统类型sudo_hash: sudo 密码哈希alert_email: 告警邮箱(可选)email_method: 邮件方式(none/native/resend)macOS:
🛡️ Danger Guard 拦截
命令: <command>
风险等级: 一级危险
此操作可能导致数据永久丢失或系统损坏。
请输入开机密码确认:
确认 [密码]
Windows:
🛡️ Danger Guard 拦截
命令: <command>
风险等级: 一级危险
此操作可能导致数据永久丢失或系统损坏。
请输入管理员密码确认:
确认 [密码]
sudo_hash 对比飞书告警(立即):
🚨 Danger Guard 拦截告警
时间: 2026-07-07 01:40
命令: rm -rf /
来源: 飞书 (ou_xxx)
风险等级: 一级危险
状态: 已拦截,等待验证
如果这不是你的操作,账号可能已被盗用。
回复「账号被盗」启动紧急协议。
邮件告警(如配置): 使用配置的邮件方式发送告警。
用户回复「账号被盗」或「account-hacked」时:
memory/security-breach-YYYY-MM-DD.md首次激活时执行:
🛡️ Danger Guard 首次配置
检测到系统: macOS / Windows / Linux
请输入你的 sudo/管理员密码(用于验证危险操作):
密码 [你的密码]
是否需要配置邮件告警?(可选)
拦截危险命令时,除了飞书通知外,还会发邮件给你。
1. 不需要邮件
2. 原生邮件(macOS 用 mail,Windows 用 PowerShell)
3. Resend API(免费每月 3000 封)
回复 1/2/3
是否需要安装 Shell Wrapper?(可选)
Shell Wrapper 会在你直接在终端敲命令时也拦截危险操作。
不只是通过 AI 工具,而是所有 shell 命令都会被保护。
保护范围:rm、mv、find、dd、mkfs、chmod、chown、git、docker 等
⚠️ 注意:所有受保护的命令都会要求输入 sudo 密码,包括安全操作(如 rm file.txt)。
如果你经常用这些命令,可能会觉得繁琐。
1. 不需要 Shell Wrapper(只保护通过 AI 执行的命令)
2. 安装 Shell Wrapper(系统级全面保护)
回复 1/2
如果选择 2(安装 Shell Wrapper),自动执行:
configs/shell-wrapper/danger-guard 到 ~/.local/bin/danger-guardchmod +x~/.zshrc 或 ~/.bashrc 中添加 PATH 和别名~/.danger-guard.jsonsource ~/.zshrc 使配置生效保存配置
将密码 SHA256 哈希和配置保存到 memory/danger-guard-config.json
测试告警 发送测试邮件(如配置了邮件)确认正常工作。
以下路径和命令不触发拦截:
/tmp/、%TEMP% 目录.Trash/、回收站操作git clean、git reset(Git 有版本控制保护)npm install(项目级,非全局)所有拦截事件记录到 memory/danger-guard-logs.md:
## 2026-07-07
### 01:40 - 拦截
- 系统: macOS
- 命令: rm -rf /
- 来源: feishu (ou_xxx)
- 风险等级: 一级
- 验证: 通过
- 告警: 飞书 ✅
Danger Guard 不仅适用于 OpenClaw,还覆盖所有 AI 编码工具。
在项目根目录创建 .claude/settings.json:
{
"permissions": {
"deny": [
"Bash(rm -rf*)",
"Bash(format*)",
"Bash(dd if=*)",
"Bash(mkfs*)",
"Bash(git push --force*)",
"Bash(git reset --hard*)",
"Bash(docker system prune*)",
"Bash(curl * | sh)",
"Bash(wget * | bash)"
]
}
}
或在 CLAUDE.md 中添加:
## 安全规则
- 禁止执行任何危险命令(rm -rf、format、dd、mkfs 等)
- 禁止 git push --force、git reset --hard
- 禁止 docker prune 操作
- 执行 sudo 命令前必须确认用户意图
在项目根目录创建 AGENTS.md:
# Agent Instructions
## Safety Rules
- NEVER execute destructive commands: rm -rf, format, dd, mkfs
- NEVER force push or reset git history
- NEVER run docker prune operations
- ALWAYS confirm before modifying system files
- ALWAYS warn about data loss before DELETE/DROP/TRUNCATE
在项目根目录创建 .cursorrules 或 .cursor/rules:
# Safety Rules
You are a careful coding assistant. Follow these rules:
## Forbidden Operations
- Do NOT execute: rm -rf, format, dd, mkfs, chmod -R 777
- Do NOT force push to any branch
- Do NOT reset git history (--hard)
- Do NOT run docker prune commands
- Do NOT execute SQL without WHERE clause
## Required Confirmations
- Before any destructive operation, explain the risks
- Ask for explicit confirmation before executing
- Suggest safer alternatives when possible
创建一个 shell wrapper 拦截所有危险命令:
安装到 ~/.local/bin/danger-guard:
#!/bin/bash
# Danger Guard Shell Wrapper
CMD="$*"
# 危险命令模式匹配
DANGEROUS_PATTERNS=(
"rm -rf /"
"rm -rf /*"
"rm -rf ~"
"format C:"
"dd if=/dev/zero"
"dd if=/dev/urandom"
"mkfs."
"git push --force"
"git push -f"
"git reset --hard"
"docker system prune -a"
"DROP TABLE"
"DROP DATABASE"
"TRUNCATE"
)
for pattern in "${DANGEROUS_PATTERNS[@]}"; do
if [[ "$CMD" == *"$pattern"* ]]; then
echo "🛡️ Danger Guard 拦截!"
echo "检测到危险命令: $CMD"
echo ""
echo "输入 sudo 密码确认执行:"
read -s -p "密码: " password
echo
# 验证密码(对比哈希)
HASH=$(echo -n "$password" | shasum -a 256 | awk '{print $1}')
STORED_HASH=$(cat ~/.config/danger-guard/hash 2>/dev/null)
if [[ "$HASH" == "$STORED_HASH" ]]; then
echo "✅ 验证通过,执行命令..."
eval "$CMD"
else
echo "❌ 密码错误,命令已拦截"
exit 1
fi
exit 0
fi
done
# 非危险命令,直接执行
exec "$@"
配置方法:
# 1. 创建目录
mkdir -p ~/.local/bin
mkdir -p ~/.config/danger-guard
# 2. 保存脚本
# 将上面的脚本保存为 ~/.local/bin/danger-guard
# 3. 添加执行权限
chmod +x ~/.local/bin/danger-guard
# 4. 保存密码哈希
echo -n "你的sudo密码" | shasum -a 256 | awk '{print $1}' > ~/.config/danger-guard/hash
# 5. 添加到 PATH(在 .bashrc 或 .zshrc 中)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
使用方法:
# 通过 wrapper 执行命令
danger-guard rm -rf /path/to/danger
# 或设置别名
alias rm='danger-guard rm'
alias git='danger-guard git'
alias docker='danger-guard docker'
在项目 .git/hooks/pre-push 中添加:
#!/bin/bash
# 阻止 force push
if git rev-parse --verify HEAD@{1} >/dev/null 2>&1; then
# 检查是否有 force push
if [[ "$1" == *"--force"* ]] || [[ "$1" == *"-f"* ]]; then
echo "🛡️ Danger Guard: Force push 已拦截"
echo "如果确实需要,请使用: git push --force-with-lease"
exit 1
fi
fi
多层保护机制
推荐配置顺序
sudo 密码以 SHA256 哈希存储
邮件告警是可选功能
一级危险命令必须验证
Shell Wrapper 是最可靠的保护