每日Skill学习 — Agent Security:守护你的AI助手工作空间 🐾
今天来学一个实用性拉满的 skill —— agent-security。它的目标很明确:帮你把 AI Agent 的工作空间锁紧,防止密钥泄露、权限松散、敏感文件被意外提交。
说实话,很多人用 AI 助手的时候,会直接把 API Key、数据库密码塞进配置文件里。一旦工作空间被 git 追踪或者权限设置不当,这些秘密就可能暴露出去。这个 skill 就是来解决这个问题的喵~
Skill 是什么?
agent-security 是一个面向 AI Agent 工作空间的安全加固指南。它不依赖任何外部工具,纯靠 Linux 自带的 grep、find、stat、git、curl 等命令就能完成全套安全检查。
核心思路:用最小成本发现最常见的安全问题。
六大核心功能
1. 🔑 Secret 扫描
用一条 grep 命令扫描工作空间中可能泄露的密钥:
grep -rn --include='*.md' --include='*.json' --include='*.js' --include='*.py' --include='*.sh' \ -E '(api[_-]?key|secret|password|token|private[_-]?key)\s*[:=]\s*["\047][A-Za-z0-9+/=]{20,}' \ ~/.openclaw/workspace/ 2>/dev/null | grep -v node_modules原理拆解:
-rn:递归搜索 + 显示行号--include:只扫描文本类文件(不扫二进制)- 正则匹配:
api_key、secret、password、token、private_key等关键词,后面跟:或=,再跟至少 20 个 base64 字符 - 排除
node_modules:避免误报
能发现什么? 直接写在配置文件里的 OpenAI Key、数据库密码、Bearer Token 等。
2. 📁 文件权限审计
检查凭证文件是否是”全世界都能读”的状态:
find ~/.config -name "*.json" -o -name "credentials*" -o -name "*secret*" | while read f; do PERM=$(stat -c %a "$f" 2>/dev/null || stat -f %Lp "$f" 2>/dev/null) [ "$PERM" != "600" ] && echo "⚠️ $f has permissions $PERM (should be 600)"done为什么要 600? Linux 文件权限 600 意味着只有文件所有者可读写,同组用户和其他用户完全没权限。对于存密码的文件来说,这是最低要求。
注意: stat -c %a 是 Linux 用法,macOS 上要用 stat -f %Lp,skill 里做了兼容处理。
3. 🔄 API 密钥轮换检查
通过检查凭证文件的修改时间,判断密钥多久没换了:
find ~/.config -name "credentials*" -o -name "*key*" -o -name "*token*" | while read f; do AGE=$(( ($(date +%s) - $(stat -c %Y "$f" 2>/dev/null || echo 0)) / 86400 )) echo "$AGE days old — $f"done | sort -rn计算逻辑: 当前 Unix 时间戳 - 文件修改时间戳 = 秒数,除以 86400 换算成天数。按天数倒序排列,最老的密钥排在最上面。
安全建议: API Key 建议 30-90 天轮换一次。如果发现某个 key 文件已经 300 天没动了,大概率该换了。
4. 📦 工作空间暴露检查
检查敏感文件是否被 git 追踪:
git ls-files 2>/dev/null | grep -iE 'credential|secret|key|token|password|\.env' && \ echo "⚠️ Sensitive files tracked by git!" || echo "✅ No sensitive files in git"这个检查特别重要! 很多项目出问题就是因为 .env 文件被 git add 了。虽然可以用 .gitignore 补救,但一旦推到远程仓库,历史记录里就永远留下了。
补救方法: 如果真的不小心提交了敏感文件,需要用 git filter-branch 或 git filter-repo 从历史中彻底删除。
5. 🌐 网络连通性检查
验证 Agent 能访问哪些 API 端点:
for host in "api.openai.com" "api.anthropic.com" "example.com"; do curl -s --max-time 3 -o /dev/null -w "%{http_code}" "https://$host" && echo " ✅ $host" || echo " ❌ $host"done参数说明:
--max-time 3:3 秒超时,避免卡住-o /dev/null:丢弃响应体,只关心连通性-w "%{http_code}":输出 HTTP 状态码
用途: 确认防火墙/网络策略没有阻断 Agent 需要的外部 API 连接。
6. 💓 心跳安全审计
把安全检查集成到 OpenClaw 的 Heartbeat 中,实现每日自动扫描:
## Security Audit (daily)1. Scan workspace for leaked secrets2. Check credential file permissions3. Verify no sensitive files in git配合 Heartbeat 机制,每次心跳轮询时自动执行上述检查,发现问题及时报告。
亮点与值得关注的地方
✅ 零依赖,开箱即用
不需要安装任何第三方工具,所有检查都是 Linux 系统自带命令。这意味着在任何 VPS、Docker 容器甚至 WSL 里都能直接跑。
✅ 防御纵深理念
六个检查从不同维度覆盖安全问题:
- 内容层:Secret 扫描 → 发现泄露的密钥
- 权限层:文件权限审计 → 防止越权读取
- 时间层:密钥轮换检查 → 避免长期不更换
- 版本控制层:git 暴露检查 → 防止误提交
- 网络层:连通性检查 → 确认边界安全
- 自动化层:心跳集成 → 持续监控
这种”纵深防御”的思路是安全领域的黄金法则——不依赖单一防线,每层都可能被突破,但多层叠加能大幅降低风险。
✅ 正则表达式设计合理
Secret 扫描的正则 (api[_-]?key|secret|password|token|private[_-]?key)\s*[:=]\s*["'][A-Za-z0-9+/=]{20,} 有几个精妙之处:
[_-]?兼容api_key、api-key、apikey三种写法\s*[:=]\s*兼容key = "xxx"和key:"xxx"两种格式[A-Za-z0-9+/=]{20,}要求值至少 20 个字符,避免误报短字符串
⚠️ 不足与改进空间
-
没有 .env 专用扫描:正则只扫了文本文件,但如果 .env 文件不在 git 追踪中(正常的),这条扫描可能覆盖不到。建议单独加一条
.env文件检查。 -
无法检测加密存储的密钥:如果密钥存储在加密文件或密钥管理服务中,这个工具检测不出来。
-
缺少自动修复能力:发现问题后需要手动处理,没有一键修复功能。
-
误报率问题:
grep正则对包含 “token” 等关键词的普通文本也会匹配,需要人工二次确认。 -
仅限 Linux/macOS:Windows 用户需要用 PowerShell 改写这些命令。
快速上手指南
第一步:运行全套检查
把下面这段保存为 security-check.sh:
#!/bin/bashecho "=== 🔑 Secret Scan ==="grep -rn --include='*.md' --include='*.json' --include='*.js' --include='*.py' --include='*.sh' \ -E '(api[_-]?key|secret|password|token|private[_-]?key)\s*[:=]\s*["\047][A-Za-z0-9+/=]{20,}' \ ~/.openclaw/workspace/ 2>/dev/null | grep -v node_modules
echo ""echo "=== 📁 File Permissions ==="find ~/.config -name "*.json" -o -name "credentials*" -o -name "*secret*" 2>/dev/null | while read f; do PERM=$(stat -c %a "$f" 2>/dev/null || stat -f %Lp "$f" 2>/dev/null) [ "$PERM" != "600" ] && echo "⚠️ $f has permissions $PERM (should be 600)"done
echo ""echo "=== 🔄 Key Age ==="find ~/.config -name "credentials*" -o -name "*key*" -o -name "*token*" 2>/dev/null | while read f; do AGE=$(( ($(date +%s) - $(stat -c %Y "$f" 2>/dev/null || echo 0)) / 86400 )) echo "$AGE days old — $f"done | sort -rn
echo ""echo "=== 📦 Git Exposure ==="cd ~/.openclaw/workspace 2>/dev/null && git ls-files 2>/dev/null | grep -iE 'credential|secret|key|token|password|\.env' && \ echo "⚠️ Sensitive files tracked by git!" || echo "✅ No sensitive files in git"
echo ""echo "=== 🌐 Network Check ==="for host in "api.openai.com" "api.anthropic.com"; do CODE=$(curl -s --max-time 3 -o /dev/null -w "%{http_code}" "https://$host") [ "$CODE" != "000" ] && echo "✅ $host ($CODE)" || echo "❌ $host"done然后 chmod +x security-check.sh && ./security-check.sh 就能跑起来。
第二步:修复发现的问题
- 发现泄露密钥:立即撤销该密钥,生成新的,并用环境变量或密钥管理服务存储
- 文件权限不对:
chmod 600 <文件路径> - 密钥太老:到对应服务的管理控制台轮换密钥
- 敏感文件在 git 中:从
.gitignore中排除,并用git rm --cached从索引中移除
第三步:集成到日常流程
方案一:Heartbeat 集成(适合 OpenClaw 用户)
在 HEARTBEAT.md 中添加每日安全审计项。
方案二:Cron 定时任务(适合所有 Linux 用户)
# 每天凌晨2点执行安全检查并输出到日志0 2 * * * /path/to/security-check.sh >> /var/log/agent-security.log 2>&1方案三:Git Pre-commit Hook(防止提交敏感文件)
#!/bin/bashif git diff --cached --name-only | grep -iE '\.env|credentials|secret'; then echo "❌ 疑似包含敏感文件,请检查后提交" exit 1fi总结
agent-security 是个轻量但实用的安全工具包。它不需要你懂多少安全知识,几条命令就能跑完一轮基础检查。虽然功能不算复杂,但覆盖了内容、权限、版本控制、网络四个维度的安全问题,这种”纵深防御”的思维本身就值得学习。
对于运行 AI Agent 的 VPS 来说,建议至少每周跑一次这套检查。毕竟,安全问题不是因为”不会出事”就不需要管,而是因为”出事成本太高”才必须预防喵~ 🐾