OpenClaw 安全运维:自动化巡检与加固
系统安全不能靠运气,定期检查、及时加固才是正道。本文介绍如何使用 healthcheck 技能和 shell 命令实现自动化安全巡检、分析会话日志、及时发现风险,带你搭建安全运维工作流。
01 安全运维自动化是什么?
安全运维自动化 是指通过 OpenClaw 的 healthcheck 技能和 shell 命令,实现系统安全审计、日志分析、异常检测等安全任务的自动化执行。
核心能力: – 🔍 安全审计 — 自动检查系统配置、发现漏洞 – 📊 日志分析 — 会话日志统计、成本分析 – 🚨 异常检测 — 敏感词检测、高成本会话识别 – 📋 报告生成 — 自动生成安全巡检报告
02 为什么需要自动化安全运维?
安全运维的痛点:
安全技能矩阵:
03 安全审计(healthcheck)
准备工作
healthcheck 技能位于:
~/.nvm/versions/node/v22.17.0/lib/node_modules/openclaw/skills/healthcheck/SKILL.md
使用方式: 1. 阅读上述 SKILL.md 文件了解详细用法 2. 根据指导进行系统安全审计和加固 3. 该技能会引导你完成风险评估和修复
核心检查命令
healthcheck 技能会检查以下内容,你也可以手动执行这些命令:
系统层面:
# 操作系统版本和补丁状态
uname -a
cat /etc/os-release
# 开放端口检查
ss -ltnup
# 防火墙配置
sudo ufw status
# 或
sudo firewall-cmd --state
# SSH 配置检查
cat /etc/ssh/sshd_config | grep -E "^(Port|PermitRootLogin|PasswordAuthentication)"
# 磁盘加密状态(Linux)lsblk -f | grep crypt
# 自动更新配置(Ubuntu/Debian)cat /etc/apt/apt.conf.d/20auto-upgrades
OpenClaw 层面:
# OpenClaw 版本检查
openclaw --version
# OpenClaw 状态检查
openclaw status
# 检查 OpenClaw 版本
openclaw --version
实战案例 1:每日安全巡检
#!/bin/bash
# daily-security-check.sh
DATE=$(date +%Y-%m-%d)
REPORT_FILE="/var/log/security-audit-$DATE.md"
cat > $REPORT_FILE << EOF
# 安全巡检报告 ($DATE)
生成时间: $(date)
## 1. 系统信息
### 1.1 操作系统
\`\`\`
$(uname -a)
$(cat /etc/os-release 2>/dev/null | head -5)
\`\`\`
### 1.2 开放端口
\`\`\`
$(ss -ltnup 2>/dev/null || netstat -tlnp 2>/dev/null || echo " 命令不可用 ")
\`\`\`
### 1.3 防火墙状态
\`\`\`
$(sudo ufw status 2>/dev/null || sudo firewall-cmd --state 2>/dev/null || echo " 防火墙未安装或未配置 ")
\`\`\`
### 1.4 SSH 配置
\`\`\`
$(grep -E "^(Port|PermitRootLogin|PasswordAuthentication|PubkeyAuthentication)" /etc/ssh/sshd_config 2>/dev/null || echo "SSH 配置读取失败 ")
\`\`\`
### 1.5 磁盘加密
\`\`\`
$(lsblk -f 2>/dev/null | grep -E "(crypt|LUKS)" || echo " 未发现加密卷 ")
\`\`\`
## 2. OpenClaw 状态
### 2.1 版本信息
\`\`\`
$(openclaw --version 2>/dev/null || echo " 无法获取版本 ")
\`\`\`
### 2.2 运行状态
\`\`\`
$(openclaw status 2>/dev/null || echo " 无法获取状态 ")
\`\`\`
### 2.3 版本信息
\`\`\`
$(openclaw --version 2>/dev/null || echo " 无法获取版本信息 ")
\`\`\`
## 3. 建议操作
- [ ] 检查是否有异常开放端口
- [ ] 确认防火墙规则正确
- [ ] 验证 SSH 配置安全
- [ ] 确保磁盘加密已启用
- [ ] 检查 OpenClaw 是否需要更新
---
* 本报告由自动化脚本生成 *
EOF
echo " 巡检完成: $REPORT_FILE"
配合 cron:
# 每天凌晨 2 点执行
0 2 * * * /path/to/daily-security-check.sh
实战案例 2:系统加固流程
#!/bin/bash
# system-hardening.sh
echo "🔍 正在评估当前安全状态..."
# 1. 收集当前状态
echo ""
echo "📋 当前系统状态:"
echo "================"
echo ""
echo "1. 开放端口:"
ss -ltnup 2>/dev/null || netstat -tlnp 2>/dev/null
echo ""
echo "2. 防火墙状态:"
sudo ufw status 2>/dev/null || sudo firewall-cmd --state 2>/dev/null || echo " 未安装防火墙 "
echo ""
echo "3. SSH 配置:"
grep -E "^(Port|PermitRootLogin|PasswordAuthentication)" /etc/ssh/sshd_config 2>/dev/null
echo ""
echo "4. 系统更新状态:"
if command -v apt &> /dev/null; then
apt list --upgradable 2>/dev/null | head -10
elif command -v yum &> /dev/null; then
yum check-update 2>/dev/null | head -10
fi
# 2. 显示加固建议
echo ""
echo "🔧 建议的加固措施:"
echo "=================="
echo "1. 禁用 root 登录:修改 /etc/ssh/sshd_config 设置 PermitRootLogin no"
echo "2. 使用密钥认证:设置 PasswordAuthentication no"
echo "3. 更改默认 SSH 端口:修改 Port 为非常用端口 "
echo "4. 启用防火墙:sudo ufw enable 或配置 firewalld"
echo "5. 配置自动更新:apt 安装 unattended-upgrades"
echo "6. 启用磁盘加密:使用 LUKS 加密数据分区 "
# 3. 询问是否执行修复
echo ""
read -p " 是否查看详细加固命令?(y/n) " confirm
if ["$confirm" = "y"]; then
echo ""
echo "📖 详细加固命令:"
echo "================"
echo ""
echo "# SSH 加固 "
echo "sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config"
echo "sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config"
echo "sudo systemctl restart sshd"
echo ""
echo "# 防火墙配置(UFW)"
echo "sudo ufw default deny incoming"
echo "sudo ufw default allow outgoing"
echo "sudo ufw allow ssh"
echo "sudo ufw enable"
echo ""
echo "# 自动更新(Ubuntu/Debian)"
echo "sudo apt install unattended-upgrades"
echo "sudo dpkg-reconfigure unattended-upgrades"
fi
04 会话日志分析(session-logs)
基础用法
OpenClaw 会话日志存储在:
~/.openclaw/agents/<agentId>/sessions/*.jsonl
列出所有会话:
for f in ~/.openclaw/agents/*/sessions/*.jsonl; do
date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
size=$(ls -lh "$f" | awk '{print $5}')
echo "$date $size $(basename $f)"
done | sort -r
查找特定日期的会话:
TARGET_DATE="2026-01-06"
for f in ~/.openclaw/agents/*/sessions/*.jsonl; do
head -1 "$f" | jq -r '.timestamp' | grep -q "$TARGET_DATE" && echo "$f"
done
提取用户消息:
jq -r 'select(.message.role == "user") | \
.message.content[]? | \
select(.type == "text") | \
.text' <session>.jsonl
搜索关键词:
jq -r 'select(.message.role == "assistant") | \
.message.content[]? | \
select(.type == "text") | \
.text' <session>.jsonl | rg -i "password"
实战案例 3:成本分析与优化
#!/bin/bash
# cost-analysis.sh
echo "💰 OpenClaw 使用成本分析 "
echo "=========================="
# 查找所有会话目录
SESSIONS_DIRS=$(find ~/.openclaw/agents -name "sessions" -type d 2>/dev/null)
if [-z "$SESSIONS_DIRS"]; then
echo " 未找到会话日志目录 "
exit 1
fi
# 每日成本汇总
echo ""
echo "📅 每日成本:"
for dir in $SESSIONS_DIRS; do
for f in "$dir"/*.jsonl; do
if [-f "$f"]; then
date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
cost=$(jq -s '[.[] | .message.usage.cost.total // 0] | add' "$f" 2>/dev/null)
if [-n "$date"] && [-n "$cost"]; then
echo "$date: \$$cost"
fi
fi
done
done | awk '{a[$1]+=$2} END {for(d in a) print d, "$"a[d]}' | sort -r | head -10
# 统计信息
echo ""
echo "📊 会话统计:"
TOTAL_SESSIONS=0
TOTAL_MESSAGES=0
TOTAL_COST=0
for dir in $SESSIONS_DIRS; do
count=$(ls "$dir"/*.jsonl 2>/dev/null | wc -l)
TOTAL_SESSIONS=$((TOTAL_SESSIONS + count))
for f in "$dir"/*.jsonl; do
if [-f "$f"]; then
msgs=$(jq -s 'length' "$f" 2>/dev/null)
cost=$(jq -s '[.[] | .message.usage.cost.total // 0] | add' "$f" 2>/dev/null)
TOTAL_MESSAGES=$((TOTAL_MESSAGES + msgs))
TOTAL_COST=$(echo "$TOTAL_COST + $cost" | bc -l 2>/dev/null || echo "$TOTAL_COST")
fi
done
done
echo " 总会话数: $TOTAL_SESSIONS"
echo " 总消息数: $TOTAL_MESSAGES"
echo " 总成本: \$$TOTAL_COST"
# 工具使用频率
echo ""
echo "🛠️ 工具使用频率:"
for dir in $SESSIONS_DIRS; do
jq -r '.message.content[]? | select(.type == "toolCall") | .name' \
"$dir"/*.jsonl 2>/dev/null
done | sort | uniq -c | sort -rn | head -10
实战案例 4:异常行为检测
#!/bin/bash
# anomaly-detection.sh
echo "🔍 异常行为检测 "
echo "==============="
# 查找所有会话目录
SESSIONS_DIRS=$(find ~/.openclaw/agents -name "sessions" -type d 2>/dev/null)
if [-z "$SESSIONS_DIRS"]; then
echo " 未找到会话日志目录 "
exit 1
fi
# 1. 检测敏感关键词
SENSITIVE_KEYWORDS=("password" "secret" "token" "key" "credential" "api_key" "private_key")
echo ""
echo "⚠️ 包含敏感词的会话:"
for keyword in "${SENSITIVE_KEYWORDS[@]}"; do
echo ""
echo " 关键词 '$keyword':"
for dir in $SESSIONS_DIRS; do
for f in "$dir"/*.jsonl; do
if [-f "$f"]; then
if jq -r '.message.content[]? | select(.type == "text") | .text' "$f" 2>/dev/null | rg -iq "$keyword"; then
echo " - $(basename $f)"
fi
fi
done
done
done
# 2. 检测高成本会话(超过 $1)echo ""
echo "💸 高成本会话(>\$1):"
for dir in $SESSIONS_DIRS; do
for f in "$dir"/*.jsonl; do
if [-f "$f"]; then
cost=$(jq -s '[.[] | .message.usage.cost.total // 0] | add' "$f" 2>/dev/null)
if [-n "$cost"] && (($(echo "$cost > 1" | bc -l 2>/dev/null || echo "0") )); then
echo "$(basename $f): \$$cost"
fi
fi
done
done
# 3. 检测工具调用异常(如大量 exec)echo ""
echo "🔧 工具调用分析:"
for dir in $SESSIONS_DIRS; do
for f in "$dir"/*.jsonl; do
if [-f "$f"]; then
exec_count=$(jq -r '.message.content[]? | select(.type == "toolCall") | .name' "$f" 2>/dev/null | grep -c "exec")
if ["$exec_count" -gt 50]; then
echo "$(basename $f): $exec_count 次 exec 调用 "
fi
fi
done
done
05 综合实战
案例 5:安全事件响应自动化
#!/bin/bash
# incident-response.sh
INCIDENT_TYPE="$1"
case $INCIDENT_TYPE in
"suspicious-login")
echo "🚨 检测到可疑登录 "
# 1. 收集系统状态
REPORT_FILE="/tmp/incident-report-$(date +%Y%m%d-%H%M%S).md"
cat > $REPORT_FILE << EOF
# 安全事件报告
** 时间:** $(date)
** 类型:** $INCIDENT_TYPE
## 系统状态
### 当前登录用户
\`\`\`
$(who)
\`\`\`
### 最近登录记录
\`\`\`
$(last -10 2>/dev/null || echo " 无法获取登录记录 ")
\`\`\`
### 开放端口
\`\`\`
$(ss -ltnup 2>/dev/null || netstat -tlnp 2>/dev/null)
\`\`\`
### 防火墙状态
\`\`\`
$(sudo ufw status 2>/dev/null || echo " 防火墙状态未知 ")
\`\`\`
## 建议措施
1. 立即检查 /var/log/auth.log 中的异常
2. 如有可疑 IP,立即加入防火墙黑名单
3. 考虑更改 SSH 密钥和密码
4. 检查是否有未授权进程在运行
## 后续行动
- [ ] 完成安全审计
- [ ] 更新防火墙规则
- [ ] 通知安全团队
EOF
echo " 事件报告已生成: $REPORT_FILE"
cat $REPORT_FILE
;;
"config-change")
echo "⚙️ 检测到配置变更 "
echo " 请检查以下配置文件的最近修改:"
echo "- ~/.openclaw/config.json"
echo "- /etc/ssh/sshd_config"
echo "- 防火墙规则 "
;;
*)
echo " 未知事件类型: $INCIDENT_TYPE"
echo " 用法: $0 [suspicious-login|config-change]"
exit 1
;;
esac
案例 6:定期安全报告
#!/bin/bash
# weekly-security-report.sh
WEEK=$(date +%Y-W%U)
REPORT="/var/log/security-weekly-$WEEK.md"
cat > $REPORT << EOF
# 安全周报 ($WEEK)
生成时间: $(date)
## 1. 系统安全状态
### 1.1 系统信息
\`\`\`
$(uname -a)
\`\`\`
### 1.2 开放端口
\`\`\`
$(ss -ltnup 2>/dev/null || netstat -tlnp 2>/dev/null || echo " 命令不可用 ")
\`\`\`
### 1.3 防火墙状态
\`\`\`
$(sudo ufw status 2>/dev/null || sudo firewall-cmd --state 2>/dev/null || echo " 防火墙未安装 ")
\`\`\`
### 1.4 SSH 配置
\`\`\`
$(grep -E "^(Port|PermitRootLogin|PasswordAuthentication)" /etc/ssh/sshd_config 2>/dev/null || echo "SSH 配置读取失败 ")
\`\`\`
### 1.5 磁盘使用情况
\`\`\`
$(df -h 2>/dev/null | head -10)
\`\`\`
## 2. OpenClaw 状态
### 2.1 版本信息
\`\`\`
$(openclaw --version 2>/dev/null || echo " 无法获取版本 ")
\`\`\`
### 2.2 运行状态
\`\`\`
$(openclaw status 2>/dev/null || echo " 无法获取状态 ")
\`\`\`
## 3. 会话活动分析
### 3.1 本周会话统计
EOF
# 统计本周会话
find ~/.openclaw/agents -name "sessions" -type d 2>/dev/null | while read dir; do
echo " 目录: $dir" >> $REPORT
echo " 会话数: $(ls "$dir"/*.jsonl 2>/dev/null | wc -l)" >> $REPORT
echo "" >> $REPORT
done
cat >> $REPORT << EOF
## 4. 建议措施
- [ ] 检查系统更新
- [ ] 审查防火墙规则
- [ ] 验证备份状态
- [ ] 检查磁盘空间
---
* 本报告由自动化脚本生成 *
EOF
echo " 周报已生成: $REPORT"
06 常见问题
Q1: 安全审计需要 root 权限吗?
回答: 部分检查需要,建议:
# 使用 sudo 运行
sudo ./daily-security-check.sh
# 或配置免密 sudo(谨慎使用)# /etc/sudoers:
user ALL=(ALL) NOPASSWD: /usr/bin/ss,/usr/sbin/ufw
Q2: 日志文件太大怎么办?
解决:
# 压缩旧日志
gzip ~/.openclaw/agents/*/sessions/*.jsonl.$(date -d '30 days ago' +%Y%m)*
# 或定期清理
find ~/.openclaw/agents/*/sessions -name "*.jsonl" -mtime +90 -delete
# 查看日志大小
du -sh ~/.openclaw/agents/*/sessions/
Q3: 如何保护敏感日志?
建议:
# 设置权限
chmod 700 ~/.openclaw/agents
chmod 600 ~/.openclaw/agents/*/sessions/*.jsonl
# 检查权限
ls -la ~/.openclaw/agents/
Q4: 如何手动运行 healthcheck 技能?
步骤: 1. 阅读 SKILL.md 文件:bash cat ~/.nvm/versions/node/v22.17.0/lib/node_modules/openclaw/skills/healthcheck/SKILL.md 2. 根据指导进行系统检查 3. 该技能会引导你完成风险评估和加固
07 总结
下一步: – 建立定期安全巡检机制 – 结合告警系统实现实时响应 – 制定安全事件响应预案
本文是 OpenClaw 进阶技能系列第 10 篇(完结)
系列回顾: 1. OpenClaw + Codex:让 AI 帮你写代码 2. 用 OpenClaw 搭建自动化代码审查工作流 3. OpenClaw 批量生图实战:从 Prompt 到成品画廊 4. OpenClaw 语音工作流:听写、合成、通话一条龙 5. OpenClaw 浏览器自动化:解放你的重复操作 6. OpenClaw 笔记自动化:一句话记到所有平台 7. 用 OpenClaw 打造语音智能家居中枢 8. OpenClaw + 飞书:企业自动化完全指南 9. OpenClaw 媒体处理:视频、图片、GIF 全搞定 10. OpenClaw 安全运维:自动化巡检与加固
#OpenClaw #安全运维 #自动化巡检 #日志分析 #系统加固