sudo -l 是普通运维人员查看自身 sudo 权限最直接、最安全的方式,仅展示 sudoers 中显式定义的命令、目标用户、主机匹配及 nopasswd 等细节,无需 root 权限;运行后需输入密码(除非免密),输出含主机、用户、命令路径及参数约束,支持 -h 指定主机和 -n 用于脚本静默判断。

sudo -l 是普通运维人员查看自身被授予的 sudo 权限最直接、最安全的方式。它不执行命令,只展示当前用户在 sudoers 配置中被允许运行哪些命令(含主机、用户切换、是否需要密码等细节),无需 root 权限即可使用。
基础用法:直接运行 sudo -l
在终端中输入以下命令:
sudo -l系统会提示输入当前用户的密码(除非配置了 NOPASSWD),验证通过后,列出所有匹配的 sudo 权限条目。输出格式通常包括:
- 匹配的主机名(如 (ALL) 表示所有主机)
- 可切换的目标用户(如 (root) 或 (www-data))
- 允许执行的命令路径及参数(如 /usr/bin/systemctl start nginx)
- 是否需密码((NOPASSWD:) 表示免密)
查看指定主机上的权限(适用于多主机环境)
如果用户在 sudoers 中按主机做了差异化授权,可用 -h 指定目标主机:
sudo -l -h db01.example.com这会显示当前用户在 db01.example.com 这台主机上被赋予的 sudo 权限,避免误判跨主机权限范围。
静默模式与脚本化检查(谨慎使用)
若需在自动化脚本中判断某命令是否被允许,可结合 -n(非交互)和 -l:
sudo -n -l /bin/systemctl 2>/dev/null | grep -q 'systemctl' && echo "允许" || echo "拒绝"注意:-n 参数防止卡在密码提示,但该方式仅适合简单判断,不能替代人工核对完整权限列表;生产脚本中应避免硬编码命令路径,优先以 sudo -l 输出为准。
常见权限输出解读示例
典型输出片段如下:
(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade(www-data) /var/www/scripts/deploy.sh
(ALL : ALL) ALL
含义依次是:
- 可在任意主机免密运行 apt update 和 upgrade
- 可切换为 www-data 用户,运行指定部署脚本
- 拥有完全 sudo 权限(等同 root,需重点审计)
运维人员应重点关注是否有宽泛通配符(如 /usr/bin/*)、ALL 权限或敏感命令(如 passwd、usermod),发现异常应及时反馈管理员。











