feat(hub,install): break-glass recovery vault + mgmt_plane surfacing (TASK G1)
Hub half of the management-plane break-glass (prereq for felhom-sshd/H1; agent
half = felhom-agent v0.71.0). Closes SPIKE-felhom-sshd §8/#9.
- store.host_recovery + methods: per-host root@pam console password, at-rest,
operator-retrievable (the PVE-web-console fallback when sshd + auto-heal both fail).
- API: PUT /hosts/{id}/recovery-credential (self-scoped, day-0 vaults) + GET
/admin/hosts/{id}/recovery-credential (global key only). Secret never logged
(red-proofed).
- monitor/host_mgmtplane: parses the agent mgmt_plane stanza, raises
mgmt_plane_healed WARNING on a new privsep_healed_at (recurring clobber surfaces
before lockout; complements host_staleness).
- host-install: step_break_glass generates a strong root@pam password (openssl
rand, never logged/filed — stdin to chpasswd + curl), vaults via host key;
idempotent unless --rotate-recovery. Installs the G1 host artifacts (tmpfiles +
agent-independent watchdog timer), RuntimeDirectory-guarded; uninstall removes them.
Hub v0.34.0. Non-hollow tests + red-proofs; full suite green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
This commit is contained in:
@@ -1,5 +1,24 @@
|
||||
# Felhom Hub — Changelog
|
||||
|
||||
## v0.34.0 — break-glass recovery vault + mgmt_plane surfacing (TASK G1) (2026-07-05)
|
||||
|
||||
The hub half of the management-plane break-glass system (prerequisite for felhom-sshd / H1; agent half
|
||||
= felhom-agent v0.71.0). Closes the recovery gap from
|
||||
`documentation/audits/SPIKE-felhom-sshd-2026-07-05.md` §8/#9.
|
||||
|
||||
- **Break-glass credential vault** (`store.host_recovery` + `internal/store/host_recovery.go`): a
|
||||
per-host root@pam console password, stored at rest, operator-retrievable — the human fallback for
|
||||
reaching the PVE web console (pveproxy, a failure domain distinct from sshd) when both the sshd path
|
||||
and the agent-independent auto-heal have failed. `PUT /hosts/{id}/recovery-credential` (SELF-scoped
|
||||
host key — day-0 vaults it) + `GET /admin/hosts/{id}/recovery-credential` (GLOBAL key only — a host
|
||||
key cannot read its own console password back). Secret discipline: never logged (username + length
|
||||
only); red-proofed that the password never reaches the hub log.
|
||||
- **mgmt_plane surfacing** (`internal/monitor/host_mgmtplane.go`, on the 60s sweep): parses the agent's
|
||||
additive `mgmt_plane` heartbeat stanza and raises a `mgmt_plane_healed` WARNING when the watchdog
|
||||
auto-healed a missing `/run/sshd` (new `privsep_healed_at`) — a recurring clobber surfaces BEFORE it
|
||||
becomes a lockout, complementing host_staleness. Trust-on-first-report (seed, then alert on change),
|
||||
mirroring HostLeafChecker.
|
||||
|
||||
## v0.33.0 — S2 offsite connectivity: box-facing WG registration + wireguard desired-state block + /offsite UI (2026-07-04)
|
||||
|
||||
Doc 06 roadmap row S2 (commits `fcf84a0`/`ba52005`/`13203c2`); the S2 architectural decision:
|
||||
|
||||
Reference in New Issue
Block a user