Getting started
A reader who has never used the binary can finish this page with one allow, one deny, and an exec that did not run.
1. Ask#
$ ljos-policyd check -- uv run pytest
allow
$ ljos-policyd check -- sudo id
deny sudo
uv run pytest is the line under test. A Janet pack
can deny more after this verdict. A pack may only deny more.
Nothing is configured. The built-in denials are the whole trusted computing base: nothing else decides.
2. See a deny#
$ ljos-policyd check -- sudo id
deny sudo
$ echo $?
2
First matching deny wins. The reason is a short token after a tab
(sudo, curl-pipe-shell, git-force-push, chmod-setuid,
raw-disk, and more). The typed form is a Cap’n PolicyDecision:
$ ljos-policyd capnp -- true | wc -c
40
3. Exec only on allow#
$ ljos-policyd exec -- true
$ echo $?
0
$ ljos-policyd exec -- sudo id
deny sudo
$ echo $?
2
exec prints the deny on stderr and exits 2. The named program stays unrun.
4. Point the seat at it#
$ command -v ljos-policyd
$ ljos doctor
ok policyd ljos-policyd
$ ljos policy -- ls
ls
allow
ljos policy prints the line, then the built-in verdict if the binary
answered, then any pack rule that matches. POLICYD_BIN names a
binary that is not on PATH. POLICYD_REQUIRED=1 is fail-closed:
a missing binary is then a deny.