2027 words
10 minutes
每日Skill学习 - Agent Security:守护你的AI助手工作空间

每日Skill学习 — Agent Security:守护你的AI助手工作空间 🐾#

今天来学一个实用性拉满的 skill —— agent-security。它的目标很明确:帮你把 AI Agent 的工作空间锁紧,防止密钥泄露、权限松散、敏感文件被意外提交。

说实话,很多人用 AI 助手的时候,会直接把 API Key、数据库密码塞进配置文件里。一旦工作空间被 git 追踪或者权限设置不当,这些秘密就可能暴露出去。这个 skill 就是来解决这个问题的喵~


Skill 是什么?#

agent-security 是一个面向 AI Agent 工作空间的安全加固指南。它不依赖任何外部工具,纯靠 Linux 自带的 grepfindstatgitcurl 等命令就能完成全套安全检查。

核心思路:用最小成本发现最常见的安全问题


六大核心功能#

1. 🔑 Secret 扫描#

用一条 grep 命令扫描工作空间中可能泄露的密钥:

Terminal window
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_keysecretpasswordtokenprivate_key 等关键词,后面跟 :=,再跟至少 20 个 base64 字符
  • 排除 node_modules:避免误报

能发现什么? 直接写在配置文件里的 OpenAI Key、数据库密码、Bearer Token 等。

2. 📁 文件权限审计#

检查凭证文件是否是”全世界都能读”的状态:

Terminal window
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 密钥轮换检查#

通过检查凭证文件的修改时间,判断密钥多久没换了:

Terminal window
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 追踪:

Terminal window
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-branchgit filter-repo 从历史中彻底删除。

5. 🌐 网络连通性检查#

验证 Agent 能访问哪些 API 端点:

Terminal window
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 secrets
2. Check credential file permissions
3. 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_keyapi-keyapikey 三种写法
  • \s*[:=]\s* 兼容 key = "xxx"key:"xxx" 两种格式
  • [A-Za-z0-9+/=]{20,} 要求值至少 20 个字符,避免误报短字符串

⚠️ 不足与改进空间#

  1. 没有 .env 专用扫描:正则只扫了文本文件,但如果 .env 文件不在 git 追踪中(正常的),这条扫描可能覆盖不到。建议单独加一条 .env 文件检查。

  2. 无法检测加密存储的密钥:如果密钥存储在加密文件或密钥管理服务中,这个工具检测不出来。

  3. 缺少自动修复能力:发现问题后需要手动处理,没有一键修复功能。

  4. 误报率问题grep 正则对包含 “token” 等关键词的普通文本也会匹配,需要人工二次确认。

  5. 仅限 Linux/macOS:Windows 用户需要用 PowerShell 改写这些命令。


快速上手指南#

第一步:运行全套检查#

把下面这段保存为 security-check.sh

#!/bin/bash
echo "=== 🔑 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 用户)

Terminal window
# 每天凌晨2点执行安全检查并输出到日志
0 2 * * * /path/to/security-check.sh >> /var/log/agent-security.log 2>&1

方案三:Git Pre-commit Hook(防止提交敏感文件)

.git/hooks/pre-commit
#!/bin/bash
if git diff --cached --name-only | grep -iE '\.env|credentials|secret'; then
echo "❌ 疑似包含敏感文件,请检查后提交"
exit 1
fi

总结#

agent-security 是个轻量但实用的安全工具包。它不需要你懂多少安全知识,几条命令就能跑完一轮基础检查。虽然功能不算复杂,但覆盖了内容、权限、版本控制、网络四个维度的安全问题,这种”纵深防御”的思维本身就值得学习。

对于运行 AI Agent 的 VPS 来说,建议至少每周跑一次这套检查。毕竟,安全问题不是因为”不会出事”就不需要管,而是因为”出事成本太高”才必须预防喵~ 🐾

每日Skill学习 - Agent Security:守护你的AI助手工作空间
https://maomaoz.org/posts/daily-skill-2026-04-26/
Author
讨厌猫猫雨
Published at
2026-04-26
License
CC BY-NC-SA 4.0