# 安全边界

## 0.10：恢复前缀和原生元数据

恢复日志HMAC绑定仓库/操作/收据，加密源负载也加密；目标父目录、暂存树、工作文件及每个完成条目的身份须一致。现存文件不按同名推断可覆盖，前缀必须逐字节吻合；外部硬链接、未知目录项、活动/异地租约、日志丢失或无法证明创建归属的窄崩溃窗口失败关闭。私有日志不是独立备份，不能对抗同一OS账号/管理员已完全被攻陷或所有同用户竞态；不要在不可信共享目录暂存。

format5是独立标识，不把旧程序忽略扩展当兼容。ACL/ADS/xattr/属主可能携带隐私或限制访问，原生恢复同平台且显式允许权限才执行，不提权、不静默剥离安全属性；无法应用/读回就保留失败。明文库元数据也是明文，建议加密。portable是明确有损恢复，始终不宣称全部文件系统属性保真；ctime、POSIX birthtime恢复、特殊mode位、物理布局及厂商扩展有缺口。详见 [0.10指南](docs/RELIABILITY_0_10.md)。

Windows恢复将归档的有效DACL转换为受保护显式ACL，阻止新父目录追加权限；保留原始SDDL并报告继承拓扑变化。归一比较核对deny/allow相对顺序、权限及owner/group，同类可交换规则规范排序；不把未知ACE或额外授权忽略为成功。macOS只在同inode描述符、扩展安全能力及属性查询成功后把无ACL归一为空列表，真正查询错误仍拒绝。

## 0.9：日用、续作、保留与远端

私有HMAC/加密缓存仅提示；重用块仍校验，完整审计/GC不可凭缓存放行。坏历史隔离不覆盖原件，新备份成功不说明旧根健康。操作日志绑定源清单/仓库/批次；续作重扫，不是独立副本。分页恢复默认完整选区预验证；部分模式只救健康文件且返回不完整，根/页无法证明边界则拒绝。

双确认退休保留根至少7日，OS uptime与墙钟交叉核对；重启/跳时/计时不一致不自动放行，不能对抗整个OS/账号被攻陷。pins/计划/清理保护/原库存与保留点实际演练是额外门禁；新增健康备份不扩展删除集合。对象GC/永久清理分离；主密钥重建产生新库，旧副本不被撤销。

分页远端仅传密文、分页回执固定摘要/版本，不等于真实云/账号隔离或不可变保留已验证；独立救援使用外部可信配方和同平台程序摘要，新状态不继承旧DPAPI。重建/SQLite导出会有私有临时明文，删除不是SSD安全擦除。监督式进程不自动装服务或保证注销运行。WAL集群绑定为操作者声明，文件连续性/摘要不能替代原生回放；不自动删WAL。告警最终适配回执不是真人已读或真实渠道认证。完整限制见 [0.9指南](docs/RELIABILITY_0_9.md)。

## 0.8：分页、回收与应用恢复

format4仅显式新建，旧格式不原地升级。MoonBit验证逻辑摘要、流式文件边界、路径和预算，Node处理OS/加密/磁盘索引；完整性不等于外部来源可信。索引是可重建缓存，不参与跳过验证；加密值不隐藏对象数量、大小和访问模式。只回收全部根均不引用的页/包，隔离与永久清理分离；缺WAL、坏根、活锁、未知任务、未知释放状态都失败关闭。物理断电/网络盘同步仍未验证。

VSS helper仅进程自有非持久快照集，不提权、不安装服务；现有管理员会话需要另行授权。写入器参与不是通用业务一致性证明；私有暂存可含明文，释放未确认保留记录供检查，不删除其他影子集。当前没有管理员环境真实验证。PostgreSQL物理备份拒绝外部tablespace，同版本工具校验；PITR只写新目录，源conf/auto.conf/HBA替换，禁止恢复原primary_conninfo/归档/preload。隔离启动需显式信任源，临时回环trust仅该角色、最终关闭并停自有服务器；不是OS沙箱，不执行陌生物理备份或生产SQL。

心跳接收端是独立部署适配，不是已经存在的外部监控。令牌只取环境；非回环需TLS及单独授权，不关闭证书验证。只接受聚合计数、序号与时间，按接收端到达时间判断，重复不刷新存活。共享账户/主机、配置回滚和管理员攻陷不受此协议保护；持久回执不等于通知实际投递。新运行包仅本机验证，不公开附件、私人申报书、凭据、备份或报告。

## 0.6.0：调度、保护与独立救援

新调度器默认不运行，只有显式 runner/已启用自动运行的工作台执行；不自动注册服务，不持久化明文凭据，拒绝异常覆盖和自动解锁。多个入口使用调度及仓库租约；死进程恢复仅清除已确认的同机调度租约，不接管活跃操作。健康证据必须属于当前快照且各自在窗口内，不代表未来可恢复。

固定恢复点/保护窗口是本机清理门禁，不能阻止同账户恶意删除策略或绕过应用直接删除数据。Ed25519 签名由 Node 标准密码学实现，私钥为密码加密 PKCS8；公钥和首条签名摘要必须独立可信。可选本地 anchor 拒绝序号倒退/跳号/分叉，不防御 anchor 自身被攻击者回滚；签名不证明业务内容正确，未签发发布者证书或自动签名发行物。

独立救援包不包含密码/密钥/仓库/原始源路径/旧私有状态。必须先核对独立保管的配方摘要和完整程序清单，再运行同平台二进制；不要把攻击者自带的摘要作为可信来源。失败状态保留以供诊断，普通包依赖兼容 Node，Windows 内置包仅适用于其平台/架构。原生 VSS、PITR、live 分段清单/对象 pack 未实现；物理断电/跨主机/真实云/人工安装仍需验证。

