如何检查 Linux 中用户是否拥有 sudo 访问权限

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查用户在 Linux 系统中是否拥有 sudo 权限。你将探索三种常见的方法:直接使用 sudo -l 测试 sudo 权限、检查 /etc/sudoers 配置文件,以及验证用户是否属于 sudo 组。

通过完成这些步骤,你将掌握在 Linux 环境中理解和验证与管理任务相关的用户权限的实用技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") linux/UserandGroupManagementGroup -.-> linux/groups("Group Displaying") subgraph Lab Skills linux/cat -.-> lab-558774{{"如何检查 Linux 中用户是否拥有 sudo 访问权限"}} linux/sudo -.-> lab-558774{{"如何检查 Linux 中用户是否拥有 sudo 访问权限"}} linux/groups -.-> lab-558774{{"如何检查 Linux 中用户是否拥有 sudo 访问权限"}} end

使用 sudo -l 测试 sudo 权限

在这一步中,你将学习如何使用 sudo -l 命令检查你的 sudo 权限。sudo(超级用户执行)允许被授权的用户以超级用户或其他用户的身份执行命令,具体取决于安全策略的规定。

sudo -l 命令会列出用户在当前主机上被允许运行的命令,或者在指定主机上允许运行的命令。

让我们来检查当前用户(labex)的 sudo 权限。如果终端尚未打开,请打开它。

输入以下命令并按回车键:

sudo -l

你应该会看到类似以下的输出:

Matching Defaults entries for labex on ...:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User labex may run the following commands on ...:
    (ALL : ALL) NOPASSWD: ALL

此输出表明用户 labex 可以以所有用户的身份(ALL : ALL)运行所有命令,并且无需输入密码(NOPASSWD: ALL)。这证实了你的 labex 用户拥有完整的 sudo 权限,且无需密码。

理解 sudo 对于在 Linux 中管理权限和执行管理任务至关重要。

点击 继续 进入下一步。

使用 cat /etc/sudoers 检查 sudoers 文件

在这一步中,你将查看 /etc/sudoers 文件,它是 sudo 的主要配置文件。该文件决定了哪些用户或用户组可以以哪些用户的身份运行哪些命令。

重要提示: 直接编辑 /etc/sudoers 文件可能会有风险,如果操作不当,可能会导致你无法访问系统。通常建议使用 visudo 命令来编辑此文件,因为它可以进行语法检查。不过,在这一步中,我们将仅使用 cat 命令查看文件内容,以了解其结构。

由于 /etc/sudoers 是一个系统文件,你需要 sudo 权限才能读取它。

在终端中输入以下命令并按回车键:

sudo cat /etc/sudoers

你将看到 /etc/sudoers 文件的内容。查找定义用户或用户组权限的行。你可能会看到类似以下的行(注释以 # 开头):

#
## This file MUST be edited with the 'visudo' command as root.
#
## Please consider adding local content in /etc/sudoers.d/ instead of
## directly modifying this file.
#
## See the man page for details on how to write a sudoers file.
#

Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

## Host alias specification

## User alias specification

## Cmnd alias specification

## User privilege specification
root	ALL=(ALL:ALL) ALL

## Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

## See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

%sudo ALL=(ALL:ALL) ALL 这一行尤为重要。它表示 sudo 组(%sudo)的任何成员都可以在任何主机(ALL)上以任何用户(ALL)和任何用户组(ALL)的身份执行任何命令(ALL)。这是在基于 Debian 的系统(如 Ubuntu)中向用户授予管理权限的常见方式。

通过查看此文件,你可以深入了解系统上 sudo 权限的配置方式。

点击 继续 进入下一步。

使用 groups 命令验证 sudo 组

在上一步中,你在 /etc/sudoers 文件中看到 sudo 组的成员拥有完整的 sudo 权限。在这一步中,你将使用 groups 命令验证 labex 用户确实是 sudo 组的成员。

groups 命令会显示每个指定用户名所属的主组和附属组的名称,如果未指定用户名,则显示当前进程所属的组。

在终端中输入以下命令并按回车键:

groups

你应该会看到类似以下的输出,列出 labex 用户所属的组:

labex sudo ssl-cert public

此输出表明 labex 用户是 labexsudossl-certpublic 组的成员。列表中存在 sudo 组,这证实了根据 /etc/sudoers 文件,labex 用户属于被授予 sudo 权限的组。

或者,你可以在 groups 命令中指定用户名:

groups labex

输出结果是一样的:

labex : labex sudo ssl-cert public

这一步强化了系统中组 membership(成员身份)与 sudo 权限之间的关联。

点击 继续 完成此实验。

总结

在这个实验中,你学习了如何检查 Linux 系统中用户是否拥有 sudo 访问权限。你首先使用 sudo -l 命令列出当前用户被允许以 sudo 权限运行的命令,这证实了 labex 用户无需密码即可拥有完全的 sudo 访问权限。

接着,你使用 cat 命令查看 /etc/sudoers 文件,以了解它在配置 sudo 权限方面的作用,不过需要强调的是,推荐使用 visudo 工具来编辑此文件。最后,你通常会使用 groups 命令验证用户是否属于 sudo 组,因为加入该组是授予 sudo 访问权限的常见方式。