跳到正文

命令规则

用可测试的前缀规则控制命令执行决定。

创建规则文件

.rules 文件使用 Starlark 表达命令前缀与决定。规则用于匹配命令参数,不能代替沙盒、管理员策略或外部操作授权。创建后先运行检查命令验证匹配范围。

python
prefix_rule(
    pattern = ["gh", "pr", "view"],
    decision = "prompt",
    justification = "查看远程 PR 前核对目标",
    match = ["gh pr view 42"],
    not_match = ["gh pr --repo team/repo view 42"],
)

了解规则字段

字段规则
pattern非空参数前缀;每项为字符串或一组可选字符串
decisionallow、prompt 或 forbidden;多条匹配采用最严格结果
justification非空说明,帮助理解审批或拒绝原因
match / not_match加载时校验的命令示例

匹配按 argv 的位置进行。参数出现在其他位置不保证命中;宽泛的 shell 或可执行文件前缀可能允许超出预期的操作。

Shell 包装与复合命令

安全规则需要检查实际命令,而不只看 bash -lc 或 zsh -c。由普通词项和安全连接运算符组成的脚本可拆分后逐条判断,再采用最严格结果。

变量展开、重定向、命令替换、通配符和控制流会改变语义;无法安全拆分时保守检查整个调用。允许 git status 不能自动允许同一脚本中的删除或上传命令。

测试规则

bash
lime execpolicy check --pretty \
  --rules /absolute/path/default.rules \
  -- gh pr view 42 --json title,body

检查 JSON 结果中的决定、全部命中规则与说明。可以重复传 --rules 组合文件。为规则补充正例、位置变化、额外参数和复合命令等反例,再决定是否加载或扩大范围。

规则语言与信任

Starlark 类似 Python,但规则求值不应借此获得文件系统等副作用。工具运行时是否加载某个文件,仍取决于现役配置层、项目可信状态与系统要求;仅文件存在或检查通过不代表执行已经获准。