fix(chv): restore 路径补 H7 net 校验+登记,seed 暂存文件走 atomic_file
restore_vm 此前既不校验 net 冲突、也不登记 net.json: 已登记 VM 的 tap/mac/ip 会被恢复出的 VM 静默复用,且 恢复出的 VM 自身不登记、后来的 wake 也看不到它,两边 都漏判。现与 wake 同款:_validate_restore 在起 VMM 前 校验冲突(net_tap_conflict + vm_failed 审计), _restore_boot 在 restore 成功后登记 net.json,登记失败 审计 net_registry_write_failed + 拒绝恢复(P2-19 语义, stop_vm 清半恢复 VM)。 hostkeys.write_seed/_apply_seed_extras 的 meta-data、 user-data、network-config 改走 atomic_file(mkstemp 0600 → 写 → fsync → rename):user-data 含 host 私钥明文, 直接写 + 事后 chmod 会在 chmod 前以 umask 权限短暂可读; 半截文件本身到不了 ISO(唯一消费者 genisoimage 只在 write_seed 返回后跑),原子写同时堵住权限窗口与半截残留。 回归测试 6 个:restore 冲突拒起/恢复后登记/登记失败 拒起/无 net_json 不登记;seed 走原子写(0600、无 tmp 残留)/写失败不留半截文件。CHV 全套件 395 测试通过。
This commit is contained in:
1 parent
f448ecb74b
commit
06c3e172fe
5 files changed
+211
-18
No files matched your search
@@ -317,6 +317,13 @@
|
||||
私钥在 seed 盘建好后即删(只留公钥 + known_hosts),删
|
||||
失败 fail-fast(VM 尚未启动);私钥 chmod 失败不再静默;
|
||||
启动/清理时 cleanup_stale_secrets 扫描残留私钥与 seed。
|
||||
seed 暂存文件(meta-data/user-data/network-config)走
|
||||
atomic_file(mkstemp 0600 → 写 → fsync → rename):
|
||||
user-data 含 host 私钥明文,直接写 + 事后 chmod 会在
|
||||
chmod 前以 umask 权限短暂可读(同 uid 进程可读到私钥),
|
||||
原子写让文件从创建起就是 0600;崩溃半截文件本身到不了
|
||||
ISO(唯一消费者 genisoimage 只在 write_seed 返回后跑,
|
||||
失败重试整文件重写),原子写同时堵住该残留。
|
||||
- H6 state_dir 出 /tmp:默认
|
||||
~/.local/share/codex-app-server/chv-vms,preflight 建目录
|
||||
并保证 0700(失败即 state_dir_insecure);api-socket 组/
|
||||
@@ -326,7 +333,14 @@
|
||||
- H7 tap 隔离校验:NET_JSON 透传前校验 tap/mac/ip 跨 VM
|
||||
不重复(wake 成功后登记 net.json,stop 时释放预约),
|
||||
共用即拒绝并审计;东西向隔离的宿主防火墙部分见 §11.4,
|
||||
不写进代码假装已防。
|
||||
不写进代码假装已防。restore_vm/wake_from_hibernate 同款
|
||||
(feat-chv-cover100 补齐:此前恢复路径既不校验冲突、也
|
||||
不登记 net.json,恢复出的 VM 会与已登记 VM 静默复用
|
||||
tap/mac/ip,且自身不登记、后来的 wake 也看不到它,两边
|
||||
都漏判):恢复前校验冲突(net_tap_conflict,起 VMM 前
|
||||
拒绝并审计 vm_failed)、恢复成功后登记 net.json,登记
|
||||
失败审计 net_registry_write_failed + 拒绝恢复(P2-19
|
||||
语义,stop_vm 清掉半恢复 VM)。
|
||||
|
||||
### 11.2 Medium(每项有修复或有理由的结论)
|
||||
|
||||
|
||||
Reference in new issue
Block a user