sudo su和sudo -i之间的功能区别是什么?


19

在此示例中,为什么一个偏爱另一个?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

请提供指向Ubuntu文档的链接。


请重新考虑您对“已接受”答案的选择。投票最低的实际上是唯一正确的。
凯尔·斯特兰德

Answers:


15

sudo su命令代表“切换用户”,并允许您成为另一个用户。它允许被允许的用户以超级用户或另一个用户的身份执行命令,如sudoers文件中所指定。

‑i(模拟初始登录)选项将由目标用户的密码数据库条目指定的外壳作为登录外壳运行。这意味着外壳将读取特定于登录的资源文件,例如.profile或.login。如果指定了命令,则通过外壳的‑c选项将其传递到外壳以执行。如果未指定命令,则执行交互式外壳程序。

资料来源:手册页


1
“使用su会带来安全问题,并且本质上是危险的。” 什么?
停止Harming Monica

1
如果您运行sudo su,则系统会要求您输入密码,而不是root密码。root用户甚至不需要密码。无论如何,如果管理员使用root密码,这并不意味着所有普通用户都知道该密码。
停止Harming Monica

2
不,不会。以root身份sudo运行su,root可以su在不知道其密码的情况下对任何用户开放。关于该系统如何工作的根本误解应归咎于IMO。
停止危害莫妮卡

3
删除您的评论只会增加混乱。
停止危害莫妮卡

1
您没有使它变得更好。sudo -i也不要求输入root的密码,因此与该问题无关。
停止危害莫妮卡

14

sudo su仅将当前用户更改为root。环境设置(如PATH)保持不变。

sudo -i 创建一个全新的环境,就像root刚登录一样。

如果您使用其他用户,则差异更加明显。之后,sudo su bob您将处于鲍勃状态,但位于同一地点。在sudo -i -u bob您成为bob之后,请在bob的主目录中,使用bob的默认Shell,并使用bob的.profile脚本和任何其他登录脚本。

有关man sudo更多信息,请参见-i。不幸的是,man su在细节上还不够。


找到了一个版本man su(来自login-1:4.1.4.2 + svn3283-3ubuntu5.1),其内容如下:

$ PATH根据/etc/login.defs选项ENV_PATH或ENV_SUPATH(请参见下文)重置;

如果已将$ IFS重置为“ <space> <tab> <newline>”。

请注意,环境的默认行为如下:

$ HOME,$ SHELL,$ USER,$ LOGNAME,$ PATH和$ IFS环境变量被重置。

如果未使用--login,则将复制环境,但上述变量除外。

如果使用--login,则将设置$ TERM,$ COLORTERM,$ DISPLAY和$ XAUTHORITY环境变量。

PAM模块可能会设置其他环境。

因此,是否以及在何种程度上sudo su改变环境取决于您的分布和设置。因此,sudo -i从理论上讲更便于携带。


su 确实会更改环境设置,并且可用于使用-或模拟登录-l。即使没有-l$PATH 也会被更改。在提出这些要求之前,请对其进行测试!(您是说PWD保持不变吗?)
凯尔·斯特兰德

真正的问题是sudo su -和之间是否有区别sudo -i
凯尔·斯特兰德

1
您显然正在对此进行思考,并实际上在Shell中进行了一些测试,因此,我为我的小题大作“测试这些声明”而表示歉意。就是说,在我的系统上,我确实观察到$PATHsu不使用sudo(使用root密码)的情况下进行了更改。根据info su(在您的答案中链接到它可能是更好的选择),su确实确实会为您成为的用户读取密码条目。$PATH我观察到的更改可能与系统有关(我在Debian 7上)。
凯尔·斯特兰德

1
嗯 我的man su(比您链接的要长)说它是的一部分shadow-utils 4.1.5.1。我的man页面也说$PATH即使--preserve-environment使用也已设置。所以我想这真的只是不同版本的之间的区别su
凯尔·斯特兰德

1
该行为也受您的PAM配置影响。/etc/pam.d/sudo并且/etc/pam.d/su可能设置为完全不同或完全相同。
停止Harming Monica

7

主要问题是(不是)合理的环境设置之一。

使用sudo su新的外壳程序可以从发出命令的用户那里获得其环境-这可能是有问题的。

随着sudo -i您得到一个干净的根壳。

请参阅有关sudo和shell的特别说明

仍然观察到,根本不需要创建根外壳。


您链接说的“特别说明” sudo -i类似于sudo su -,实际上并没有从发出命令的用户那里获得环境。
凯尔·斯特兰德

@KyleStrand THX指出了这一点-它是一个错字,真正的问题是关于sudo susudo -i
guntbert
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.