Skip to content

Releases: YanGLweI/SystemHardening

2026-08-28-v2

Choose a tag to compare

@YanGLweI YanGLweI released this 28 Aug 07:30

系统加固平台客户端发布 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 常不在计算机侧列表中,导致域控已下发屏保策略的终端三项字段为空、误判不合规。

修复方案:

  1. 屏保 SYSVOL 降级恢复全量解析域控下发的所有 GPO 目录,不再按计算机侧列表过滤(Session 0 服务无法获取用户侧 RSOP,域控下发的定义即权威降级源)
  2. 计算机侧应用列表仅作排序优先级:已应用 GPO 最后解析,其定义值优先覆盖,保持 GPO 优先级语义
  3. 移除 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

Choose a tag to compare

@YanGLweI YanGLweI released this 28 Aug 05:35

系统加固平台客户端发布 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 的定义(含被筛选排除的),不反映策略对本机的实际应用状态。

修复方案:

  1. 采集前通过 gpresult /x(RSOP XML)获取本机实际应用的计算机配置 GPO 列表(GUID + 应用顺序)
  2. 策略文件(Registry.pol / GptTmpl.inf)仅解析实际应用的 GPO,被筛选排除的 GPO 文件跳过并在日志中记录:跳过被 RSOP 筛选排除的 GPO ({GUID}) 的策略文件: ...
  3. 多 GPO 合并按应用优先级排序(本地策略最先,域 GPO 按 AppliedOrder 升序,后应用覆盖先应用)
  4. 安全降级: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 无变更 —

部署提示

  1. 管理平台上传 Windows v2.3.5 安装包后客户端自动更新,或手动覆盖安装
  2. 安装时配置文件保留,升级无需重新配置

2026-08-27

Choose a tag to compare

@YanGLweI YanGLweI released this 27 Aug 03:52

系统加固平台发布 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

部署提示

  1. 先部署后端(纠正/清理/回填逻辑生效)
  2. 管理平台上传 Windows 2.3.3 与 Linux 2.1.1 安装包,客户端自动更新
  3. 客户端升级后首轮心跳即完成存量硬件 ID 纠正与设备信息同步

2026-08-17-v2

Choose a tag to compare

@YanGLweI YanGLweI released this 18 Aug 01:34

系统加固平台发布 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 更新补丁重启后部分电脑"除基础信息外其他上传全空"导致不合规。根因缺陷链:

  1. 服务开机自启且启动即执行首次兜底检查(重启后数十秒内);
  2. 更新重启后环境半就绪:网络/DC 未就绪(SYSVOL 不可达)、secedit 在 update resume 阶段可能"退出码 0 但内容为空"、auditpol 开机早期可能失败、无用户登录;WMI 基础信息开机早期即可用;
  3. 客户端无完整性门禁,子采集失败留空仍组装上传;
  4. 后端 Select("*") 强制空值覆盖 → 一次降级上传清空历史健康数据;
  5. 首次检查后无重试 → 空数据长期停留。

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

部署提示

  1. 先部署后端(立即保护所有在产旧版客户端)
  2. 管理平台上传 2.2.4 安装包,客户端自动更新

2026-08-17

Choose a tag to compare

@YanGLweI YanGLweI released this 17 Aug 13:12

系统加固平台客户端发布 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 — 屏保采集登录判定与豁免语义修复

修复缺陷(虚拟机实测发现):

  1. 豁免用户误判合规:被域控豁免的用户登录后,Control Panel\Desktop 策略路径同样不存在,旧版会降级读 SYSVOL,用域策略把数据"补"成合规。豁免用户的真实状态是"未配置屏保",应判不合规。
  2. 残留 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

部署提示

  1. 管理平台上传 Windows v2.2.3 安装包后客户端自动更新,或手动覆盖安装
  2. 安装时配置文件保留,升级无需重新配置

2026-08-16

Choose a tag to compare

@YanGLweI YanGLweI released this 16 Aug 11:23

系统加固平台客户端发布 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

部署提示

  1. 后端需同步部署最新 server_linux_amd64(含 check-update 版本比较与上传空值覆盖修复)
  2. 管理平台上传安装包后客户端自动更新,或手动安装
  3. Windows 安装时填写正确的管理服务器地址

2026-08-08

Choose a tag to compare

@YanGLweI YanGLweI released this 07 Aug 16:16

客户端最新版本发布(新增立即检查任务支持)

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

Choose a tag to compare

@YanGLweI YanGLweI released this 07 Aug 06:54

客户端新版本发布

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

Choose a tag to compare

@YanGLweI YanGLweI released this 07 Aug 03:50

客户端最新版本发布

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

Choose a tag to compare

@YanGLweI YanGLweI released this 05 Aug 02:38

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 去重更新