## 0.4.0：救援、缓存、应用导出和显式联网

严格只读 Host 不允许源仓库写入，也不允许恢复写入；应急入口用另一受限 writer 创建全新目标。部分恢复仅发布健康数据，明确返回不完整，不覆盖或修复原件。逻辑只读会话不提供并发写隔离，请停止其他写者。校验窗口不是未来可恢复保证，私有健康状态不能抵御同用户恶意篡改。

索引缓存可能包含私人文件名，明文仓库索引不加密；加密索引采用独立用途认证加密。它不用于恢复/删除的权威判断。SQLite 在线导出会临时落地明文，清理不是 SSD 安全擦除。完整 VSS 请求器未实现，无 live-copy 热备回退。

只有显式 s3-push/s3-restore 会连接指定存储；非回环需明确授权并验证 HTTPS，只允许加密源，拒绝重定向与隐式默认云凭据。条件写后读回、不传播删除，不等于已取得真实供应商/物理隔离证据。可选 COMPLIANCE 保留可能带来不可逆费用，需要独立开关确认；server_retention_reported 仅表示服务端返回值。回执摘要应另存可信渠道。详见 [远端边界](docs/REMOTE.md)、[应用导出](docs/APPLICATIONS.md) 与 [救援指南](docs/RECOVERY_0_4.md)。

## 0.3.0 新增边界

工作台解锁信息只保留进程会话，30 分钟后拒绝新操作；进行中的任务持有自己的凭据引用，完成后丢弃。JavaScript 不保证物理内存清零。忘记会话不撤销明确授权的 DPAPI。更换密码仅重包装，不是主密钥轮换或撤销旧副本。

文本预览只显示经校验的小型 UTF-8 文件，禁止执行 HTML/脚本。多选恢复与预览在 MoonBit 使用同一规则并绑定确认摘要。取消不是撤销；已完成快照保留。任务配置删除不删除数据或已有 OS 计划。

可选 Windows 桌面包包含经官方 SHA-256 核对的 Node 与完整许可证。启动器白名单校验不是代码签名，EXE 尚未签名；不要求关闭 SmartScreen/执行策略。VSS 仅只读准备检查，实际外部用户、物理灾备和断电验证仍未完成。详情见 [实用性边界](docs/PRACTICAL_0_3.md)。

## 0.2.0 扩展

默认行为仍为本地、受信任目录、明文仓库；只有显式 init-encrypted 或 init-large --encrypted 才创建认证加密仓库。认证加密/密钥恢复边界见 [RECOVERY](docs/RECOVERY.md)，采用标准库不等于已经通过独立安全审计。恢复密钥不能公开，私有报告的详细模式可能包含敏感相对路径。

本机工作台仅回环监听，使用临时会话 Bearer、Host/Origin 校验、写入确认、CSP 与有界请求；不支持公网部署或不可信多用户。本机账号被攻陷、目录被恶意进程并发篡改、管理员读取进程内存均不在当前保护范围。

保留策略默认只预览，隔离与至少七天后永久清除需要不同确认。中断维护阻断普通操作并提供显式回滚。备份、密码学与维护元数据遵循文件同步/原子重命名的已有平台边界，**未做真实断电验证**，不能因进程终止用例通过而宣称断电安全。

独立复制不传播删除，但不等于物理隔离、防勒索或异地灾备。规模 profile 的最大预算不是实测承诺；大目录元数据受固定上限保护，不是常量内存。

本地、单仓库互斥写入工具。源目录、仓库、恢复目标的父目录必须由你控制；不支持其他恶意进程同时篡改这些目录。默认 CLI 不上传数据、不收集遥测、不启动网络服务；显式 workbench 启动受临时会话保护的回环服务，显式 S3 命令才连接远端。

默认格式文件内容以明文存储；显式加密仓库另见上节，仍须使用操作系统权限保护。不要把备份仓库、凭据或私人数据提交到代码仓库。排除项需用户明确设置，不假定项目中的 `.env` 可以公开。

路径在 MoonBit 与适配层双重校验：拒绝绝对清单路径、穿越、控制字符、Windows 保留名、大小写重名、不一致父目录拼写、链接/联接点/硬链接和特殊文件。读取使用大小预算、文件身份/修改状态检查；清单先校验原始字节 SHA-256，再限制 JSON 深度与数量。恢复以排他方式创建文件，最终目录提交不会替换已存在目标。

完整性不是真实性。攻击者若能改写对象、清单及快照 ID，SHA-256 本身无法阻止其伪造新历史。重要快照 ID 和远端回执摘要应另存可信渠道；没有快照签名或集中式/KMS 密钥管理；远端保留适配仍待真实服务验证。

数据对象写入后同步，再提交清单。恢复先全量验证，再写暂存目录，所有文件通过验证后才提交。中断测试覆盖进程终止，不等于硬件断电测试；Windows 目录元数据同步没有可移植保证。NAS/网络盘的持久性取决于其文件系统，未经本版实测。

发生损坏时保持原仓库和原始资料，停止写入，不自动用新数据覆盖损坏对象。恢复失败留下的 `.moonrestore-*.partial` 目录用于诊断；删除前确认确实是该次失败的暂存目录且没有需要保留的内容。

目前没有公开的专用安全联系地址。发布后应启用 GitHub 私密漏洞报告。请勿在公开 issue 粘贴真实文件内容、令牌、日志中的个人路径或未脱敏数据。
