“sudo -s” 实际上起什么作用?

“sudo -s” 实际上起什么作用?

我正在使用 ubuntu 10.04。

我注意到在终端运行后:

sudo -s

提示从以下情况改变:

my_user@my_hostname

到:

root@my_hostname

似乎它已更改为 root 权限。

sudo但是当我检查命令的文档时这里,它解释了另一个故事sudo -s,有人能向我解释sudo -s一下到底在做什么吗?

答案1

这两者实际上并不一致 - 该sudo命令始终会更改用户,要么更改为 root,要么更改为您使用开关指定的用户-u。 它-s所做的只是提供以该用户身份启动 shell 的快捷方式。 它实际上相当于:

sudo $SHELL

除非它没有设置,否则它可能会回退到/bin/sh或其他方式。SHELL

答案2

sudo -s$SHELL以超级用户/root 身份运行环境变量中指定的 shell 。您可以使用 指定其他用户-u

环境$SHELL变量包含用户默认登录 shell 的路径。默认 shell 程序的实际设置通常位于 中etc/passwd。根据您在当前会话中执行的操作,变量$SHELL可能不包含您当前正在使用的 shell 程序。zsh例如,如果您使用 自动登录,但随后调用 bash,$SHELL则不会从 更改/bin/zsh

显示当前用户和shell程序:

echo $(whoami) is logged in and shell is $0
  • whoami打印出用户正在使用的用户名。
  • $0包含当前正在运行的程序(在本例中为 shell 程序)的名称/路径。

答案3

手册

sudo 允许允许的用户以超级用户或其他用户的身份执行命令,如 sudoers 文件中所指定。

-s Shell,运行 SHELL 环境变量指定的 shell(如果已设置)或者 passwd(5) 中指定的 shell。

更严重的是,sudo -s运行 shell 环境变量。由于您没有添加任何变量,因此它会按照 中指定的方式运行passwd,因此会以 root 身份连接您。

答案4

听起来好像是在当前 shell 之上创建了另一个 shell 实例,但具有 root 权限。我敢打赌,sudo -s如果你输入 exit,你就会回到原来的 shell。

相关内容