Files

54 lines
2.5 KiB
Markdown

# 受控自动修复
自动修复必须建立在已完成取证、用户明确批准具体修复项、且 SSH key 和带外控制台可用的前提上。默认只生成计划,不修改远端。
## 支持的入口
```bash
# 只读计划
bash <skill-dir>/scripts/remediate.sh user@host --plan --fix ssh-perms --fix fail2ban --ignore-ip 203.0.113.10/32
# 应用单项低风险修复
bash <skill-dir>/scripts/remediate.sh user@host \
--apply --fix ssh-perms --confirm 'APPLY user@host'
# 应用 Fail2ban;必须提供维护来源白名单
bash <skill-dir>/scripts/remediate.sh user@host \
--apply --fix fail2ban --ignore-ip 203.0.113.10/32 \
--confirm 'APPLY user@host'
# 使用脚本输出的 BACKUP_ID 回滚
bash <skill-dir>/scripts/remediate.sh user@host \
--rollback 20261010T120000Z --confirm 'ROLLBACK 20261010T120000Z'
```
脚本使用现有 SSH key、BatchMode 和 host-key 默认校验,不接受密码参数,不使用 `sshpass`,不自动安装系统包。
## 修复边界
### 可以自动执行(仍需 `--apply`)
- `ssh-perms`:只修正当前 SSH 用户的 `~/.ssh` 为 `0700`、`authorized_keys` 为 `0600`,不改 key 内容和 owner。
- `fail2ban`:在独立的 `jail.d/host-sec-check.local` 写入 sshd jail;先备份、测试配置,再对已运行的服务 reload 并验证 jail。不自动启动或启用服务。
### 只生成计划,不由脚本执行
- SSH 端口、root 登录、密码认证、MFA、转发策略。
- UFW/nftables/firewalld 规则和云安全组。
- Docker/k8s 端口绑定、特权、socket/宿主机挂载。
- 删除或隔离恶意文件、容器、镜像、服务和 `/etc/ld.so.preload`。
- 重启、密钥/token 轮换和系统包安装。
## 备份与回滚
应用前在远端创建 `/var/backups/host-sec-check/<BACKUP_ID>/`,保存受影响文件和权限元数据。Fail2ban 文件恢复、SSH 权限恢复和本次新建文件删除都只针对该备份 manifest 中的精确路径。
如果应用中途失败,报告已完成项、备份目录和回滚命令;不能把“备份已创建”当成“回滚已成功”。回滚后仍需重新检查 SSH、Fail2ban 和业务状态。
## Agent 行为
1. 先跑 `--plan`,把修复项、影响、备份目录和验证方式列给用户。
2. 用户只批准某些项时,只传对应的 `--fix`,不能顺手扩大范围。
3. 应用后读取脚本输出,逐项确认 `[已修复]`、验证结果和未执行项。
4. SSH/防火墙/业务中断风险出现时停在计划阶段,转为人工确认,不用脚本猜测或重试。