`sudo -i -u 用户`和`sudo su - 用户`有什么区别?

21

两个命令:

sudo -i -u username
sudo su - username

如果我输入我的密码,那么会将我登录为用户名。这些命令之间实际上有任何区别吗?


4
运行命令 sudo -i -u username,检查你的环境变量,然后运行命令 sudo su - username,再次检查你的环境变量。你应该会看到它们不同。 - Mischa
1
也许这个答案对你有所帮助,我也在尝试寻找同样问题的答案。http://askubuntu.com/questions/376199/sudo-su-vs-sudo-i-vs-sudo-bin-bash-when-does-it-matter-which-is-used - Radan
1
还有非常重要的配置更改。如果您使用sudo su,那么除了您的sudoers配置之外,您的su PAM配置也很重要;如果只使用sudo,则仅依赖于sudo(以及其中包含的所有配置,例如其PAM模块、配置等),而另外使用su意味着您依赖于两个具有独立行为和配置的工具(并且前者需要配置以允许后者)。 - Charles Duffy
有趣的是,我刚刚看到一个情况,其中 sudo -i -u someuser 没有从 /etc/environment 设置变量,但是 sudo su - someuser 可以。(在这个 Ubuntu 14.04 系统上,sudo -i 曾经可以工作。) - cjs
1个回答

13
su 命令代表 "替换用户",可以让你成为不同的用户(超级用户)。 sudo su 将当前用户更改为 root,但是 环境设置(PATH) 会保持不变。它允许有权限的用户将命令作为超级用户或另一个用户执行,如 sudoers 文件中所指定的那样。
使用 sudo -i 可以获得一个干净的 root shell。 选项 ‑i (模拟初始登录)会运行目标用户密码数据库条目指定的 shell 作为登录 shell。这意味着登录特定的资源文件,例如 .profile 或者 .login 将被 shell 读取。如果指定了命令,则传递给 shell 执行通过 shell 的 ‑c 选项。如果没有指定命令,则执行交互式 shell。

4
据我所知,su代表着“替换用户”,而不是“切换用户”(甚至不是“超级用户”)。 - NaN
谢谢 NaN..我已经更正了..对于打字错误表示歉意。 - sTg
1
将当前用户更改为root,但环境设置(PATH)将保持不变 - 实际上这对我来说并不正确。 - Jan Dudulski
sudo su - 用户名,在这种情况下,bash 被称为登录 shell,因此会执行 /etc/profile、.profile 和 .bashrc,并且您将在用户的主目录中找到自己的环境。sudo su 和 sudo su - 之间有区别,请查看 http://askubuntu.com/questions/376199/sudo-su-vs-sudo-i-vs-sudo-bin-bash-when-does-it-matter-which-is-used - Radan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接