My Blog
← Back to home

Server Hardening & Ops Expert Skill — 使用指南

Server Hardening & Ops Expert Skill — 使用指南

概述

server-hardening-ops-expert 是一个 Claude Code 自定义 Skill,专注于 Linux 服务器安全加固与 SaaS 运维。只做防守,不做攻击。

Skill 注册方式

层面 文件 作用
Skill 定义 ~/.claude/skills/server-hardening-ops-expert/SKILL.md Claude Code 自动扫描此目录发现 skill
全局指令 ~/.claude/CLAUDE.md §23 注册触发词,确保关键词匹配时加载 skill

Skill 文件结构

~/.claude/skills/server-hardening-ops-expert/
├── SKILL.md                          # 主文件,定义 4-Phase 工作流
├── checklists/
│   ├── linux-baseline.md             # Linux 系统基线检查
│   ├── ssh-hardening.md              # SSH 加固检查清单
│   ├── nginx-hardening.md            # Nginx 安全检查清单
│   ├── php-hardening.md              # PHP 安全检查清单
│   ├── mysql-hardening.md            # MySQL/MariaDB 安全检查清单
│   └── redis-hardening.md            # Redis 安全检查清单
├── scripts/
│   ├── audit_server.sh               # 一键只读审计脚本
│   ├── harden_ssh.sh                 # SSH 加固脚本(支持 --dry-run)
│   ├── check_nginx.sh                # Nginx 安全检查脚本
│   ├── check_permissions.sh          # 文件权限检查脚本
│   └── backup_before_change.sh       # 修改前自动备份(含恢复脚本生成)
└── templates/
    ├── hardening-report.md           # 安全加固报告模板
    ├── risk-register.md              # 风险登记表模板
    └── rollback-plan.md              # 回滚计划模板

如何使用

方式 1:触发词自动匹配

以下任何说法都会触发 skill:

帮我加固这台服务器
做一次安全审计
检查服务器的安全漏洞
SSH 有没有安全问题
Redis 是不是公网暴露了
MySQL 安全配置检查
Nginx 安全头配置
帮我配置防火墙
端口暴露检查
文件权限有没有问题
帮我设置 fail2ban
服务器缺少备份怎么办

方式 2:明确指定场景

我刚买了一台新 VPS,准备跑 WordPress,帮我做安全加固
这台生产服务器被扫到了,帮我排查问题并加固
帮我检查 MySQL 和 Redis 有没有公网暴露

典型使用流程

场景 1:新服务器上线前加固

你: 我有一台新买的 Ubuntu 22.04 VPS,IP 是 x.x.x.x,
    准备跑 Nginx + PHP + MySQL + Redis 的 Web 应用。
    帮我做一次完整的安全审计和加固。

AI 会按 4 步走:

  1. Phase 1 信息收集 — 生成只读审计命令,你复制到服务器上执行,把结果贴回来
  2. Phase 2 风险分析 — 分析结果,输出风险清单(按 Critical/High/Medium/Low 分级)
  3. Phase 3 加固方案 — 给出分批加固方案(先 Critical 再 Medium)
  4. Phase 4 执行验证 — 每个操作给你 执行/验证/回滚 三条命令,你执行一条确认通过后再给下一条

场景 2:排查特定安全问题

你: 帮我检查 Redis 有没有公网暴露

AI 会:

  • 给你检查命令
  • 如果有问题,给你修复方案(绑定 127.0.0.1 + 设密码 + 更新应用配置)
  • 每步都有验证和回滚

场景 3:使用内置脚本

你: 帮我生成一个服务器审计脚本,我要在服务器上跑一下

AI 会引用 scripts/audit_server.sh,你可以直接:

# 上传到服务器后
bash audit_server.sh --output /tmp/audit-report.txt
cat /tmp/audit-report.txt   # 把结果贴给 AI 分析

加固打补丁的正确节奏

永远不要让 AI 直接 SSH 到你的服务器。 正确流程是:

┌─────────┐    审计命令     ┌─────────┐
│  你本地   │ ──────────→  │ 服务器   │
│  Claude  │               │         │
│  Code    │  ←────────── │         │
│         │   审计结果      │         │
│         │               │         │
│         │   加固命令     │         │
│         │ ──────────→   │         │
│         │               │         │
│         │   验证结果     │         │
│         │  ←────────── │         │
└─────────┘               └─────────┘

你作为中间人:复制命令到服务器,贴结果回来
AI 每步只给一条操作,等你确认后再给下一条

核心安全原则

  • 每步操作前自动备份配置(可用 scripts/backup_before_change.sh
  • 每步操作都有回滚命令
  • SSH 加固时永远保持当前连接,新终端验证后再断旧连接
  • 不一次性大改,分批执行
  • 先备份,后修改 — 任何改动前必须备份配置文件
  • 先审计,后执行 — 先只读收集信息,再制定方案
  • 最小权限 — 默认拒绝,按需开放

风险等级定义

等级 含义 响应时间
Critical 可被远程利用,立即修复 立即
High 大幅增加被入侵风险 24 小时内
Medium 信息泄露或配置不当 一周内
Low 加固建议,非紧急 计划修复

常见加固检查项速查

检查项 风险等级 快速检查命令
Redis 公网暴露 Critical ss -tlnp | grep 6379
MySQL 公网暴露 Critical ss -tlnp | grep 3306
明文密钥/密码 Critical grep -r "password" /var/www/*/
SSH 允许密码登录 High grep PasswordAuthentication /etc/ssh/sshd_config
SSH 允许 root 登录 High grep PermitRootLogin /etc/ssh/sshd_config
防火墙未启用 High ufw statusiptables -L -n
PHP 危险函数未禁用 High php -r "echo ini_get('disable_functions');"
Nginx 暴露版本号 Medium curl -I http://localhost | grep Server
缺少安全响应头 Medium curl -I https://your-domain.com
缺少 fail2ban Medium systemctl status fail2ban
缺少自动备份 Medium ls /root/backup* /opt/backup*
缺少监控 Low 检查是否有监控工具运行

快速上手示例

一键审计

# 在服务器上执行,生成完整审计报告
bash audit_server.sh --output /tmp/audit-report.txt

SSH 加固(dry-run 预览)

# 先预览会做什么改动
bash harden_ssh.sh --dry-run --user deploy
 
# 确认后执行
sudo bash harden_ssh.sh --user deploy

修改前备份

# 自动备份所有关键配置文件,并生成恢复脚本
bash backup_before_change.sh

Nginx 安全检查

bash check_nginx.sh --domain your-domain.com

文件权限检查

bash check_permissions.sh --web-root /var/www