Fase 5: política de caps del bus desde agent-caps.toml
Sustituye la política hardcodeada por una declarativa (SDD 07 §4).
hammer-core/src/caps.rs:
- AgentCapsConfig { default, rule[] }; CapRule { uid?, gid?, caps }.
- caps_for(uid, gid): primera regla que casa (todos los campos
declarados deben coincidir) o default. load(path) → Ok(None) si falta.
- 8 tests: orden de reglas, match uid+gid, fallback, regla vacía ignorada.
hammerd:
- bus::policy_from_config(cfg) construye la CapsPolicy desde la config.
- main: --agent-caps (default /etc/hammer/agent-caps.toml). Con fichero
usa la config; sin fichero o con fichero inválido cae a default_policy
(avisando). +1 test del policy_from_config.
examples/agent-caps.toml: plantilla comentada.
22 binarios de test verdes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
5ec7a81e87
commit
42288230f9
@@ -0,0 +1,28 @@
|
||||
# Política de capacidades del bus de agente (hammerd). Ver docs/07-agent-bus.md §4.
|
||||
#
|
||||
# Colócala en /etc/hammer/agent-caps.toml (o pásala con `hammerd --agent-caps RUTA`).
|
||||
# El daemon concede caps a cada conexión según el (uid, gid) del peer — autenticados por
|
||||
# SO_PEERCRED. El peer NUNCA elige sus caps. Caps válidas:
|
||||
# query | compile | inject | inject-real | init
|
||||
#
|
||||
# Caps para cualquier peer que no case ninguna regla.
|
||||
default = ["query"]
|
||||
|
||||
# Reglas: se evalúan en orden y gana la PRIMERA que casa. Una regla casa si TODOS los campos
|
||||
# que declara (`uid` y/o `gid`) coinciden con el peer.
|
||||
|
||||
# root: todo, incluido inject-real (escribir en el FHS real, no sólo en overlay).
|
||||
[[rule]]
|
||||
uid = 0
|
||||
caps = ["query", "compile", "inject", "inject-real", "init"]
|
||||
|
||||
# Miembros del grupo `hammer` (ajusta el gid a tu sistema): pueden compilar e inyectar en
|
||||
# overlay, pero no pisar el FHS real ni mandar al init.
|
||||
[[rule]]
|
||||
gid = 994
|
||||
caps = ["query", "compile", "inject"]
|
||||
|
||||
# Una cuenta de servicio de la IA: sólo compilar y consultar.
|
||||
[[rule]]
|
||||
uid = 1100
|
||||
caps = ["query", "compile"]
|
||||
Reference in New Issue
Block a user