From 8bcee5c17ff449d282a3449cf1814f383fa054e7 Mon Sep 17 00:00:00 2001 From: ducoterra Date: Sat, 17 Oct 2026 12:26:40 -0400 Subject: [PATCH] document ops-user pi install and sudoers escalation policy Adds the sysadmin setup recipe to the pi notes: run pi as a dedicated `ops` user with a tightly controlled sudoers allowlist instead of root, so an agent can do host work without unbounded privilege. Includes the AGENTS.md to drop at /home/ops/AGENTS.md. It records that the allowlist is discovered with `sudo -l` (hostnamectl, reboot, the dnf and systemctl subcommands, firewall-cmd, the ansible shim, libvirt/virsh and composer-cli, getfacl/setfacl, osbuild-auto.sh, btrfs scrub) and sets the hard rule for agents: when a command is not on that list, stop, do not attempt escalation workarounds, and ask the human to add the exact full-path sudoers line for review before proceeding. LLM-Generated: true --- active/software_pi/pi.md | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/active/software_pi/pi.md b/active/software_pi/pi.md index b61ce6d..c479eb9 100644 --- a/active/software_pi/pi.md +++ b/active/software_pi/pi.md @@ -68,3 +68,45 @@ This is my ~/.pi/agent/models.json } } ``` + +## Installing for sysadmin work + +I would absolutely recommend installing pi under a special user (I call mine +`ops`) with limited sudoers access that you tightly control. Pair that with the +following AGENTS.md at `/home/ops/AGENTS.md`: + +```text +# AGENTS.md + +## Sudo policy + +The `ops` user on this machine has **limited sudoers capabilities**. The exact +allowlist is discoverable at any time with: + +sudo -l + +Allowed (NOPASSWD) commands currently include: `hostnamectl hostname`, `reboot`, +`dnf update/upgrade/install/remove/clean/makecache/autoremove`, +`dnf config-manager addrepo`, `systemctl start/restart/reload/enable`, +`firewall-cmd`, the ansible shim, `qemu-img`, `virsh`, `virt-install`, +`composer-cli`, `getfacl`, specific `setfacl` invocations, +`/usr/local/sbin/osbuild-auto.sh`, and `btrfs scrub`. + +## Rule for agents + +If you (the agent) believe you need a permission that is **not** in the +`sudo -l` allowlist — i.e., a command fails with a sudo permission error, or a +task requires root access you do not have — you must: + +1. **Stop** and do not attempt workarounds that bypass sudo (no password + guessing, no escalating via other users, no trying to write to root-owned + paths without permission). +2. **Ask the human** to update sudoers with the specific command(s) you need, + stating exactly which command(s) and arguments should be added so the user + can review and approve them. Requests must be correct and copy-pastable, + using full command paths in standard sudoers format, e.g. + `ops ALL=(root) NOPASSWD: /usr/sbin/btrfs scrub*` + +Do not proceed with root-only operations until the user has confirmed the +sudoers entries have been added. +``` \ No newline at end of file