Linux 中的 Sudo 命令

sudo 命令允许您以另一个用户身份运行程序,默认情况下是 root 用户。如果你在命令行上花了很多时间, sudo 就是你经常使用的命令之一。

使用 sudo 而不是以 root 身份登录更安全,因为您可以单个用户在不知道 root 密码的情况下为授予有限的管理权限。

在本教程中,我们将解释如何使用 sudo 命令。

安装 Sudo

sudo 包预装在大多数 Linux 发行版上。

要检查系统上是否安装了 sudo 软件包,请打开控制台,键入 sudo 并按 Enter 。如果您安装了 sudo ,系统将显示一条简短的帮助消息,否则您将看到类似的内容 sudo command not found

如果未安装 sudo ,您可以使用发行版的软件包管理器轻松安装它。

在 Ubuntu 和 Debian 上安装 Sudo

apt install sudo

在 CentOS 和 Fedora 上安装 Sudo

yum install sudo

将用户添加到 Sudoers

默认情况下,大多数 Linux 发行版授予 sudo 访问权限就像将用户添加到 sudoers 文件中定义的 sudo 组一样简单。该组的成员将能够以 root 身份运行任何命令。组的名称可能因分发而异。

在基于 RedHat 的发行版(如 CentOS 和 Fedora) 上, sudo 组的名称是 wheel 。要将用户添加到组运行:

usermod -aG wheel username

在 Debian , Ubuntu 及其衍生品上,该组的成员 sudo 被授予 sudo 访问权限:

usermod -aG sudo username

出于安全原因,默认情况下禁用 Ubuntu 中的 root 用户帐户,并鼓励用户使用 sudo 执行系统管理任务。由 Ubuntu 安装程序创建的初始用户已经是 sudo 组的成员,因此如果您正在运行 Ubuntu ,则您登录的用户可能已被授予 sudo 权限。

如果要允许特定用户仅将某些程序作为 sudo 运行,而不是将用户添加到 sudo 组,请将用户添加到该 sudoers 文件中。

例如,要允许用户 buzheng 仅以 mkdirsudo  身份运行命令,请键入:

sudo visudo

并附加以下行:

buzheng  ALL=/bin/mkdir

在大多数系统上,visudo 命令使用 vim 文本编辑器打开文件 /etc/sudoers 。如果您没有使用 vim 的经验,请查看我们关于如何保存文件并退出 vim 编辑器的文章

您还可以允许用户在不验证自身的情况下运行 sudo 命令:

buzheng  ALL=(ALL) NOPASSWD: ALL

如何使用 Sudo

sudo 命令的语法如下:

sudo OPTION.. COMMAND

sudo 命令有控制其行为的选项,但通常 sudo 以最基本的形式使用,没有任何选项。

要使用 sudo ,只需在命令前加上 sudo

sudo command

command 您要使用 sudo 的命令在哪里。

Sudo 将读取该 /etc/sudoers 文件并检查评估调用的用户是否被授予 sudo 。第一次在会话中使用 sudo 时,系统将提示您输入用户密码,命令将以 root 身份执行。

例如,要列出 /root 您将使用的目录中的所有文件:

sudo ls /root
[sudo] password for buzheng:
.  ..  .bashrc	.cache	.config  .local  .profile

密码超时

默认情况下, sudo 会在 sudo 不活动五分钟后再次要求您输入密码。您可以通过编辑 sudoers 文件来更改默认超时。打开文件 visudo

sudo visudo

通过添加下面的行来设置默认超时,其中 10 是以分钟为单位指定的超时:

Defaults  timestamp_timeout=10

如果要仅为特定用户更改时间戳,请添加以下行,其中 user_name 是相关用户。

Defaults:user_name timestamp_timeout=10

以 Root 以外的用户身份运行命令

有一种错误的看法, sudo 仅用于向普通用户提供 root 权限。实际上,您可以使用 sudo 以任何用户身份运行命令。

-u 选项允许您以指定用户身份运行命令。

在以下示例中,我们使用 sudo 以 “richard” 用户身份运行命令 whoami

sudo -u richard whoami

whoami 命令将打印运行该命令的用户的名称:

richard

如何使用 Sudo 重定向

如果您尝试将命令的输出重定向到您的用户没有写权限的文件,您将收到“权限被拒绝”错误。

sudo echo "test" > /root/file.txt
bash: /root/file.txt: Permission denied

发生这种情况是因为 > 输出的重定向是在您登录的用户下执行的,而不是由 sudo 指定的用户。重定向在 sudo 调用命令之前发生。

一种解决方案是使用 sudo sh -c 以下方法以 root 身份调用新 shell  :

sudo sh -c 'echo "test" > /root/file.txt'

另一种选择是将输出作为常规用户传递给 tee 命令,如下所示:

echo "test" | sudo tee /root/file.txt

结论

您已经学习了如何使用 sudo 命令以及如何使用 sudo 权限创建新用户。