spec(user-uid-split): mark superseded by the hardening refactor
The 1/2/3-user question is answered: stay at 2 (left4me + l4d2-sandbox). The defenses that motivated a 3-user split (cross-uid ptrace, cross-server contamination, web-side reach into gameserver state, DB/env exposure to srcds) are closed by the systemd hardening composition: PrivateUsers + PrivatePIDs + TemporaryFileSystem + SystemCallFilter=~@debug + empty CapabilityBoundingSet. The residual filesystem-ACL surface (mode 0640 root:left4me on DB and web.env) is noted as a separate concern — covered for the current deployment shape, revisit if shape changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
37309ba399
commit
f615d0de75
1 changed files with 26 additions and 0 deletions
|
|
@ -1,5 +1,31 @@
|
||||||
# How many system users should left4me have? — 1, 2, or 3
|
# How many system users should left4me have? — 1, 2, or 3
|
||||||
|
|
||||||
|
**Status: SUPERSEDED 2026-05-15 by the hardening refactor.**
|
||||||
|
|
||||||
|
The original question — should left4me have 1, 2, or 3 system users — is
|
||||||
|
now answered: **2 users (current state) is correct.** The
|
||||||
|
defenses that motivated a 3-user split (DB readability from srcds,
|
||||||
|
cross-server ptrace, same-uid /proc visibility, web-side reach into
|
||||||
|
gameserver state) are closed by the systemd hardening composition
|
||||||
|
landed in the hardening-refactor plan (`docs/superpowers/plans/2026-05-15-hardening-refactor.md`):
|
||||||
|
- `PrivateUsers=true` blocks cross-uid ptrace at the kernel level.
|
||||||
|
- `PrivatePIDs=true` hides peer processes even when uids match.
|
||||||
|
- `TemporaryFileSystem=` + minimal binds hide the DB and web.env from
|
||||||
|
srcds entirely.
|
||||||
|
- `SystemCallFilter=~@debug` + empty `CapabilityBoundingSet=` block
|
||||||
|
ptrace at the syscall layer.
|
||||||
|
|
||||||
|
The residual filesystem-ACL surface (DB at `0640 root:left4me`,
|
||||||
|
web.env same) is a separate concern: a uid split would close it via
|
||||||
|
kernel ACLs, but for the current deployment shape it's covered by the
|
||||||
|
systemd-imposed FS view. If the deployment shape changes (multi-tenant
|
||||||
|
host, shell logins as the service uids, additional services running
|
||||||
|
as `left4me` outside these units) the uid split should be revisited.
|
||||||
|
|
||||||
|
The original content of this spec is preserved below for context.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
**Status: open question, not settled design.** This is a handoff
|
**Status: open question, not settled design.** This is a handoff
|
||||||
document. Today left4me has 2 system users: `left4me` (web app +
|
document. Today left4me has 2 system users: `left4me` (web app +
|
||||||
gameservers + workshop builds) and `l4d2-sandbox` (script-overlay
|
gameservers + workshop builds) and `l4d2-sandbox` (script-overlay
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue