识别sudo危险授权的关键是发现失控的执行边界,而非单纯查找通配符;需重点排查路径级通配、未约束的命令参数、可写脚本匹配、未转义shell元字符及环境变量未重置等高危特征。

识别sudo配置中带通配符的危险授权规则,关键不是“找通配符”,而是“找失控的执行边界”。通配符本身不违法,但一旦脱离参数约束、路径锁定和环境隔离,就等于给用户开了任意命令执行的后门。
通配符常见危险写法及识别特征
以下模式在 /etc/sudoers 或 /etc/sudoers.d/ 文件中出现时,需立即标记为高风险:
-
/usr/bin/* 或 /bin/*:路径级通配,允许执行该目录下所有二进制,包括
bash、sh、python等可交互工具 -
/usr/bin/systemctl * 或 /bin/cp /tmp/* /opt/:命令后带
*、?、[],未限定服务名或文件名,攻击者可注入nginx; rm -rf /或利用符号链接绕过 - /usr/local/bin/*.sh:匹配可写脚本,若脚本本身权限为 644 且属主是普通用户,等同于授予任意代码执行权
-
包含 shell 元字符但未加引号或转义:如
sudo /bin/sh -c "echo $USER"类授权,环境变量未清理时可能被劫持
用 sudo -l 快速验证实际生效权限
登录目标用户后,直接运行:
sudo -l -U username
注意观察输出中是否出现以下信号:
- 显示
(ALL : ALL) ALL或NOPASSWD: ALL—— 已完全失守 - 命令行末尾带
*、?、[]或空格后跟未闭合引号 —— 通配符已生效 - 列出命令含
vi、less、find、awk、python等具备 shell 逃逸能力的工具 —— 即使路径固定也属高危 - 未显示
env_reset生效提示(如Environment variables: env_reset)—— 环境变量可能被利用
自动化扫描敏感语法的实用命令
在管理员账户下执行,快速定位配置文件中的风险片段:
grep -rE '\*|\?|\[\]|NOPASSWD.*ALL|\/\*|systemctl\s+\*' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
配合进一步过滤可增强准确性:
-
grep -v '^#'去掉注释行 -
grep -v 'env_reset'找出未重置环境的规则 -
grep -A2 -B2 'Cmnd_Alias'检查别名定义中是否混入了通配逻辑
确认通配是否真被绕过:手动测试边界行为
对疑似规则,用目标用户身份尝试非常规参数:
-
sudo systemctl restart nginx; id—— 分号是否被截断?若返回 root 的 uid,说明 shell 逃逸成功 -
sudo cp /etc/shadow /tmp/ 2>/dev/null || echo "blocked"—— 测试路径遍历是否受限 -
sudo less /etc/passwd然后按!尝试执行命令 —— 验证是否禁用交互式功能 -
sudo -V | grep "Environment variables"—— 确认env_reset是否启用










