首页/系统/Linux 运维命令速查/场景:sudo 报错排查(不在 sudoers / command not allowed)

场景:sudo 报错排查(不在 sudoers / command not allowed)

用户执行 sudo 被拒:先分清是「未授权」还是「命令未授权」,再看 policy 来源(主文件/drop-in/LDAP),按审计日志定位。

Linux 运维命令速查系统更新于 2026-10-13

场景与思路

用户执行 sudo 被拒绝时,报错基本分两类:not in sudoers 表示用户不在任何授权规则里,command not allowed 或 sorry, user X is not allowed 表示用户有 sudo 权限但不包含这条命令。排查顺序是先看用户被授权了什么,再确认策略来自哪里——主文件 /etc/sudoers、drop-in 目录 /etc/sudoers.d/,还是 LDAP/SSSD 下发的集中策略,最后用审计日志确认被拒时的实际命令与参数,避免凭猜测放宽权限。

基本信息

场景sudo 报 not in sudoers 或 command not allowed
目标定位策略缺口,做最小化补权
排查链路sudo -l 看授权 → visudo -c 校验语法 → 审计日志看拒绝 → sudoers.d 授权
规则要点命令必须写绝对路径,参数尽量枚举;NOPASSWD 只给确实免密的命令
风险提示ALL=(ALL) NOPASSWD: ALL 等于把 root 权限直接发出去

典型使用场景

  • 用户反馈没有权限执行某条管理命令
  • 新同事入职,需要开通特定的运维命令权限
  • 自动化脚本执行 sudo 失败,需要定位是缺规则还是路径写错
  • 安全审计发现越权尝试,需要核查策略是否过宽
  • 系统迁移到集中认证后,本地与 LDAP 策略冲突

第 1 步:看授权现状

第 1 步:看授权现状
sudo -l -U zhangsan                  # 列出该用户被允许执行的命令
sudo -ll -U zhangsan                 # 展开每一条规则的来源文件
sudo -l -U zhangsan | grep -i nopasswd   # 检查是否需要密码
visudo -c                            # 校验 sudoers 语法是否正确
grep -R zhangsan /etc/sudoers /etc/sudoers.d/ 2>/dev/null

第 2 步:看拒绝记录并补权

第 2 步:看拒绝记录并补权
journalctl -t sudo -n 50              # 拒绝记录:用户、命令、参数、策略来源
grep -i 'COMMAND=' /var/log/secure | tail -n 20
sudo visudo -f /etc/sudoers.d/zhangsan
# zhangsan ALL=(root) NOPASSWD: /bin/systemctl restart myapp
sudo visudo -c && sudo -l -U zhangsan  # 改完立即验证

报错对照表

报错含义处置方向
not in sudoers用户不在任何授权规则中在 sudoers.d 里添加最小规则,或加入授权组
command not allowed有 sudo 权限但该命令未授权核对命令绝对路径与参数是否与规则一致
提示输入密码却失败口令错误或 NOPASSWD 未生效核对规则、密码策略与账号状态
command not found: sudo系统未安装 sudo安装 sudo 并按最小权限配置
LDAP 用户被拒集中策略未包含该规则联系目录管理员下发,避免本地硬加绕过治理
sudo 拒绝时退出码为 1,日志中会写明用户、命令、参数与匹配到的策略来源。读出策略来源字段就能立刻判断该改本地文件还是集中策略,不必靠猜。
授权时命令路径要与用户实际执行的一致,/usr/bin/systemctl 与 /bin/systemctl 是两条不同规则;参数里的通配符会扩大权限范围,能用确定值就不要用 *。

易错点

  • 命令路径写错导致规则永不匹配,现象与「没授权」一样,用 which 核对绝对路径
  • 参数通配过宽(如 restart myapp*)会让用户能重启同前缀的其他服务,权限被悄悄放大
  • 为省事给 NOPASSWD: ALL,等于把完整的 root 权限交给该账号
  • 本地 sudoers 与 LDAP 策略并存时最终是合并结果,只改本地可能依然不通,需确认生效来源
  • 改完 sudoers 不做 visudo -c 语法校验,配置错误会让所有 sudo 直接不可用

数据来源与参考

  • sudoers(5) man
  • man 8 sudo(日志与退出码)
  • sudo 官方 FAQ

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