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 步走:
- Phase 1 信息收集 — 生成只读审计命令,你复制到服务器上执行,把结果贴回来
- Phase 2 风险分析 — 分析结果,输出风险清单(按 Critical/High/Medium/Low 分级)
- Phase 3 加固方案 — 给出分批加固方案(先 Critical 再 Medium)
- 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 status 或 iptables -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.txtSSH 加固(dry-run 预览)
# 先预览会做什么改动
bash harden_ssh.sh --dry-run --user deploy
# 确认后执行
sudo bash harden_ssh.sh --user deploy修改前备份
# 自动备份所有关键配置文件,并生成恢复脚本
bash backup_before_change.shNginx 安全检查
bash check_nginx.sh --domain your-domain.com文件权限检查
bash check_permissions.sh --web-root /var/www