| name | tao-server-patrol |
| description | 对线上 Linux 服务器做只读例行安全巡检 (compromise assessment + 漏洞核对 + 健康基线)。当用户提到"服务器巡检""例行巡检""服务器安全检查""巡检脚本""服务器被入侵""中招/挖矿排查""CPU 暴涨查原因""矿池/木马/后门排查""服务器例行检查""周期巡检"时使用。 本地 SSH 驱动、多主机: 把只读采集器 inspect.sh 经 SSH stdin 送进每台服务器执行(不在服务器落地文件), 拉回报告并与历史基线 diff; 再由模型按 8 层方法论判读(进程/网络/持久化/账户/文件/日志/应用漏洞/健康基线), 对检出版本联网核对 CVE, 输出带严重度分级的报告 + 修复命令清单。 铁律: 只读, 绝不自动改服务器/杀进程/删文件; 任何处置命令都交用户执行或逐项确认; 先取证再清理; 例行巡检价值在"基线变化"。
|
| allowed-tools | Read, Write, Edit, Bash, Grep, Glob, AskUserQuestion, WebSearch, Agent |
| metadata | {"short-description":"服务器只读例行巡检(入侵痕迹+漏洞+健康基线)+分层判读报告","argument-hint":"[可选: 主机别名/IP, 或 --update-baseline]"} |
服务器例行安全巡检
把「服务器安全巡检」抽象为可复用工具:一个只读采集脚本在服务器上跑 → 本地编排器拉回报告并跟基线 diff → 模型按方法论分层判读 + 联网核对 CVE → 出带严重度的报告与处置建议。
适用场景:定期(如每周)或手动巡检线上 Linux 服务器,排查挖矿木马 / 入侵后门 / 框架漏洞(React、Next.js、Nginx 等)导致的 CPU 暴涨与失陷。
脚本是稳定资产,只负责只读采集与基线 diff;行业判断、CVE 比对、严重度定级、处置取舍由你(模型)阅读真实报告后决定。
铁律(违反即失去巡检意义或造成事故,务必遵守)
- 绝对只读:本 skill 不修改服务器上任何东西——不杀进程、不删文件、不改配置、不重启。
inspect.sh 只采集,经 bash -s 走 stdin、服务器上不留文件。
- 处置永远交给用户:发现问题只输出「带严重度的报告 + 修复命令清单」(见
references/remediation-playbook.md)。要代为执行处置命令,必须用户逐项明确同意,且动手前回答「这是治根因还是压症状」。
- 先取证、再清理、连根拔持久化、轮换全部凭据:疑似入侵时不要只杀进程(cron/systemd/preload 会复活),不要急着删证据。
- 基线 diff 是例行巡检的灵魂:优先读
<date>.diff,逐条判读「新增」(新 SUID/监听口/cron/SSH key/启用服务 = 入侵信号)。首次巡检只建基线、无 diff,要如实说明。
- CVE 必须联网核实:模型知识有截止日,第 [7] 层对每个检出版本用
WebSearch 查当前 advisory,不要只凭 cve-and-ioc.md 的举例下结论。
- 不夸大不漏报:版本号命中 CVE 但利用前提不满足的,标注「需确认是否启用 X」,别直接判 CRITICAL;CPU 高是症状、挖矿二进制+持久化才是根因。
- 报告/产物写本机:默认
~/.server-patrol/(可用 PATROL_HOME 改),不写服务器、不写本仓库 git。
前置条件(第一次用先确认)
- 本机到目标服务器已配 SSH 免密(公钥登录):
ssh <目标> true 不报错。
- 目标上配了免密 sudo(
ssh <目标> 'sudo -n true' 输出无错)→ 才能全量巡检;否则自动降级为普通用户采集(部分层不完整,会在报告标注)。
- 主机清单:复制
config/hosts.example.txt 为 config/hosts.txt 填真实主机(每行一个 user@host 或 ssh_config 别名)。
工作流
第 1 步 · 对齐范围(用 AskUserQuestion,若用户未说清)
- 巡检哪些主机(全部 / 指定别名)?是否本次仅想看某一层?
- 是否首次(要建基线)还是已有基线(看变化)?
第 2 步 · 采集(运行编排器)
bash tools/run_patrol.sh
bash tools/run_patrol.sh --host ubuntu@web-prod
编排器逐台:SSH 送入 inspect.sh(优先 sudo -n,失败降级)→ 报告落 ~/.server-patrol/reports/<host>/<date>.txt → 抽 BASELINE 块与历史基线 diff → 写 <date>.diff → stdout 打印汇总。
多台主机巡检属并行独立子任务——如主机多、想省主上下文,可考虑用 Agent 并发各主机采集后汇总;单台直接跑即可。
第 3 步 · 分层判读(核心,读 references/methodology.md)
按 8 层逐节读每台 <date>.txt,先读 <date>.diff。重点:
- [1] 进程:已删二进制在跑 / 跑自 /tmp / 伪装内核线程 / ps↔/proc 计数差。
- [2] 网络:矿池端口、可疑外连。
- [3] 持久化:cron / systemd 新增 / ld.so.preload 非空(高危) / authorized_keys 新增 key。
- [4] 账户:UID0 非 root、爆破成功、sudoers 加料。
- [5] 文件:/tmp 可执行、近 7 天改动系统文件、SUID 基线新增。
- [6] 日志:Nginx 攻击特征、auth 爆破来源、日志断档。
- [7] 应用漏洞(根因):docker/node/next/react/nginx 版本 →
WebSearch 核对 CVE(见 cve-and-ioc.md)。
- [8] 健康:防火墙/fail2ban/磁盘/inode。
第 4 步 · 出报告(按 references/report-template.md)
带严重度分级(🔴🟠🟡🟢)、基线 diff 解读、根因/症状判断、处置命令清单(供用户执行,不自动跑)。报告写到 ~/.server-patrol/reports/<host>/<date>.report.md。
第 5 步 · 处置(可选,用户主导)
按 references/remediation-playbook.md 给命令。要代执行必须逐项确认。处置完重跑 run_patrol.sh 复核;确认彻底干净后 --update-baseline 固化新基线。
文件结构
tools/inspect.sh —— 只读采集器(在服务器跑,覆盖 8 层 + 末尾机器可 diff 的 BASELINE 块)
tools/run_patrol.sh —— 本地编排器(多主机 SSH 采集 + 基线 diff,产物写 ~/.server-patrol/)
config/hosts.example.txt —— 主机清单模板(复制为 hosts.txt)
references/methodology.md —— 8 层巡检方法论(判读时读)
references/cve-and-ioc.md —— CVE 核对方法 + 入侵指标(IOC)速查
references/remediation-playbook.md —— 处置命令清单(交用户执行)
references/report-template.md —— 报告模板与严重度分级
自动化(用户可选)
例行巡检可挂本机 cron(crontab -e)周跑,例如每周一 9 点:
0 9 * * 1 cd ~/.claude/skills/tao-server-patrol && bash tools/run_patrol.sh >> ~/.server-patrol/cron.log 2>&1
跑完产物在 ~/.server-patrol/,再让 Claude 触发本 skill 判读最新报告。