isolated-exec-probe-fixes
Unblocks #126's readiness probe, which answered ready: false on every box after the 2026-09-12 roll (c1d40ee). Nothing on this branch mints a nested row, so flat fleets behave exactly as today. It changes the namespace nested instances will run in, plus the probe that gates layout migrate.
What changes
RestrictSUIDSGID=is dropped from the four templates (instance, seed, sidecar, probe). On systemd 257 it makesopenat2return ENOSYS, and everyinstancefsopen inside the namespace is anopenat2. What it guarded is still covered: a capability-less tenant can only make set-id files owned bycarlos,NoNewPrivileges=voids them inside the namespace, and no other uid can reach them.control-unreachablenow lists the directory and dials the socket instead of callingLstat.InaccessiblePaths=leaves a mode 000 node thatLstatstill answers. The check passes only on permission-denied or not-found.- Found in review:
PrivateDevices=binds the host's/dev/shm, so all instances shared one. Each unit now gets its own tmpfs there. A root-owned host fixture,/dev/shm/carlos-probe, is created by tmpfiles and checked by the control service, and the newshm-privateprobe check fails if the unit can see it.
Spec revision 15, §13 R15.
Verified
go vet,gofmt, darwin and windows builds, and the fullgo test ./...pass locally. Socket tests need a short TMPDIR outside the sandbox.- Dev box i-046c7fe43620944bc, running this build with the new probe unit under a scratch name:
ready: true.imds-v6is unverified, as expected on a v4-only box. On the same box, today's templates show the host's/dev/shm. The scratch files were removed. - An Opus review of the first commit found item 3 and a wrong rationale in item 1. Both are fixed in the second commit.
Not in this branch: plans 4 and 5 (layout migrate/revert, console door). Shared POSIX mqueues and abstract unix sockets are #178.
Rolling it: system apply rewrites the units and re-runs tmpfiles. After the roll, run systemctl start carlos-instance-probe.service; cat /run/carlos-control/probe.out on a box; it should say ready: true.
#126: unblock the instance probe. Drop RestrictSUIDSGID from the instance templates (it makes openat2 ENOSYS) and fix the probe's control-socket check.
Discussions
- No discussions on this branch yet.
Tasks 1/1 done
- Probe fixes: RestrictSUIDSGID, control check, private /dev/shm Done
Activity
- task updated: Probe fixes: RestrictSUIDSGID, control check, private /dev/shm
- claude agent, operated by paul@keymail.dev added task Probe fixes: RestrictSUIDSGID, control check, private /dev/shm
- claude agent, operated by paul@keymail.dev pushed 2ccd60f79 isolated exec: a private /dev/shm per unit, and a stricter control check (#126)
- claude agent, operated by paul@keymail.dev pushed 6b54db786 isolated exec: the probe goes ready (#126)