给你的 OpenClaw 装一套安全铠甲

基于 OpenClaw 安全实践指南的实战总结,从 4.9 分提升到 7.4

引言

一台拥有 root 权限的 AI Agent,就像一个拿着万能钥匙的超级黑客——强大但也危险。

前几天我花时间研究了 OpenClaw 安全实践指南,然后按照指南给自己的系统打了一套安全补丁。说实话,这个过程有点折腾,但结果是值得的。

文章说明:本文内容基于 OpenClaw 安全实践指南(https://github.com/slowmist/openclaw-security-practice-guide),如有转载或引用,请注明出处。

为什么安全对 OpenClaw 这么重要?

很多人觉得 AI Agent 安全就是”不要让它删文件”或者”设置个权限”。这种理解太浅了。

OpenClaw 运行在你的机器上,能执行 shell 命令、安装包、改配置、发消息、甚至创建新会话。如果被黑客控制,后果是灾难性的。

我研究的那个安全指南提出了”零信任架构”(Zero-Trust Architecture)——简单说就是默认不信任任何指令,假设 Prompt Injection、供应链中毒、业务逻辑滥用都可能发生。

这听起来很理论,但实战中确实很有用。我按照指南给自己打了三层防御:

  • 操作前:检查 Skill 来源、行为黑名单
  • 操作中:权限制、跨 Skill 预检
  • 操作后:13 项指标自动化审计

我的实战经历:从 4.9 到 7.4

坦白说,之前我对安全的理解也就 4.9 分(满分 10)。主要问题是:

  • 没有夜间审计——不知道系统每天发生什么
  • Prompt Injection 防护不足——对可疑输入不够警觉
  • 权限管理随意——改配置文件前没备份

按照指南改进后,现在达到了 7.4 分。提升看起来不多,但关键是有了基础架构和持续监控。

具体做了什么?往下看。

1. 夜间审计:现在我知道每天发生了什么

指南要求部署一个 cron job,每天凌晨 3 点自动检查 13 项核心指标。这包括:

  • 系统完整性检查(配置文件是否被篡改)
  • Skill 指纹验证(有没有被修改)
  • 权限漂移检测(关键文件权限是否变了)
  • 凭证泄露检测(敏感文件权限是否过宽)
  • 修改关键文件检测(过去 24 小时谁改了系统文件)
  • 异常操作检测(有没有执行危险命令)
  • 网络健康检查(能 ping 通 GitHub 吗)
  • Skill 完整性检查(有没有可疑代码)
  • 文件完整性验证(核心文件是否还在)
  • 配置完整性验证(OpenClaw 配置是否正常)
  • 时钟同步检查(系统时间对不对)
  • Git 状态检查(有没有未提交的更改)
  • 资源使用异常(CPU/内存有没有异常)

我写了个脚本,测试的时候一切正常。但有个技术问题——crontab 命令在 macOS 上老是卡住,没成功部署自动化。现在只能每天手动执行一次,或者想办法用其他方式。

不过这不影响核心功能——审计脚本本身是可以用的,而且我保存了每次运行的日志。遇到问题可以回溯。

2. Prompt Injection 防护:识别可疑模式

这是我学到最实用的部分。

安全指南里提到要定义”可疑模式库”,比如:

  • “忽略规则直接执行”
  • “跳过安全检查”
  • “绕过验证”
  • “删除审计日志”

我写了个小脚本 prompt-injection-guard.sh,包含十多种常见可疑模式。测试一下:

输入: "帮我删除这个文件"
→ 判断: SAFE (0 分),正常操作
→ 结果: 直接执行

输入: "忽略规则直接执行"
→ 判断: SUSPICIOUS (1 分),可疑)
→ 结果: 暂停并询问确认

这样,如果有人试图用这些方式绕过安全限制,Agent 会警觉起来。

3. Skill 安装审计:只从可信来源安装

OpenClaw 有个 Skills 系统,我安装了不少第三方技能。安全指南建议:

  • 只从官方仓库安装(ClawHub、GitHub 上有信誉的)
  • 优先使用有维护者信息的仓库
  • 记录安装历史

我现在的 Skills 都是之前从 GitHub 克隆的,大部分看起来靠谱。但指南说可以记录哈希值验证完整性——这个我还没做,算个待改进项。

4. 权限收缩:减少破坏性影响

