是否有充分的理由运行sudo su?


78

要在禁用了root帐户的计算机上启动root shell,可以运行以下命令之一:

  • sudo -i:运行交互式登录外壳(读取/root/.bashrc/root/.profile
  • sudo -s:运行非登录交互式外壳程序(读取/root/.bashrc

在Ubuntu世界中,我经常看到sudo su建议将其作为获取root shell的一种方法。为什么要在执行一个命令的同时运行两个单独的命令?据我所知,sudo -i等于sudo su -sudo -s相同sudo su

唯一的区别似乎是(sudo -i在左侧和sudo su -右侧比较):

融合“ sudo -i”和“ sudo su-”的屏幕截图

并比较sudo -s(左)和sudo su(右):

融合“ sudo -s”和“ sudo su”的屏幕截图

主要的区别(忽略SUDO_foo变量和LS_COLORS)似乎是版本中的XDG_foo系统变量sudo su

在任何情况下,是否有必要使用不太雅致的差异sudo su?我能安全地告诉人们(就像我经常遇到的那样)跑步sudo su毫无意义,还是我错过了什么?


8
我从来不理解那些ubuntu妨碍用户标准的幻想系统su -。他们制造了问题,现在就如何解决这个问题进行了无休止的讨论。
jimmij 2015年

16
@jimmij您是否不需要知道root密码su -?您是否认为这在多用户环境中构成安全漏洞,在该环境中,不止一个人需要具有root用户访问权限?
Erathiel

4
@Christopher问题不是拥有sudo特权或root密码的用户之一,可以入侵系统。问题与密码安全性有关。更改root密码时,需要让所有需要它的用户知道,这很困难。使用sudo,您就没有这个困难。
惠更斯2015年

4
什么是差异工具?
Josh The Geek,2015年

5
@jimmij Ubuntu如何阻止使用su -?是的,必须设置一个root密码,但这很简单。
Phize

Answers:


62

正如您在问题中所述,主要区别在于环境。

sudo su -sudo -i

在的情况下,sudo su -这是一个登录shell,所以/etc/profile.profile.bashrc被执行,你会发现自己在根目录的主目录的根环境。

sudo -i是几乎相同sudo su --i(模拟初始登录)选项运行由目标用户的密码数据库条目作为登录shell指定的壳。这意味着登录特定资源文件等.profile.bashrc.login将被读取并通过shell中执行。

sudo susudo -s

sudo susudo用命令调用su。Bash被称为交互式非登录外壳。因此bash只能执行.bashrc。您可以看到切换到root之后,您仍然在同一目录中:

user@host:~$ sudo su
root@host:/home/user#

sudo -s读取$SHELL变量并执行内容。如果$SHELL包含,/bin/bash它将调用sudo /bin/bash,这意味着它/bin/bash是作为非登录外壳程序启动的,因此所有的点文件都不会执行,而是bash自身读取。bashrc主叫用户。您的环境保持不变。您的家将不是根的家。因此,您是root用户,但在调用用户的环境中。

结论

-i标记是sudo2004年添加的,以提供与相似的功能sudo su -,因此sudo su -模板也是如此,sudo -i并且可以像这样工作。我认为使用哪个并不重要,除非环境不重要。

加成

这里必须提到的一个基本要点是,它sudo被设计为只运行一个具有更高特权的命令,然后将那些特权放到原始特权中。从来没有打算真正切换用户并保留root外壳。随着时间的流逝,sudo这种机制得到了扩展,因为人们对为什么sudo在每个命令前使用它感到恼火。

因此,的含义sudo被滥用了。sudo旨在鼓励用户最小化root特权的使用。

我们现在sudo拥有的越来越受欢迎。它几乎集成在每个知名的Linux发行版中。切换到另一个用户帐户的原始工具是su。对于一个老学校*尼克斯退伍军人来说,这样的事情sudo似乎不必要。它增加了复杂性,并且更可能影响我们从Microsoft操作系统家族了解的机制,因此与* nix系统的简单性哲学背道而驰。

我不是真正的资深人士,但在我看来sudo,从被引入的那一刻起,我始终是我的荆棘sudo。我最不愿意使用sudo。在我所有的系统上,都启用了root帐户。但是事情会改变,也许是时候了,什么时候su过时并完全sudo取代su

因此,我认为,最好使用sudo的内部机制(-s-i)而不是依赖于诸如的旧工具su


4
嗯,所以在2004年之前,实际上还有一个理由可以参加sudo su吗?当时我正在使用没有sudo和有效root帐户的发行版,所以我不知道。这也许可以解释sudo su meme在Ubuntu世界中的盛行。
terdon

8
我从不知道sudo -isudo -s以前从未知道过-自1991年以来我一直在运行各种UNIX,对我而言sudo su -,这只是一种根深蒂固的习惯。
蓬松的

2
sudo -s那个一样sudo $SHELL
塞缪尔·埃德温·沃德

3
(同意@chaos)使用的原因sudo su -是1)它可以正常工作,并且您确切知道它的作用; 2)您不必记住另一种选择sudo(当您已经知道时su -); 3)您不需要不必记住sudo您当前正在使用哪个版本。当您已有的东西可以正常工作时,为什么还记得另外一件琐事呢?su -i除了避免输入日志之外,还有没有什么比它更好的了?我用的sudo su -不够担心。
jrw32982

3
我刚刚看到了更新,非常好!作为记录,让我指出,我在没有使用no的系统上也割过* nix牙齿,sudo并且非常习惯su。两者的结合让我很烦。
terdon

16

要直接回答您的问题:不,没有充分的理由这样做。同样,当一个足够时,sudo su会生成两个日志条目。

我见过很多人这样做,当我问他们为什么不跑时sudo -s,答案就是他们不知道-ssudo标志,通常他们在我指出之后进行切换。

但是,在您的sudo -s和列表中sudo -i,我想再添加一个选项sudo -sE,该选项可以代替su -msudo -sE保留您的环境,包括主目录。如果您的主目录不安全(在NFS上),则存在风险。但是,在许多人使用root的环境中,它使您不必同意root .bashrc文件的内容。我的计算机.bashrc包含许多关于root的专业知识,因此我没有与root完全相同的环境,但是至少我得到了我想要的环境。


4
如果保留了您的环境(包括$HOME),则意味着在home文件夹下创建的所有新文件均归root所有,而不是您所有。我有这个原因导致许多难以诊断的权限错误。
伊里斯(Eris)

sudo -sE然后echo $HOME给出了/root在CentOS 7时,bash 4.2。-sE似乎没有保留您所说的主目录。
jeremysprofile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.