为什么“sudo -u root echo `whoami`”没有返回root?

为什么“sudo -u root echo `whoami`”没有返回root?

如何使用 sudo 以 Ubuntu 上的实际 root 用户身份运行命令?我原本以为这是 sudo 的默认行为,直到我运行:

myuser@localhost:~$ sudo echo `whoami`
myuser

myuser@localhost:~$ sudo -u root echo `whoami`
myuser

但是,这是我想要的行为类型,但只需一行:

myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root

答案1

sudo echo `whoami` 

返回你的名字,因为whoami在 sudo 运行之前你的用户名发生了变化。就像:

sudo echo myname

您可以看到这些代码:

myname@mypc:~$ whoami
myname

myname@mypc:~$ sudo whoami
root

myname@mypc:~$ echo `whoami`
myname

myname@mypc:~$ sudo echo `whoami`
myname

myname@mypc:~$ sudo `echo whoami`
root

myname@mypc:~$ sudo -i
[sudo] Password for myname: ******

root@mypc:~$ whoami
root

root@mypc:~$ echo `whoami`
root

谢谢

答案2

事实上以 root 身份运行它们。但是,你所发生的事情是,反引号正在被评估 sudo运行,因为它们需要用来评估命令。更直接地说,为什么不这样呢:

sudo whoami

您的whoami反向标记实际上是在子 shell 中作为当前用户进行评估的,这就是您看到所做事情的原因。

答案3

子 shell ( whoami) 首先被执行,结果 ( myuser) 被放入sudo命令中;sudo看到的是echo myuser。可以将其视为以下的快捷方式:

tmpvar=`whoami`
sudo echo "$tmpvar"

答案4

sudo 允许您以 root 权限运行任何命令,但不能以 root 用户身份运行。这个设置很有用,因为使用此设置,多个人可以拥有 root 权限,但所有日志记录等仍会显示谁进行了更改。

这种设置比共享 root 密码更好。因此,它已经取代了包括 Ubuntu 在内的许多发行版中的 root 用户。

另一方面,sudo su 会使您成为 root 用户,因此不应真正使用。

这种差异也解释了您观察到的(正确)行为。

相关内容