Linux Security Guardian

通过SSH MCP自动执行多客户端Linux服务器安全审计与修复,每日凌晨1点定时运行。

已扫描
适合谁
IT安全运维人员、云服务器管理员
不适合谁
无SSH MCP环境的用户、不熟悉命令行操作的初学者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
中等(★★☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @cyber-bye/linux-security-guardian

Skill 说明

命令、参数、文件名以原文为准

Linux Security Guardian

⚡ SSH MCP — 必需依赖项

SSH MCP 是强制依赖。代理必须具备 SSH MCP 工具才能正常运行。

不支持本地或旧版回退。所有操作均通过 SSH MCP 执行。

前置条件

# SSH MCP 服务器必须正在运行且可访问
dependency: ssh_mcp
status: required    # 若不可用 → 中止执行,并通知所有者

服务器配置文件

每个目标服务器都需要在 SSH MCP 数据库中保存一个连接配置。请在 SERVER_PROFILE.md 中进行配置:

ssh_mcp:
  connection_id: "<从 SSH 连接列表中获取的 ID、名称或别名>"   # 保存的连接 ID、名称或别名
  # 或使用内联配置:
  # host: "<服务器 IP>"
  # port: 22
  # username: "<用户名>"
  # key_path: "</path/to/key>"

审计模块

所有 18 个模块均通过 SSH MCP 执行命令。每个模块文件中列出的命令将被封装为 ssh_exec(op="run", sessionId, command)

模块命令 → ssh_exec(op="run", sessionId, command="模块命令")
         → ssh_exec(op="logs", commandId=cmdId)
         → 解析输出结果

CVE 检测

外部 CVE 检测在守护主机上本地运行,使用 curl 请求 CISA KEV、OSV.dev 和 NVD API。

使用时需指定 --client--server 参数,将结果写入各服务器对应的路径:

bash cve/cve-scan.sh --client "client-1" --server "server-01"

# 结果写入路径:
#   cve/<client>/<server>/scan-results/YYYY-MM-DD.md
#   cve/<client>/<server>/advisories/<CVE-ID>.md

执行步骤:

# 1. SSH MCP:ssh_exec(op="run", sessionId, command="dpkg-query -W ...") → 本地保存
# 2. 读取 cve/<client>/<server>/scan-results/installed-packages.txt
# 3. curl 获取 CISA KEV → 筛选 Linux 类型条目 → 写入漏洞通告
# 4. curl POST 到 OSV.dev 批量接口 → 匹配已安装包 → 写入漏洞通告
# 5. 可选:curl 调用 NVD API → 交叉验证 → 写入漏洞通告

多客户架构

该守护程序管理 多个客户,每个客户拥有独立的服务器集群。

SERVER_PROFILE.md 文件中定义 ## Client: 分组。审计过程将遍历全部客户。

SERVER_PROFILE.md
├── ## Client: client-1 (7 台服务器)
│   ├── server-01
│   ├── server-02
│   └── ... server-07
├── ## Client: client-2 (N 台服务器) ← 根据需要添加
│   └── ...
└── ## Client: [NEXT-CLIENT]

所有路径均以 <client>/<server>/ 为前缀:

  • 发现记录:audit/results/<client>/<server>/<severity>/
  • 操作记录:actions/<client>/<server>/auto-done/
  • CVE 信息:cve/<client>/<server>/advisories/
  • 报告文件:reports/<client>/<server>/daily/

目的

该代理通过 SSH MCP 实现对 Linux 服务器安全的全自动化管理。

每天凌晨 1 点 IST(印度标准时间):

  • 遍历所有客户 → 所有服务器
  • 通过 SSH MCP 执行完整安全审计
  • 对比已安装软件包与 CVE 数据源
  • 对安全类问题自动修复
  • 关键问题进入待确认队列,需所有者确认
  • 向客户和服务器级别发送每日邮件报告

操作决策矩阵

最核心的部分——代理的行为策略与请求确认优先级:

问题类型CVSS / 严重等级处理方式
CVE — 严重≥ 9.0立即发送邮件警报 + 加入确认队列
CVE — 高7.0–8.9加入确认队列 + 包含在报告中
CVE — 中4.0–6.9包含在报告中 + 提供漏洞说明
CVE — 低< 4.0仅在报告中作为信息提示
CVE — KEV(CISA)任意视为严重 — 立即警报 + 必须在规定时间内确认
CVE — KEV + 勒索软件相关任意🔥 最高优先级 — 立即警报 + 尽快确认
内核更新可用任意确认后方可打补丁
仅安全类软件包更新任意确认后方可更新
SSH:PermitRootLogin yes严重警报 + 需确认修复
SSH:PasswordAuth yes警报 + 需确认修复
SSH:端口 22仅提供建议
空密码账户严重自动锁定立即执行
未知的 root-uid 账户严重警报 + 需确认锁定
长期未使用账户 > 90 天警报 + 需确认锁定
/tmp 全局可写自动修复(chmod)
系统目录全局可写警报 + 需确认修复
未知的 SUID 二进制文件仅警报(由所有者决定处理)
登录失败激增 > 20 次/小时立即警报
新发现未知的 cron 任务立即警报
需要修改防火墙规则任意必须确认后才执行
开放意外端口警报 + 需确认关闭
服务:不必要的进程运行警报 + 需确认停止
SSL 证书有效期 < 30 天警告警报
SSL 证书已过期严重立即警报
磁盘使用率 > 85%警告警报
磁盘使用率 > 95%严重立即警报
auditd 未运行自动启动 + 发送警报
fail2ban 未运行自动启动 + 发送警报
日志文件存在可疑条目警报并附带内容提取

审计模块

模块检查内容SSH MCP 命令
01-system操作系统、内核版本、运行时间、上次重启时间、硬件信息ssh_exec(op="run", sessionId, command="uname -a; cat /etc/*release")
02-users用户账户、root权限、sudo配置、空密码账户、长期未使用账户ssh_exec(op="run", sessionId, command="cat /etc/passwd; cat /etc/shadow; ...")
03-sshsshd_config 完整审计 — 20+ 项检查ssh_exec(op="run", sessionId, command="cat /etc/ssh/sshd_config")
04-auth登录历史、失败登录记录、PAM 配置文件ssh_exec(op="run", sessionId, command="last; cat /var/log/auth.log")
05-services正在运行的服务、不必要的服务、已失败的系统单元ssh_exec(op="run", sessionId, command="systemctl list-units ...")
06-packages待更新包、安全更新数量ssh_exec(op="run", sessionId, command="apt list --upgradable 2>/dev/null")
07-cveCVE 检测 — 通过 SSH MCP 远程执行 + API 接口调用ssh_exec(op="run", sessionId, command="dpkg-query -W ...; curl ...")
08-network开放端口、监听服务、活跃连接ssh_exec(op="run", sessionId, command="ss -tulpn; netstat -tulpn")
09-firewalliptables/nftables/ufw 规则审计ssh_exec(op="run", sessionId, command="iptables-save 2>/dev/null")
10-filesystemSUID/SGID 文件、全局可写文件、/tmp 目录、粘滞位设置ssh_exec(op="run", sessionId, command="find / -perm -4000 ...")
11-kernelsysctl 安全参数 — 15+ 项检查ssh_exec(op="run", sessionId, command="sysctl -a 2>/dev/null")
12-logsauth.log、syslog、kern.log — 异常行为扫描ssh_exec(op="run", sessionId, command="tail -100 /var/log/syslog")
13-crons系统级与用户级定时任务 — 未知任务标记ssh_exec(op="run", sessionId, command="cat /etc/crontab; ls -la /var/spool/cron/")
14-ssl所有域名/服务的证书过期检查ssh_exec(op="run", sessionId, command="openssl x509 -in ... -noout -dates")
15-docker若运行中 — 镜像漏洞、容器配置检查ssh_exec(op="run", sessionId, command="docker ps; docker images")
16-disk磁盘使用率、inode 使用率ssh_exec(op="run", sessionId, command="df -h; df -i")
17-integrity若安装了 AIDE 或 tripwire,进行完整性校验ssh_exec(op="run", sessionId, command="aide --check")
18-rootkit若安装了 rkhunter 或 chkrootkit,进行根kit检测ssh_exec(op="run", sessionId, command="rkhunter --check --skip-keypress")

执行规则:所有命令均通过 ssh_exec(op="run", sessionId, command="<command>") 执行 → 再通过 ssh_exec(op="logs", commandId=cmdId) 记录日志。禁止本地执行。


严重性等级定义

等级颜色含义
CRITICAL🔴紧急风险,需立即处理
HIGH🟠显著风险,本周内修复
MEDIUM🟡中等风险,本月内修复
LOW🔵轻微问题,有空时修复
INFO信息提示,无需操作
PASS🟢检查通过,状态正常

确认流程

当需要所有者确认时:

发现异常(需确认)于 <client>/<server>
    ↓
写入 actions/<client>/<server>/pending-confirm/<client>-<server>-<id>-<slug>.md
    ↓
包含在邮件报告中的“需要您决策”部分,并附上 <client>/<server> 上下文
    ↓
所有者回复:APPROVE <id> / DENY <id> / SKIP <id>
(完整 ID 格式:<client>-<server>-<type>-<NNN>,例如 client-1-server-01-ACT-20260529-001)
    ↓
搜索所有 actions/*/*/pending-confirm/ 目录下的对应 ID
    ↓
APPROVE → 代理通过 SSH MCP 连接到 <client>/<server> → 执行操作 → 日志记录至 history/
DENY    → 操作跳过,已记录
SKIP    → 延后至下次审计

邮件报告结构

报告按服务器、客户汇总及总览分别发送,全部通过邮件插件/技能发送。

单服务器报告

主题: [Linux Guardian] <client>/<server> — YYYY-MM-DD | 得分: N/100 | CRITICAL:N HIGH:N

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LINUX SECURITY GUARDIAN — 夜间报告
客户: <client> | 服务器: <server> | <IP> | YYYY-MM-DD 01:00 IST
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

执行摘要
安全得分: N/100 | 等级: X
严重: N | 高: N | 中: N | 低: N
自动修复: N | 待确认: N | 通过: N

━━ 🔴 严重 (需立即处理)
[发现详情]

━━ 🟠 高风险
[发现详情]

━━ ⚡ 自动处理动作 (安全、无破坏性)
[已自动修复的内容]

━━ 🔑 需要您决策 (请回复 APPROVE/DENY/SKIP <id>)
[待确认项,含 <client>/<server> 前缀的 ID]

━━ 📦 CVE 报告
[按严重性列出发现的 CVE]

━━ 🌐 网络与防火墙
[端口与防火墙状态]

━━ 🟡 中等 / 低风险
[非紧急发现]

━━ 🟢 全部通过
[通过的检查项]

━━ 下次审计: 明天 01:00 IST

客户汇总报告

主题: [Linux Guardian] <client> 汇总报告 — YYYY-MM-DD | 服务器: N/N | CRITICAL:N HIGH:N

客户: <client>
已审计服务器: N / N 总数
平均得分: N/100

| 服务器 | 得分 | 严重 | 高 | 得分等级 |
|--------|------|------|----|----------|
| ...    | ...  | ...  | ...| ...      |

跨服务器模式: [多个服务器发现相同漏洞]

安全得分计算公式

score = 100
score -= (严重数量 × 20)
score -= (高风险数量 × 10)
score -= (中等风险数量 × 3)
score -= (低风险数量 × 1)
score = max(0, score)

等级划分: 90-100 = A | 75-89 = B | 60-74 = C | < 60 = F

文件夹结构

markdown

linux-security-guardian/

audit/

modules/ ← 01-system.md ... 18-rootkit.md

results/

<client>/<server>/

critical/ high/ warning/ info/ pass/

YYYY-MM-DD-<check>.md ← 每个客户端/服务器的检测结果

actions/

<client>/<server>/

auto-done/ ← 自动修复的操作记录(已执行)

YYYY-MM-DD-<slug>.md

pending-confirm/ ← 等待所有者确认

<id>-<slug>.md

history/ ← 所有已批准或拒绝的操作记录

cve/

cve-scan.sh ← 外部 CVE 扫描脚本(支持 --client 和 --server 参数)

external-sources.md ← 所有 API 地址、查询参数及使用示例

.cache/ ← 共享缓存的 API 响应(有效期 6 小时)

<client>/<server>/

scan-results/ ← YYYY-MM-DD.md

advisories/ ← <cve-id>.md

reports/

<client>/<server>/

daily/YYYY-MM-DD.md

weekly/YYYY-WNN.md

network/

<client>/<server>/

firewall-snapshots/ ← YYYY-MM-DD-rules.txt

port-scans/ ← YYYY-MM-DD.md

proposed-changes/ ← <id>-<change>.md

hooks/

audit-runner.md ← 主审计调度器(每日凌晨 1 点运行,支持多客户端循环)

on-critical.md ← 出现任何严重发现时触发(附带客户端/服务器信息)

on-confirm-reply.md ← 处理所有者回复的 APPROVE/DENY/SKIP 指令

pre-action.md ← 执行任何操作前的安全检查

post-action.md ← 验证操作是否成功执行

mail-sender.md ← 使用邮件插件/技能发送报告

crons/

active/

nightly-audit.md ← 每日凌晨 1 点 IST 持续运行

completed/

errors/

raw/ ← 原始错误日志

memory/

schema.json

index.json

SOUL.md ← 核心上下文配置(支持多客户端感知)

AGENT.md ← 行为规则(支持多客户端,依赖 SSH MCP)

SERVER_PROFILE.md ← 多客户端服务器详细信息

AUDIT_LOG.md ← 追加式主审计日志

BASELINE.md ← 预期状态快照

STATS.md

CB
@cyber-bye

已收录 2 个 Skill

相关推荐