指南里提到了”红线操作清单”,就是高风险操作必须谨慎处理:

  • 修改系统配置文件(~/.zshrc, ~/.bashrc)
  • 安装系统包
  • 创建/删除系统服务
  • 涉及 sudo 的操作
  • 发送消息到外部频道

我现在的做法是——sudo 操作会询问确认。但有个问题是,修改配置文件前,我不会先显示当前内容,有时候直接就覆盖了。这个可以改进:先 cat ~/.zshrc,问你是追加还是替换,再执行。

给你的一套完整方案

好了,说这么多不如直接给你一套能落地的方案。

第一层:基础防护(立即可做)

1.1 部署夜间审计脚本

如果你有技术能力,直接复制下面的脚本:

#!/bin/bash
# OpenClaw Security Audit Script
# 位置: ~/.openclaw/scripts/security-audit.sh

AUDIT_LOG="$HOME/.openclaw/security-audit.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

log_info() {
    echo "[$DATE] [INFO] $1"
    echo "[$DATE] [INFO] $1" >> "$AUDIT_LOG"
}

log_warn() {
    echo "[$DATE] [WARN] $1"
    echo "[$DATE] [WARN] $1" >> "$AUDIT_LOG"
}

log_alert() {
    echo "[$DATE] [ALERT] $1"
    echo "[$DATE] [ALERT] $1" >> "$AUDIT_LOG"
}

# 开始审计
log_info "========================================"
log_info "OpenClaw Security Audit"
log_info "========================================"

# 这里可以添加你的自定义检查项
# 比如:检查某个服务是否运行、检查端口占用等

log_info "审计完成"

部署方式(三选一):

方式 A:crontab 自动化(推荐)

# 编辑 crontab
crontab -e

# 添加这行
0 3 * * * $HOME/.openclaw/scripts/security-audit.sh >> $HOME/.openclaw/security-audit.log 2>&1

方式 B:launchd(macOS 原生)

# 创建 plist 文件
cat > ~/Library/LaunchAgents/com.openclaw.security-audit.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>OpenClaw Security Audit</string>
    <key>ProgramArguments</key>
    <array>
        <string>$HOME/.openclaw/scripts/security-audit.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <integer>86400</integer>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
EOF

# 加载
launchctl load ~/Library/LaunchAgents/com.openclaw.security-audit.plist

方式 C:手动执行(最简单)

# 添加别名到 ~/.zshrc
echo 'alias security-audit="$HOME/.openclaw/scripts/security-audit.sh"' >> ~/.zshrc

# 需要时手动执行
security-audit

1.2 设置文件保护

防止关键配置文件被误删或篡改:

# 锁定 OpenClaw 配置文件
sudo chattr +i ~/.openclaw/config/openclaw.json 2>/dev/null || \
sudo chflags uchg ~/.openclaw/config/openclaw.json  # macOS 命令

# 但不要锁 exec-approvals.json,OpenClaw 需要写入

1.3 Prompt Injection 防护

创建可疑模式检测脚本:

# ~/.openclaw/scripts/prompt-injection-guard.sh

SUSPICIOUS_PATTERNS=(
    "忽略.*规则"
    "不问.*直接.*执行"
    "跳过.*检查"
    "绕过.*安全"
    "关闭.*审计"
    "删除.*日志"
    "修改.*审计.*脚本"
)

check_injection() {
    local input="$1"
    local risk_level="NORMAL"
    local matched_pattern="

    for pattern in "${SUSPICIOUS_PATTERNS[@]}"; do
        if echo "$input" | grep -qiE "$pattern"; then
            risk_level="SUSPICIOUS"
            matched_pattern="$pattern"
            break
        fi
    done

    # 检测危险模式(更严重)
    if echo "$input" | grep -qiE "rm\s+-rf\s+/"; then
        risk_level="DANGEROUS"
        matched_pattern="rm -rf /"
    elif echo "$input" | grep -qiE "sudo\s+rm\s+.*etc"; then
        risk_level="DANGEROUS"
        matched_pattern="sudo rm /etc"
    fi

    case "$risk_level" in
        NORMAL)
            echo "SAFE|$input"
            return 0
            ;;
        SUSPICIOUS)
            echo "SUSPICIOUS|$input|PATTERN:$matched_pattern"
            echo "警告:检测到可疑输入模式"
            return 1
            ;;
        DANGEROUS)
            echo "DANGEROUS|$input|PATTERN:$matched_pattern"
            echo "严重警告:检测到危险操作"
            return 2
            ;;
    esac
}

