Linux中的Sudo命令

时间:2020-02-23 14:40:33  来源:igfitidea点击:

Sudo是Linux管理员和都使用最广泛的命令之一。
在本教程中,我们将介绍sudo命令及其用法。

在大多数Linux系统的安装过程中,通常需要一个用户来创建root用户,也称为超级用户和普通用户。
root用户具有执行系统中任何任务的所有特权和权限。
作为root用户,您可以执行敏感任务,例如安装/卸载软件包,更新/升级系统存储库,对系统配置进行修改以及创建新用户(仅举几例)。

俗话说,能力越大,责任就越大。
以root用户身份进行一些更改可能对您的系统有害,并且可能导致无法挽回的损害并最终导致系统崩溃。
例如,删除启动配置文件将使您的系统无法启动。
因此,建议默认情况下,用户应以普通用户或者非root用户身份操作系统。

那么,当您需要普通用户的root特权来执行管理任务时会发生什么呢?在这种情况下,需要向普通用户授予sudo特权。
然后,普通用户需要在命令前加上" sudo"前缀才能以root用户身份执行它们。

在Ubuntu/Debian中创建新的sudo用户

要将用户添加到sudo组,请以root用户身份执行以下命令。

usermod -aG  sudo username

例如,假设我们的系统中有一个名为" james"的普通用户,则命令为:

usermod -aG sudo james

输出

在RHEL/CentOS/Fedora中创建新的sudo用户

要将普通用户添加到RHEL/CentOS和Fedora中的sudoers组,我们必须修改/etc/sudoers文件。
要实现此命令,请运行" visudo"命令。

visudo

输出

追加以下行,并用您的真实用户名替换username属性。

username ALL = (ALL) ALL

输出

按ESC并输入:wq,然后最后按'ENTER'保存。

Sudo命令示例

现在,让我们深入研究一下sudo命令的示例用法。

以普通用户身份运行具有管理特权的命令

如果您以普通的非root用户身份运行,请在命令前加上" sudo",如图所示。

sudo command_to_execute

例如,以常规用户身份在Ubuntu&Debian中更新系统

sudo apt update

系统将提示您输入密码。
提供您的密码,然后点击" ENTER"。
请注意,即使您以root用户身份运行命令,也需要提供密码而不是root密码。

输出

对于Fedora系统,执行:

sudo dnf update

输出

对于RHEL/CentOS,执行:

sudo yum update

清除sudo缓存

当用户第一次尝试使用sudo执行任何命令时,在后续操作中将不会提示他们输入密码。
这是因为sudo命令在过期前仅缓存了几分钟。

要清除此缓存,请运行:

sudo -k

如果您在运行上述命令后尝试执行任何操作,将提示您输入密码。

输出

查看允许的命令

如果您有点好奇并希望知道可以执行的命令,只需运行

sudo -l

输出

在Ubuntu系统中切换到root用户

默认情况下,Ubuntu Systems不附带root用户。
要执行管理任务,必须首先首先切换到root并继续执行命令。

要在Ubuntu系统中更改为root用户,请执行:

sudo su

使用sudo以其他用户身份运行命令

Sudo命令还可以允许您以其他用户身份运行命令。
实现此目的的语法是

sudo -u username command_to_be_run

例如;

sudo -u james whoami

输出

有关sudo命令的更多用法,只需运行以下命令以访问其帮助页面。

man sudo

我们可以使用sudo命令更改root密码吗?

实际上,是的,我们可以通过运行以下命令来更改root密码。
我们可以通过以sudo权限运行passwd来更改任何用户密码。

$sudo passwd root

它将要求root用户输入新密码。
只要提供新密码,root密码就会更改。

Sudo重定向输出

有时我们必须将输出重定向到我们无法直接访问的位置。
我们无法按原样使用sudo命令来执行此操作,因为我们的shell会执行重定向,并且它无权访问该目录。

$sudo ls /root > /root/ls.out
-bash: /root/ls.out: Permission denied
$

有几种替代方法可以执行此操作。
第一个是使用sudo启动新的shell,然后使用-c选项将命令传递给它。
这个新的shell将具有sudo访问权限以写入指定位置。

$sudo sh -c 'ls /root > /root/ls.out'

也有其他选择。
您可以使用该命令创建Shell脚本,然后使用sudo执行它。

$cat ls1.sh 
#!/bin/sh
ls /root > /root/ls1.out
$sudo ls1.sh

我们也可以使用sudo -s命令启动一个shell,然后运行这些重定向命令。

如何找到sudoers用户列表?

具有" sudo"特权的用户列表位于"/etc/group"文件中。

$cat /etc/group | grep -P '^sudo'
sudo:x:27:hyman
$

输出的最后一部分包含具有sudo访问权限的用户列表。
您可以进一步修改命令以仅打印用户列表。

$cat /etc/group | grep -P '^sudo' | cut -d: -f4
hyman
$

sudo和su命令之间的区别

关于使用sudo和su命令存在一些误解。
尽管有些人认为它们可以互换使用,但是两者之间存在一些细微的差异。

sudo命令允许普通用户执行或者执行系统级命令,这些命令是root用户的特殊保留。
sudo是命令之前的前缀,并在执行命令之前提示普通用户的密码。
另外,要执行命令,需要将用户添加到sudoers组。

另一方面,su命令可让您完全从常规用户切换为root用户。
在这种情况下,您需要提供root密码才能输入root提示符。

在像Ubuntu发行版这样的独特情况下,将创建一个没有密码的root用户。
这是为了阻止任何人以root用户身份登录。
因此,需要为root用户创建密码。
但是,当普通用户需要进入root提示符并执行如图所示的管理任务时,这两个命令会一起使用。

hyman@ubuntu:~$su 
Password: 
root@ubuntu:~# exit
hyman@ubuntu:~$

我们必须提供上面的root密码,而不是用户密码。
我们还可以切换到任何其他用户。

hyman@ubuntu:~$su - james
Password: 
james@ubuntu:~# exit
hyman@ubuntu:~$
hyman@ubuntu:~$sudo su
[sudo] password for hyman: 
root@ubuntu:/home/hyman#