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文件中。

例如,要允许用户myfreax以sudo身份仅运行 mkdir 命令,请输入:

sudo visudo

并添加以下行:

myfreax  ALL=/bin/mkdir

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

您还可以允许用户不用输入密码即可运行sudo命令

myfreax  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 myfreax:
.  ..  .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权限创建新用户。

如果您有任何疑问,请随时发表评论。

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持