如何使用 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 用户,因此不应真正使用。
这种差异也解释了您观察到的(正确)行为。