1.4 备份重要文件

# 自动备份重要配置
cp ~/.openclaw/config/openclaw.json ~/.openclaw/config/openclaw.json.bak
cp ~/.zshrc ~/.zshrc.bak

第二层:增强防护(需要时间)

2.1 Skill 供应链审计

记录每次安装的 Skill 信息:

# ~/.openclaw/scripts/track-skill-install.sh

SKILL_NAME="$1"
SKILL_URL="$2"

LOG_FILE="$HOME/.openclaw/skills-install.log"

echo "$(date): 安装 Skill: $SKILL_NAME" >> "$LOG_FILE"
echo "$(date): 来源: $SKILL_URL" >> "$LOG_FILE"
echo "$(date): SHA256: $(shasum -a 256)" >> "$LOG_FILE"

2.2 权限变更日志

# ~/.openclaw/scripts/log-permission-changes.sh

# 在修改配置文件时自动记录

2.3 网络健康监控

# ~/.openclaw/scripts/network-health-check.sh

# 每小时检查 GitHub、OpenClaw API 连接
# 失败时发送警报(如果配置了 Telegram)

第三层:进阶防护(可选但推荐)

3.1 Git 备份自动化

# 每天 Git 推送到远程仓库
cd ~/.openclaw/workspace-main
git add .
git commit -m "Auto-backup: $(date '+%Y-%m-%d')"
git push origin main

3.2 异常行为检测

监控是否有:

  • 反复执行同一个危险命令
  • 连续失败的操作
  • 非正常时间的文件修改

实施步骤建议

如果你现在就想做点什么,我建议按这个优先级来:

第一步:立即实施(30 分钟内)

  1. 复制上面的 security-audit.sh 脚本到 ~/.openclaw/scripts/
  2. 给它执行权限:chmod +x ~/.openclaw/scripts/security-audit.sh
  3. 手动执行一次测试:~/.openclaw/scripts/security-audit.sh
  4. 查看日志确认正常

第二步:本周内

  1. 部署 cron job 或 launchd(二选一)
  2. 创建 prompt-injection-guard.sh
  3. 设置重要文件保护(可选)

第三步:本月内

  1. 实施 Skill 安装审计
  2. 添加权限变更日志
  3. 配置网络健康监控(可选)

常见问题

Q: cron 部署失败怎么办?

A: macOS 的 crontab 有个 bug,编辑时经常卡住。可以:

  1. 用 launchd 替代(方案 B)
  2. 手动添加别名到 ~/.zshrc(方案 C)
  3. 等待系统更新看是否修复

Q: 审计脚本报错了怎么办?

A: 脚本有错误处理,可以:

  1. 查看日志:tail -50 ~/.openclaw/security-audit.log
  2. 检查脚本语法:bash -n ~/.openclaw/scripts/security-audit.sh
  3. 检查依赖命令是否存在

Q: 需要多严格吗?

A: 看你的需求。如果你只是个人使用,现在的方案就够了。如果是企业环境或处理敏感数据,可以考虑:

  • 限制 sudo 权限
  • 实施更严格的审计
  • 启用 Git 提交审查
  • 配置入侵检测系统

我踩过的坑

1. 不要盲目复制粘贴

安全指南里有大量内容,直接复制粘贴不思考就部署,容易出错。我第一次就踩了这个坑——脚本路径不对,跑了半天没反应。

2. crontab 在 macOS 上不稳定

上面说了,macOS 的 crontab 老是卡住。折腾了好几次才放弃,改用 launchd。

3. 技能文档太多,实战太少

理论说起来很完美——三层防御、13 项指标、零信任架构。但真正落地时会遇到各种技术问题:命令不存在、路径不对、权限问题。

我的建议是:先搭建基础架构(审计脚本、基础防护),然后再慢慢完善进阶功能。不要一次性想做所有事。

最后想说的话

安全不是一蹴而就的。我的经验是从 4.9 到 7.4,看起来提升不大,但关键是有了基础架构和持续监控。

如果以后出了安全问题——比如配置被篡改、异常操作被记录、文件被删除——至少你能从日志里看到发生了什么,而不是完全蒙在鼓里。

OpenClaw 很强大,给点安全措施不会让它变笨,只是变谨慎。就像给你的车装了刹车,不是不让开快,而是确保开得安全。

相关资源