sudo -l 用于查看用户通过 sudo 被授权执行的命令,帮助确认权限范围。它显示默认策略和可运行命令,如 (ALL : ALL) ALL 表示可执行所有命令,而 (root) NOPASSWD: /bin/systemctl restart nginx 表示无需密码重启 Nginx。管理员可用 sudo -l -U username 查看指定用户的权限。输出包含 Defaults entries 和可运行命令列表,适用于权限确认、故障排查与安全审计。

当你在 linux 系统中使用 sudo -l 命令时,其实是在查看当前用户被授权通过 sudo 执行哪些命令。这个命令对系统管理和安全审计非常有用,能帮助你了解自己或他人在系统中的权限范围。
sudo -l 的基本作用
sudo -l(list)用于列出当前用户在 sudoers 配置文件中被允许执行的命令。它不会直接执行任何操作,只是显示权限信息。如果你不确定自己能否运行某个管理命令,先运行 sudo -l 是个好习惯。
示例:
输入以下命令:
sudo -l
输出可能如下:
Matching Defaults entries for user on this host: env_reset, secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" User user may run the following commands on hostname: (ALL : ALL) ALL (root) NOPASSWD: /bin/systemctl restart nginx
这表示该用户可以以任意身份运行所有命令,且无需密码即可重启 nginx 服务。
查看特定用户权限(需管理员权限)
系统管理员可以查看其他用户的 sudo 权限,使用 -U 选项指定用户名:
sudo -l -U username
例如:
sudo -l -U john
会显示用户 john 被授予的 sudo 权限,而不需要切换到该用户。
输出内容解读
sudo -l 的输出包含几个关键部分:
- Defaults entries:列出适用于当前用户的默认安全策略,如环境重置、安全路径等。
- User may run the following commands:这是核心部分,说明你可以以哪些用户身份运行哪些命令。
常见表达形式:
-
(ALL : ALL) ALL:可以以任意用户和用户组身份运行任意命令。 -
(root) NOPASSWD: /bin/systemctl restart httpd:无需密码即可以 root 身份运行 systemctl 重启 httpd。 -
(root) /usr/bin/kill:可以以 root 身份运行 kill 命令,但需要输入密码(除非标明 NOPASSWD)。
实用场景与建议
这个命令在实际使用中有多个用途:
- 确认自己是否有权限执行某项操作,避免临时报错中断工作流程。
- 排查脚本中调用 sudo 失败的原因,检查目标命令是否在授权列表中。
- 安全审计时,快速了解系统中各账户的提权能力。
- 新接手服务器时,用
sudo -l快速掌握自己的权限边界。
基本上就这些。sudo -l 不复杂但容易忽略,合理使用能提升效率并减少权限错误。


