Files
privatae-bastion/docs/approvals.md
T
Privatae 4f8285ef18
ci / personal-data (push) Successful in 4s
ci / test (push) Successful in 3m36s
ci / fuzz (push) Successful in 3m35s
bastion 0.60.0
2026-11-02 00:10:58 +00:00

3.0 KiB

Approvals

Approvals with a local second factor

stepup-enroll enrols an authenticator on this machine. From then on a request to install a folder grant, apply a move plan, pull a model, or open a root session shows up under privatae-bastion approvals in plain words, and you approve or deny it here with a code the host never handles. Without an enrolled factor, folder grants and move plans are gated by the signed grant alone and the host verifies its own factor; model pulls and root sessions are refused outright.

Writes on an anchored machine wait for your approval

On a machine anchored to a host, every management op is either a read or a write. Reads answer on the anchor host's word. A write (a model drop, a terminal, a job, a self-update, stopping a process, running a local tool to extract a document) runs only on an approval that this machine verifies and spends: bound to that op, this machine and a digest of exactly its arguments, single use. You give it either with the second factor enrolled here or from your approval device: device-init makes one machine of yours the device, and pin-device <key> on each machine you govern accepts what it signs. The device shows each ask in the machine's own words and signs only that; a root terminal still needs the code at the machine itself. Six kinds of write take no fresh approval: standing work under a place you set up at the machine (the nightly backup fetch, the host's context store), a run under op terms you already approved (see Ops), a root command under the root-command grant you gave at this machine with the code (see Session lane), the anchor host's signed record of who else may pair here, taking something away (a revoke), and a self-update to a newer version we signed (see Heartbeat and self-update). A local, unanchored machine is unchanged: the pairing is the authorization on your own computer.

The lane watches itself: five refused writes from one pairing within ten minutes close that pairing's write lanes on this machine for ten minutes, doubling on repeat. Reads and revokes are never held. quarantine clear <host> lifts it.

Approvals from the taskbar

On the machine that is your approval device (device-init), every ask a host files for one of your machines raises a notification on Windows. Clicking it, or the tray's approvals line, opens the approvals window: each ask in plain words, with Approve and Deny, and "Approve all shown" when there are several. Approve signs with this device's key exactly as device-approve does: one run, on the machine the ask names, within the hour. "Approve all" signs only the asks the window showed you, never one that arrived after. The same window lists the requests waiting for a code on this machine itself. The window does not redraw by itself while you read it: when something new arrives it says so and waits for you to show it. Off Windows the window is a page of the local console (privatae-bastion ui, then Waiting for you).