Repository navigation
Conversation
- SDDL 比较前归一化 AI 继承标记(D:PAI -> D:P):只差 AI 标记时判已收敛, 不再每次启动都在整棵子树上重跑数十秒的无效写入 - runServe 启动期 ensurePrivateDirectory 改走 hardenServeDataDir: 加固超时/失败时 warn 降级继续 listen,不再 process.exit(1) Closes huiliyi37#450
cd1872c to
c4058c5
Compare
CI 状态说明(2026-10-12)
|
|
CI 说明(非本 PR 引入): |
|
CI 说明(本轮复核结论):本 PR 的 |
|
已通过 sync 流程合入 dev,感谢 @Ver-zhzh 的贡献 🎉 本 PR 的改动(fix(sidecar): 启动期 ACL 加固永不收敛 + 超时致命,数据目录膨胀后本地服务必崩)已经 sync 流程合入主仓(本次 sync),并已收录进 CONTRIBUTORS.md。 按仓库的双仓流程,公开仓 PR 不经 merge 按钮合入(保持 dev 主仓唯一事实源),现以 sync-merged 标记关闭。欢迎继续贡献! |
内容已经 sync 流程合入(本次 sync),本提交为作者署名落账: GitHub 贡献者图谱按 Co-authored-by trailer 计入。 Co-authored-by: Ver-zhzh <Ver-zhzh@users.noreply.github.com>
内容已经 sync 流程合入(本次 sync),本提交为作者署名落账: GitHub 贡献者图谱按 Co-authored-by trailer 计入。 Co-authored-by: Ver-zhzh <Ver-zhzh@users.noreply.github.com>
修复批次:sidecar 启动期 ACL 加固
Closes #450
1. SDDL 比较永不收敛 → 每次启动重跑数十秒无效写入
现象:
protectPrivatePath(src/platform/private-path.ts)的 PowerShell 脚本用整串 SDDL 比较决定是否重写 DACL;读回值D:PAI(...)与目标D:P(...)只差 AI(自动继承)标记,被判为不一致。根因:
P(不从父继承)已设置时AI只是来源标记,有效授权完全相同;且 Windows 侧该写入本就不生效(写前/写后读回 SDDL 完全相同),于是每次启动都在 48k 文件上重跑一次 24s+ 的无效写入。修复:比较前归一化
D:PAI -> D:P(脚本内-replace '^D:PAI', 'D:P',TS 侧新增normalizeAclSddlForComparison同规则导出以便测试)。未设保护的D:AI仍判为不同、照常写入加固;安全语义不变(仍是保护 + 仅当前用户/SYSTEM/Administrators FullControl,owner 校验保留)。2. 加固超时一票否决服务启动
现象:
execFileSync(powershell, ..., { timeout: 10_000 })在runServe()早期无 try/catch,异常冒泡导致 sidecar 在 listen 前process.exit(1),/health永远不通;桌面端 3 次重试后 circuit_open。修复:新增
hardenServeDataDir()(src/server/serve.ts),runServe启动期加固改走它:超时/失败时serverLogger.warn记录并降级继续 listen。加固只是纵深防御的一层,不应拥有否决服务启动的权力。未修观察(如实报告,非本批引入)
desktop\\recovery-journal无上限增长到 22.5k 文件)属数据治理范畴,不在本批范围内。验证
npx tsc --noEmitnpm test相关文件(private-path / serve-acl-hardening / server-info-protection / server-info)ETIMEDOUT走hardenServeDataDir