Documentation
¶
Overview ¶
Package bashguard bash 命令静态风险解析:不执行命令,经真 shell AST (mvdan.cc/sh)解析成调用序列,按策略表判定只读性。对标 ZCode bash-command-parser.ts + bash-readonly-policy 的「权限判定不执行命令」。
判定原则(保守到宁可误报):
- 解析失败、含动态词($() / 反引号 / 未展开 $VAR)、含写重定向、 复合控制流(if/for/while/case/函数定义)→ 一律非只读——无法静态证明 安全的就不放行;
- 调用按策略表:命令不在表=未知(非只读);命中危险 flag=非只读; 未知 flag=非只读;值型 flag 吃一个参数后继续;
- 安全包装(env/nice/nohup/time/timeout/stdbuf/xargs)剥壳后判定内核;
- 复合命令(&& || ; |)每一段都必须只读,整体才只读。
上限 10K 字符(对标 ZCode:超长命令不进解析器)。
缺省只读策略表:保守起步集——不在表=非只读;生产按需经 Table 自定义扩展 (对标 ZCode 的表驱动形态:每命令声明安全 flag 及其值形态)。
Index ¶
Constants ¶
View Source
const MaxCommandLen = 10 * 1024
MaxCommandLen 解析上限。
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Decision ¶
type Decision struct {
// ReadOnly 命令可判只读(不执行任何写路径)。
ReadOnly bool
// Reason 非只读原因(人可读,审计用)。
Reason string
// Invocations 提取的调用序列(观测/风险面)。
Invocations []Invocation
}
Decision 判定结果。
type Invocation ¶
Invocation 提取的单次调用(观测面)。
type Policy ¶
type Policy struct {
// ReadOnly 命令本体是否只读。
ReadOnly bool
// SafeFlags 已知安全 flag(含 - 前缀,如 "-n")。长 flag 单写。
SafeFlags map[string]FlagKind
// UnsafeFlags 命中即非只读(显式优先于 SafeFlags)。
UnsafeFlags []string
// Subcommands 子命令策略表(git 形态,可嵌套):子命令不在表=非只读。
Subcommands map[string]Policy
// Wrapper 安全包装(env/timeout 形态):剥壳后按剩余首参判定。
Wrapper bool
// ConsumeBare Wrapper 剥 flag 后先吃掉的前置裸操作数个数(timeout 的时长)。
ConsumeBare int
// NoBareOperands 裸操作数即写形态(git branch <名> 创建 / git stash 裸 push /
// git tag <名> 打标):出现任何 flag 之外的裸操作数 → 非只读。
NoBareOperands bool
// AllowBareOperandsPrefix NoBareOperands 的豁免前缀(date 的 +FORMAT 形态:
// 裸操作数以 "+" 开头是格式串不是写目标)。前缀空串不放行任何操作数。
AllowBareOperandsPrefix []string
}
Policy 单命令策略。
Click to show internal directories.
Click to hide internal directories.