sudo -l 直接列出当前用户在 /etc/sudoers 及 /etc/sudoers.d/ 中被显式授权的命令、执行身份、主机匹配和限制策略;空输出或“not allowed”表示配置缺失,非交互环境需检查 requiretty,组成员身份不等于实际权限,脚本中宜用 sudo -n true 静默验证。

直接运行 sudo -l 即可查看当前用户被授予的 sudo 权限列表。
基本用法:sudo -l
执行该命令后,系统会读取 /etc/sudoers 和 /etc/sudoers.d/ 下所有有效配置,列出当前用户可以以哪些身份、在哪些主机上、运行哪些命令。输出通常包含:
- 匹配的规则行(如
(root) /bin/systemctl) - 默认策略(如
Defaults env_reset) - 可能的限制项(如
requiretty或!visiblepw)
注意空输出或报错的含义
如果执行 sudo -l 后:
- 显示
User username is not allowed to run sudo on hostname→ 表示该用户未被任何 sudoers 规则显式授权,不是“被禁止”,而是配置完全缺失 - 输出为空但无报错 → 可能受
Defaults requiretty等策略影响,建议再运行sudo -v -U $USER验证是否能通过身份验证 - 提示
no tty present→ 当前是非交互环境(如脚本、SSH无-t选项),需检查是否启用了 requiretty
确认组权限是否实际生效
仅靠 groups 或 getent group sudo 查到用户在 sudo 组里,不等于有 sudo 权限。必须确认该组是否已在 sudoers 中启用:
- 检查主配置:
sudo grep -E '^\s*%sudo\s+ALL|^%wheel\s+ALL' /etc/sudoers - 检查扩展配置:
ls /etc/sudoers.d/ | xargs -I{} sudo grep -l 'sudo\|wheel' "/etc/sudoers.d/{}" 2>/dev/null - RHEL/CentOS 8+ 默认不启用 %wheel,必须手动添加才生效
脚本中安全静默判断
在自动化场景中,避免密码提示和敏感输出:
- 用
sudo -n true测试:返回码为 0 表示有可用权限且无需输密;非 0 表示无权或需密码 - 不要用
sudo -v(会触发密码缓存更新,可能卡住) - 避免
sudo -l在日志敏感环境中使用(输出含命令路径等细节)











