Files
Privatae 77b7853ae1
ci / personal-data (push) Successful in 6s
ci / fuzz (push) Successful in 2m49s
ci / test (push) Successful in 3m7s
bastion 0.54.1
2026-10-21 23:39:13 +00:00

1.6 KiB

Audit: on this machine and in its system log

Every decision the bastion makes is written as one JSON line to an audit file on this machine: what was asked of the management lane, allowed or refused (mgmt_audit.jsonl), pairing changes (pairing_audit.jsonl), and each pairing's terminals, root commands, store ops and op runs (that pairing's audit.jsonl). A host can fetch these files over the tunnel but cannot change or remove them.

Each line is also written to the machine's own system log, so whatever already collects that log can take it to a store no host can write:

System Where Name
Linux syslog, facility auth; on systemd, the journal privatae-bastion-audit (journalctl -t privatae-bastion-audit)
macOS syslog privatae-bastion-audit
Windows Application event log, event id 1 source PrivataeBastionAudit, registered when the system service is installed

The system-log line is the file's line with two fields added: audit, which file it went to, and pairing, the pairing it belongs to (empty for a machine-wide file). One field is left out: a root command's text, which can hold a password typed on a command line and stays in the file only. The line keeps the command's command_sha256 and command_bytes, so it can still be matched to the file and the transcript.

The file stays the record. Lines go to the system log through a queue, so a system log that is missing, slow or stuck never holds up the op being audited; if the queue fills, lines are dropped, and the next line queued carries system_log_dropped, how many were lost just before it.