Repository navigation
Releases: YanGLweI/SystemHardening
Release list
2026-08-28-v2
系统加固平台客户端发布 2026-08-28 v2(正式版)
平台说明
- Windows:
SystemHardening_WindowsClient_Setup_2.3.7.exe(NSIS 安装包,含静默安装与自动更新) - Linux: 本次无变更,沿用现有版本
本次发布内容(均经实机测试验证)
Windows v2.3.7 — 屏保 SYSVOL 降级过滤修正
修复缺陷(TEST-WIN 实机发现):
2.3.6 在无用户登录触发屏保 SYSVOL 降级时,会跳过不在"计算机配置已应用列表"中的 GPO 目录。屏保属用户配置策略(User\registry.pol),下发屏保的 GPO 常不在计算机侧列表中,导致域控已下发屏保策略的终端三项字段为空、误判不合规。
修复方案:
- 屏保 SYSVOL 降级恢复全量解析域控下发的所有 GPO 目录,不再按计算机侧列表过滤(Session 0 服务无法获取用户侧 RSOP,域控下发的定义即权威降级源)
- 计算机侧应用列表仅作排序优先级:已应用 GPO 最后解析,其定义值优先覆盖,保持 GPO 优先级语义
- 移除 2.3.6 引入的
/scope user查询(该场景下必然失败且增加采集耗时)
不受影响(回归确认):
- 机器侧采集项(移动存储/密码策略/审计策略)保持严格 RSOP 过滤,被安全筛选排除的 GPO 不参与解析
- 已登录但被域控豁免的用户,屏保保持为空、不降级(原缺陷修复不回归)
Windows v2.3.6 — GPO 解析健壮性加固(随本包一并发布演进)
- 修复 RSOP XML 段落定位的 Unicode 字节偏移错位问题(域管理员任意 Unicode 命名的 GPO 不再可能导致解析异常)
- gpresult 临时文件唯一命名 + 执行前预清理,增加 60 秒超时看门狗
- 支持无 BOM 的 UTF-16LE 输出解码
- 跳过日志改为汇总输出,避免刷屏
实机验证结果(TEST-WIN,2.3.7)
- 无用户登录触发检查:
[SYSVOL 降级] 解析 GPO 目录(含计算机侧已应用优先覆盖),成功从屏保 GPO({9B883413})的registry.pol解析到屏保策略,三项字段恢复非空 - 机器侧回归:被筛选排除的 GPO 策略文件仍按汇总日志跳过,
StorageDevices判定正确
升级建议
域环境且使用屏保策略下发的终端建议升级;本机运行单元测试 11 项全部通过(含真实 gpresult /x 输出夹具)。
2026-08-28
系统加固平台客户端发布 2026-08-28(正式版)
平台说明
- Windows:
SystemHardening_WindowsClient_Setup_2.3.5.exe(NSIS 安装包,含静默安装与自动更新) - Linux: 本次无变更,沿用现有版本
本次发布特性(均经实机测试验证)
Windows v2.3.5 — GPO 策略文件按实际应用状态过滤
修复缺陷(TEST-WIN 实机发现):
域控对终端通过安全筛选"拒绝"某条组策略(如 USB Deny)后,客户端上报数据仍显示该策略合规。根因:客户端降级解析 DataStore 缓存与 SYSVOL 源文件,其中存放的是域内全部 GPO 的定义(含被筛选排除的),不反映策略对本机的实际应用状态。
修复方案:
- 采集前通过
gpresult /x(RSOP XML)获取本机实际应用的计算机配置 GPO 列表(GUID + 应用顺序) - 策略文件(Registry.pol / GptTmpl.inf)仅解析实际应用的 GPO,被筛选排除的 GPO 文件跳过并在日志中记录:
跳过被 RSOP 筛选排除的 GPO ({GUID}) 的策略文件: ... - 多 GPO 合并按应用优先级排序(本地策略最先,域 GPO 按 AppliedOrder 升序,后应用覆盖先应用)
- 安全降级:gpresult 不可用时仅解析本地策略文件,宁可留空也不误报合规
影响范围: 移动存储(设备控制)、密码策略、审计策略、屏保 SYSVOL 降级,共 4 个采集项。
实机验证结果(TEST-WIN,数据库记录确认):
| 场景 | 结果 |
|---|---|
| USB Deny 被安全筛选拒绝 | StorageDevices=0(不合规,旧版误判为 1)✅ |
| 恢复 USB Deny 应用 | StorageDevices=1(合规)✅ |
| 密码/审计值一致性 | 与 gpresult 中 Default Domain Policy 权威配置逐项一致 ✅ |
其他:
- 新增
gpresult执行失败的诊断日志(退出码 + stderr) - 新增 GitHub Actions CI(windows-latest 自动运行单元测试)
版本对照
| 平台 | 版本 | 安装包 |
|---|---|---|
| Windows | v2.3.5 | SystemHardening_WindowsClient_Setup_2.3.5.exe(MD5: ae627161543225684d05208282b48e25) |
| Linux | 无变更 | — |
部署提示
- 管理平台上传 Windows v2.3.5 安装包后客户端自动更新,或手动覆盖安装
- 安装时配置文件保留,升级无需重新配置
2026-08-27
系统加固平台发布 2026-08-27
平台说明
- Windows:
SystemHardening_WindowsClient_Setup_2.3.3.exe(NSIS 安装包,含静默安装与自动更新) - Linux:
linux-hardening-client_v2.1.1.zip - 后端: 需同步部署最新
server_linux_amd64(含硬件 UUID 纠正/占位值清理/回填逻辑)
Windows 客户端 v2.3.3
- Token 修复:修正刷新时 save 参数错位;后台线程(计划/更新/任务)每轮重读 tokens.json,解决正式环境 check-update/check-schedule 持续 401 问题
- 硬件 ID 采集源修正:改采 SMBIOS UUID(Win32_ComputerSystemProduct.UUID),拒绝全 0/全 F 与 BIOS 占位值("Default string" 等)
- 启动重校验:缓存的 hardware_uuid 非标准 UUID(空/遗留 BIOS 序列号/占位值)一律用新逻辑重采并覆盖——修复升级后 tokens.json 缓存旧硬件 ID 不重新采集的问题
Linux 客户端 v2.1.1
- 硬件 ID:采集 SMBIOS UUID(product_uuid → dmidecode 兜底),注册与心跳携带上报,启动重校验并持久化;无 DMI 环境(容器)降级不携带该字段
- 心跳设备信息同步:心跳实时携带主机名/主 IP,改名/换 IP 后 ≤2 分钟同步 clients 表(与 Windows 一致)
- 注册实时采集:注册/重注册使用实时设备名/主 IP,config.yaml 值仅作采集失败兜底,避免改名后重注册上报旧值
后端(双端共用)
- 心跳/注册:占位值黑名单拦截(视同空值),上报空 + 存储为占位脏值 → 自动清空
- 遗留无效值(BIOS 序列号等)查重后自动纠正为标准 UUID,无需手工 SQL
部署提示
- 先部署后端(纠正/清理/回填逻辑生效)
- 管理平台上传 Windows 2.3.3 与 Linux 2.1.1 安装包,客户端自动更新
- 客户端升级后首轮心跳即完成存量硬件 ID 纠正与设备信息同步
2026-08-17-v2
系统加固平台发布 2026-08-17-v2(正式版,待测试通过后发布)
平台说明
- Windows:
SystemHardening_WindowsClient_Setup_2.2.4.exe(NSIS 安装包,含静默安装与自动更新) - Linux:
linux-hardening-client_v2.0.9.zip(沿用上版) - 后端:
server_linux_amd64(2026-08-18 构建,含降级上传保护,需同步部署)
本次发布特性
根因(正式环境实测诊断)
Windows 更新补丁重启后部分电脑"除基础信息外其他上传全空"导致不合规。根因缺陷链:
- 服务开机自启且启动即执行首次兜底检查(重启后数十秒内);
- 更新重启后环境半就绪:网络/DC 未就绪(SYSVOL 不可达)、secedit 在 update resume 阶段可能"退出码 0 但内容为空"、auditpol 开机早期可能失败、无用户登录;WMI 基础信息开机早期即可用;
- 客户端无完整性门禁,子采集失败留空仍组装上传;
- 后端
Select("*")强制空值覆盖 → 一次降级上传清空历史健康数据; - 首次检查后无重试 → 空数据长期停留。
Windows 客户端 v2.2.4
- secedit 空解析回退:
secedit /export成功但解析为空时降级解析 GptTmpl.inf - 降级采集门禁:密码/审计/屏保三组策略同时全空 → 跳过上传(豁免场景仅屏保空,不误判)
- 首次检查重试:门禁拦截/失败不标记完成,5 分钟自动重试
- 启动宽限期 60s,避开开机半就绪窗口
后端(双保险,立即保护在产旧版客户端)
UploadWindowsData降级上传保护:三组策略全空且已有记录有值 → 跳过覆盖、保留健康数据、日志告警;不影响豁免语义
版本对照
| 组件 | 版本 | 产物 |
|---|---|---|
| Windows | v2.2.4 | SystemHardening_WindowsClient_Setup_2.2.4.exe |
| Linux | v2.0.9 | linux-hardening-client_v2.0.9.zip |
| 后端 | 2026-08-18 | server_linux_amd64 |
部署提示
- 先部署后端(立即保护所有在产旧版客户端)
- 管理平台上传 2.2.4 安装包,客户端自动更新
2026-08-17
系统加固平台客户端发布 2026-08-17(正式版)
平台说明
- Windows:
SystemHardening_WindowsClient_Setup_2.2.3.exe(NSIS 安装包,含静默安装与自动更新) - Linux:
linux-hardening-client_v2.0.9.zip(沿用上版,含二进制、安装/卸载脚本、配置模板、README)
本次发布特性(均已测试验证)
Windows v2.2.3 — 屏保采集登录判定与豁免语义修复
修复缺陷(虚拟机实测发现):
- 豁免用户误判合规:被域控豁免的用户登录后,
Control Panel\Desktop策略路径同样不存在,旧版会降级读 SYSVOL,用域策略把数据"补"成合规。豁免用户的真实状态是"未配置屏保",应判不合规。 - 残留 SID 误判登录:HKEY_USERS 会保留历史登录用户的 hive(只登录一个账号却可见多个 S-1-5-21 SID),旧版只要发现任一 S-1-5-21 SID 就认为有用户登录,导致重启后无人登录时不触发 SYSVOL 降级。
新判定逻辑(三态语义 + Volatile Environment 登录判定,实测验证):
| 场景 | Volatile Environment | Desktop 策略路径 | 结果 |
|---|---|---|---|
| 登录 + GPO 已配置 | ✅ | 存在且有值 | 上报真实值 |
| 登录 + 域控豁免 | ✅ | 不存在 | 三项为空、不降级 → 不合规 |
| 重启后无人登录(仅残留 SID) | ❌ | — | 降级 SYSVOL 读域策略 → 合规 |
- 登录判定依据:
HKEY_USERS\<SID>\Volatile Environment仅在用户交互登录加载配置文件时创建,注销/重启后消失,残留 hive 被跳过 - 采集/降级全程分层日志(
C:\ProgramData\SystemHardening\WindowsClient\service.log)
Linux v2.0.9 — 无变更
版本对照
| 平台 | 版本 | 安装包 |
|---|---|---|
| Windows | v2.2.3 | SystemHardening_WindowsClient_Setup_2.2.3.exe |
| Linux | v2.0.9 | linux-hardening-client_v2.0.9.zip |
部署提示
- 管理平台上传 Windows v2.2.3 安装包后客户端自动更新,或手动覆盖安装
- 安装时配置文件保留,升级无需重新配置
2026-08-16
系统加固平台客户端发布 2026-08-16(正式版)
平台说明
- Windows:
SystemHardening_WindowsClient_Setup_2.2.1.exe(NSIS 安装包,含静默安装与自动更新) - Linux:
linux-hardening-client_v2.0.9.zip(含二进制、安装/卸载脚本、配置模板、README)
本次发布特性(均已测试验证)
Windows v2.2.1 — 屏保策略采集最终方案(用户优先 + 严格降级)
采集逻辑(经实际环境测试验证):
| 优先级 | 数据源 | 触发条件 |
|---|---|---|
| 1 | HKEY_USERS\{真实用户SID} |
枚举到真实用户(S-1-5-21- 开头)即视为用户层已处理 |
| 2 | 域控 SYSVOL GPO\User\registry.pol |
仅当完全枚举不到任何真实用户(无人登录)时才降级 |
关键修复点:
- ✅ 降级条件修正:只要存在真实用户(无论是否读到屏保数据,未读到=用户被豁免/未配置)→ 不降级 SYSVOL
- ✅ REG_SZ 值类型读取修复(ScreenSaveActive/ScreenSaverIsSecure 支持字符串与 DWORD 双类型)
- ✅ 自动更新防降级(服务端语义化版本比较 + 客户端本地防护)
- ✅ 合规数据残留修复(上传接口强制覆盖空字符串)
- ✅ 版本号规则:补丁号达到 10 进位(2.1.9 → 2.2.1)
Linux v2.0.9 — 自动更新防降级
- ✅ 客户端本地降级防护:目标版本必须高于本地版本才安装
版本对照
| 平台 | 版本 | 安装包 |
|---|---|---|
| Windows | v2.2.1 | SystemHardening_WindowsClient_Setup_2.2.1.exe |
| Linux | v2.0.9 | linux-hardening-client_v2.0.9.zip |
部署提示
- 后端需同步部署最新
server_linux_amd64(含 check-update 版本比较与上传空值覆盖修复) - 管理平台上传安装包后客户端自动更新,或手动安装
- Windows 安装时填写正确的管理服务器地址
2026-08-08
客户端最新版本发布(新增立即检查任务支持)
Linux 加固客户端 v2.0.8
linux-hardening-client_v2.0.8.zip:二进制 + System_Check-1.2.sh 加固脚本 + 交互式安装/卸载脚本- 新增立即检查任务:拉取管理端下发的任务并实时上报执行结果
- 自动更新:每 5 分钟检查版本,自动下载并升级(保留本地配置)
- 安装:
unzip后执行bash install_client_interactive.sh http://后端IP:8080
Windows 加固客户端 v2.1.4
SystemHardening_WindowsClient_Setup_2.1.4.exe:NSIS 安装包(自动注册 SystemHardeningWinClient 服务)- 新增立即检查任务:拉取管理端下发的任务并实时上报执行结果
- 自动更新:每 5 分钟检查版本,下载后静默安装(/S),保留本地配置
- 只读采集 29 项加固状态(WMI + 注册表 + secedit + GPO)
配套后端能力
- 立即检查任务调度(触发/状态查询/卡死任务重试)
- 标准字段例外配置(字段 × 客户端维度,合规比对跳过)
安装与配置说明详见仓库 README 及 linux-client / windows-client / dist 目录文档。
2026-08-07-v2
客户端新版本发布
Linux 加固客户端 v1.5.0
linux-hardening-client_v1.5.0.zip:二进制 + System_Check-1.2.sh 加固脚本 + 交互式安装/卸载脚本- 新增加固检查计划调度:从服务端拉取全局计划(每天/每周/每月 + 具体时刻),按固定时刻执行检查
- 启动后立即检查一次作为兜底补检,叠加 0~15 分钟随机抖动错开上报洪峰
- 每 5 分钟拉取计划,updated_at 变化时立即重算下次检查时刻
- 安装:
unzip后执行bash install_client_interactive.sh http://后端IP:8080
Windows 加固客户端 v2.0.8
SystemHardening_WindowsClient_Setup_2.0.8.exe:NSIS 安装包(自动注册 SystemHardeningWinClient 服务)- 新增加固检查计划调度:与 Linux 端逻辑完全对齐
- 修复:加固检查上报
date字段现在包含完整时间戳(YYYY-MM-DD HH:MM:SS),前端详情可显示具体检查时刻 - 只读采集 29 项加固状态(WMI + 注册表 + secedit + GPO)
服务端配套变更
- 新增
/api/check-schedule管理端与客户端接口 - 前端客户端管理页新增"计划"按钮,支持每天/每周/每月 + 半小时粒度时间配置
- 后端启动时种子默认计划(每天 02:00)
安装与配置说明详见仓库 README 及 linux-client / windows-client 目录文档。
2026-08-07
客户端最新版本发布
Linux 加固客户端 v1.4.0
linux-hardening-client_v1.4.0.zip:二进制 + System_Check-1.2.sh 加固脚本 + 交互式安装/卸载脚本- 新增自动更新:每 5 分钟检查版本,自动下载并升级(保留本地配置)
- 安装:
unzip后执行bash install_client_interactive.sh http://后端IP:8080
Windows 加固客户端 v2.0.6
SystemHardening_WindowsClient_Setup_2.0.6.exe:NSIS 安装包(自动注册 SystemHardeningWinClient 服务)- 新增自动更新:每 5 分钟检查版本,下载后静默安装(/S),保留本地配置
- 只读采集 29 项加固状态(WMI + 注册表 + secedit + GPO)
安装与配置说明详见仓库 README 及 linux-client / windows-client / dist 目录文档。
2026-08-05
2026-08-05 发布
正式安装包发布(以日期为版本号)。
包含安装包
| 平台 | 文件 | 说明 |
|---|---|---|
| Linux (RHEL 9) | linux-hardening-client_20260805_103708.zip |
Go 客户端二进制 + System_Check-1.2.sh 加固脚本 + 交互式安装/卸载脚本 |
| Windows x64 | SystemHardening_WindowsClient_Setup_1.0.0.exe |
Rust 客户端 NSIS 安装包(自动注册服务、生成配置) |
Windows 客户端本版特性
- 只读采集(WMI / 注册表 / secedit / 域策略文件),加固由 AD 域控 GPO 完成
- 29 项检查数据:系统信息、账户密码策略(15 项)、审计策略(9 项)、移动存储设备控制、屏幕保护策略、管理员/来宾账户
- 密码策略 secedit 失败自动降级解析 GptTmpl.inf(DataStore / SYSVOL 多源)
- 审计策略优先解析 GptTmpl.inf [Event Audit] 节(成功和失败 = 3)
- 屏保与移动存储策略支持 GPT 文本格式 registry.pol 解析
- Windows 服务运行(SystemHardeningWinClient),开机自启 + 故障自动重启
Linux 客户端
- systemd 服务运行,启动即检查,之后每 24 小时自动加固检查并上报
- Token 自动注册/刷新,数据按 client_uuid 去重更新