Answers:
该sudo su
命令代表“切换用户”,并允许您成为另一个用户。它允许被允许的用户以超级用户或另一个用户的身份执行命令,如sudoers文件中所指定。
‑i(模拟初始登录)选项将由目标用户的密码数据库条目指定的外壳作为登录外壳运行。这意味着外壳将读取特定于登录的资源文件,例如.profile或.login。如果指定了命令,则通过外壳的‑c选项将其传递到外壳以执行。如果未指定命令,则执行交互式外壳程序。
资料来源:手册页
sudo su
,则系统会要求您输入密码,而不是root密码。root用户甚至不需要密码。无论如何,如果管理员使用root密码,这并不意味着所有普通用户都知道该密码。
sudo
运行su
,root可以su
在不知道其密码的情况下对任何用户开放。关于该系统如何工作的根本误解应归咎于IMO。
sudo -i
也不要求输入root的密码,因此与该问题无关。
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
?
man su
(比您链接的要长)说它是的一部分shadow-utils 4.1.5.1
。我的man
页面也说$PATH
即使--preserve-environment
使用也已设置。所以我想这真的只是不同版本的之间的区别su
。
/etc/pam.d/sudo
并且/etc/pam.d/su
可能设置为完全不同或完全相同。