Linux系统中的Sudo命令

评论 0 浏览 0 2019-06-16

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

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

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

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

例如,要允许用户linuxize以sudo身份只运行mkdir命令,请键入:

sudo visudo

并附加以下一行:

linuxize  ALL=/bin/mkdir

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

您还可以允许用户在不输入密码的情况下运行sudo命令

linuxize  ALL=(ALL) NOPASSWD: ALL

如何使用Sudo

sudo命令的句法如下:

sudo OPTION.. COMMAND

sudo命令有许多选项来控制它的行为,但通常情况下,它是以最基本的形式使用的,没有任何选项。

要使用sudo,只需在命令前加上sudo的字样:

sudo command

其中command是你想使用sudo的命令。

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

例如,要列出/root目录下的所有文件,你可以使用:

sudo ls /root

输出

[sudo] password for linuxize:
.  ..  .bashrc	.cache	.config  .local  .profile

密码超时

默认情况下,sudo会在sudo不活动5分钟后要求你再次输入密码。你可以通过编辑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重定向?

如果你试图将一个命令的输出重定向到一个你的用户没有写入权限的文件,你会得到一个 "Permission denied "的错误。

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权限的新用户。

如果你有任何问题,请随时留言。

最后更新2023-06-02
0 个评论
标签