The agent
What cardinal-agent does on a managed host, and the one thing it is structurally incapable of.
cardinal-agent runs on each managed Linux host. It is a host daemon, not an
administrative client, and it holds a credential that proves which machine it
is and nothing more.
cardinal-agent enroll -server <url> -token <token> register this machine's key
cardinal-agent run -server <url> serve identity, refresh
cardinal-agent status what is cached, how old
cardinal-agent sudoers print the drop-in, install nothing
cardinal-agent hostcert show the host certificate
cardinal-agent shadow -server <url> report what cutting over would change
cardinal-agent doctor check prerequisites, change nothing
What run does
- POSIX identity over systemd's
io.systemd.UserDatabasevarlink interface, consumed bynss-systemd. No C NSS module, and it is the supported modern replacement fornss_ldap. - Sudoers, rendered from the same Cedar policy into
/etc/sudoers.d/50-cardinaland validated withvisudo -cbefore it is installed. See sudo. - Host certificates, so users verify hosts rather than accepting a fingerprint they will never check. This kills TOFU warnings fleet-wide.
- Trusted authorities, written to
/etc/ssh/cardinal_user_ca.pubwith ansshddrop-in naming it, so rotating the SSH CA is not a fleet-wide manual step. - An offline cache, so a directory outage is not a host outage.
Local root survives it
The agent is structurally incapable of removing local root access, and that is enforced in code and tested rather than promised. An identity system that can lock the operator out of the machine it is running on has turned a directory outage into a hardware problem.
Where things live
| Path | What |
|---|---|
/etc/cardinal/host_key |
this host's private key |
/var/lib/cardinal/assignment.json |
the cached assignment |
/run/systemd/userdb |
the socket nss-systemd looks in |
/etc/sudoers.d/50-cardinal |
the rendered drop-in |
All four are flags, so a distribution that puts them elsewhere can say so.
Start with doctor
cardinal-agent doctor
It checks the machine's prerequisites and says what is missing, changing
nothing. Run it before enroll on any host you are not certain about. It is
faster than reading a failure later.