就像标题所说,这两个命令之间有区别吗:
sudo su - root
sudo -u root -H /bin/bash
我正在使用 GNU/Linux,如果这有什么区别的话。
答案1
如果您想成为 root,最好的方法是sudo -i
模拟初始登录(为您提供与 root 登录关联的所有路径和变量)。如果你想在没有root用户的情况下登录.文件,您可以直接使用sudo su
(无需指定root用户)。
答案2
su - # causes the user to run a login shell aka bash --login
# the same as if the user had logged in as the root from the login prompt
与指定 rootsudo su -
相同是多余的。sudo su - root
sudo -u root -H /bin/bash
同样-u root
是多余的,sudo
默认情况下以 root 身份运行,但-H /bin/bash
作为 sudoer 运行,环境变量 SUDO_USER、SUDO_UID 和 SUDO_COMMAND 分别设置为调用者名称/uid 和 bash。
但在这种情况下,bash 不作为登录 shell 运行。
答案3
显然,如果 root shell 不是 /bin/bash,它们可能会有所不同 - 这对于微型或嵌入式 Linux 环境是可能的,或者对于 root 用户更喜欢 /bin/[t]csh 的传统 BSD 系统来说是可能的。另外,“su -”会删除除与终端相关的一些变量之外的所有环境。 sudo 在环境中的行为是可配置的(请参阅 /etc/sudoers 中的 env_reset)。所以,一定要注意细节...
答案4
您列出的两个命令之间最大的区别是运行su -
将导致 shell 成为登录 shell。这意味着 root 的 shell 的登录脚本将被执行(例如 .bash_profile,如果是 bash),PWD 将被设置为 $HOME,并且用户环境的某些部分将被初始化。 sudo bash
只是运行一个新的 shell 作为目标用户的 shell,而 -H 只是将一个变量 $HOME 初始化为目标用户的主目录。其他变量将不会被设置,并且一些变量将被转移到新 shell,如 sudo 策略中所定义。