Files
BakNRet/docs/adr/0002-security-descriptor-sidecar.md
Shuery 3a3a57a6a1 docs: 决策记录 8 条、变更日志、README 的验收与口令两节
0007 与 0008 是本次改造新产生的决策(原计划 6 条)。它们同样满足「后人会问为什么」:把运行锁改成互斥体、或给库里 27 个函数补上 SupportsShouldProcess,都是看起来更规范的错法。

CHANGELOG.md:把 README 里那 33 行「相对旧版修了什么」整节搬过去,并补上本次改造的记录(11 条修复 + 6 条结构与规范,每条修复都写明现象与现状)。README 那一节换成指针。

README 新增两节:「验收与静态分析」(六个层次、Run-RealSmoke 为什么独立存在、以及那 6 条格式规则默认 Disabled 这个容易漏掉的事实);「口令放在哪里」(默认留空不是遗漏,附迁移与验证命令)。

.markdownlint.json 照 PowerShell 主仓库的实践(default true、行长 240),只把 MD024 从关闭改成「仅同级不重复」,因为变更日志需要重复标题。顺带按 .editorconfig 把 .md 的 BOM 去掉。
2026-09-27 10:01:54 +08:00

14 lines
911 B
Markdown

# 安全描述符不进归档,改为旁挂 `<归档名>.acl.json`
`.7z` / `.zip` / `.tar` 都不承载 NT 安全描述符。7-Zip 的 `-sni` 官方说明写明"当前版本只能
写进 WIM 归档",所以归档里一个字节的属主或 DACL 都没有。于是每个归档旁边放一份同名的
`<归档名>.acl.json`,恢复时按它回放属主 / 属组 / DACL。
为什么非要有:`C:\ProgramData` 的 ACL 里有 `(A;OICIIO;GA;;;CO)` —— `CREATOR OWNER` 不是
账户,而是在访问检查时替换成"被检查对象的属主"。只回放 ACE 文本、不恢复属主,等于把
"谁创建的东西谁有全权"里的"谁"换成跑恢复脚本的账户,原程序(服务账户 / 专用用户)反而
失去读写权限。
代价:`acl.json` 不在归档里,改名或迁移归档时必须把它一起搬(`tools/Rename-Archives.ps1`
负责这件事,README 里也写明了)。