chore: 记录改造前基线

改造开始前的完整状态,作为可回退的基点。此提交之后:Pester 175 项、零依赖套件 101 项全绿;PowerShell 5.1 尚不可用(源文件无 BOM)。

包含此前未提交的在制品:安全描述符套件、Hyper-V 实验环境(tools/lab)、agent 约定(AGENTS.md 与 docs/agents)。

.gitignore 增加 *.key / *.pfx:BackupConfig.psd1 的 PasswordFile 此前默认指向仓库内的 baknret.key,一次 git add -A 就会把口令提交进版本库。默认值在后续提交中改为空。
This commit is contained in:
Shuery committed 2026-09-26 21:46:55 +08:00
1 parent 7173e8ae10
commit 2937eb6652
32 files changed
+8775 -1691

No files matched your search

+29 -2
View File
@@ -48,7 +48,8 @@
#
# **本仓库不存放任何口令**,这里只记"去哪儿找":
# Encryption.Enabled = $true -> 所有条目都加密
# 或 BackupList.txt 里给单个条目加 @encrypt(如 .ssh @encrypt)
# SoftwareCatalog.psd1 的 Slot 写 Encrypt = $true(如 OpenSSH)
# 或 BackupList.txt 里给单个条目加 :encrypt(如 Edge :encrypt)
#
# 口令本身按以下优先级获取(见 README「加密」):
# 1. -Password 命令行参数
@@ -60,10 +61,36 @@
# 注意 7z 只接受命令行口令,口令在本机进程列表里短暂可见,这是 7z 本身的限制。
Encryption = @{
Enabled = $false
PasswordFile = ''
PasswordFile = 'baknret.key'
EncryptHeaders = $true
}
# 安全描述符(NTFS 属主 / ACL)。
#
# 归档格式装不下它:7-Zip 的 -sni 官方说明是"当前版本只能写进 WIM 归档",
# .7z 里一个字节的 ACL 都没有。所以每个归档旁边多一个 <归档名>.acl.json,
# 恢复时按它把属主 + 属组 + DACL 回放回去。
#
# 为什么非要不可:C:\ProgramData 的 ACL 里有 (A;OICIIO;GA;;;CO) —— CREATOR OWNER
# 不是账户,是访问检查时才替换的占位符,替换成"被检查对象的属主"。只回放 ACE 文本、
# 不恢复属主,等于把"谁创建的东西谁有全权"里的"谁"换成跑恢复脚本的那个账户,
# 原程序(服务账户 / 专用用户)反而没了读写权限。
#
# Mode Off —— 完全不采集:恢复出来的属主/ACL 是新建对象的默认值
# Full —— 每个对象都存(默认;正确性优先,几万文件的树 sidecar 几 MB)
# Smart —— 只存"继承复现不出来"的对象(体积优化,判据见代码,终究是启发式)
# Roots —— 只存每个归档项的根(最省,适合权限只在根上的场景)
# IncludeSacl 是否连审计规则(SACL)一起存取;读/写它需要 SeSecurityPrivilege
# SidMap 跨机恢复时的 SID 映射,例如:
# @{ 'S-1-5-21-1-2-3-1001' = 'S-1-5-21-9-8-7-1001' }
# FailOnError 安全描述符写盘失败时,是否把该条目算作失败(默认只告警并记进 manifest)
Security = @{
Mode = 'Full'
IncludeSacl = $false
SidMap = @{}
FailOnError = $false
}
# 所有条目都生效的排除模式,语法同 BackupList.txt(! 开头 = 任意层级匹配组件名)
DefaultExcludes = @(
'!Thumbs.db'