1. 故障现象
用户oneslide已在/etc/sudoers写入免密规则oneslide ALL=(ALL:ALL) NOPASSWD: ALL,执行sudo命令仍要求输入密码。
2. 诊断过程
-
执行权限校验命令:
sudo -l -U oneslide -
输出存在两条匹配规则:
sql(ALL : ALL) ALL (ALL : ALL) NOPASSWD: ALL -
根因:
oneslide归属sudo用户组,配置中%sudo ALL=(ALL:ALL) ALL行位于用户免密行上方;sudo规则遵循从上至下匹配,最后一条生效,原顺序组规则覆盖免密配置。
3. 修复操作
-
执行
visudo编辑sudoers,调整规则顺序,将用户免密行移至sudo组规则下方:sudoers%sudo ALL=(ALL:ALL) ALL oneslide ALL=(ALL:ALL) NOPASSWD: ALL -
语法校验:
visudo -c,无语法报错。 -
清空sudo认证缓存:
sudo -k。
4. 验证结果
-
权限查询输出顺序更新,免密规则为最后匹配项:
sqlUser oneslide may run the following commands on oneslide-VMware-Virtual-Platform: (ALL : ALL) ALL (ALL : ALL) NOPASSWD: ALL -
切换
oneslide用户执行sudo ls /root,无需输入密码,故障解决。
5. 关键原理
sudo多规则匹配逻辑:同一用户命中多条权限时,文件内靠后的规则优先级更高;用户专属权限配置需放置于用户组通用权限下方,确保免密规则覆盖组默认密码校验规则。
6. 附属排查要点
- 检查
/etc/sudoers.d/目录,无冲突权限子配置; - 配置文件权限保持
440,无权限异常干扰; - 无PAM/SELinux强制密码校验策略。