“su”、“sudo -s”、“sudo -i”、“sudo su” 之间有什么区别?

“su”、“sudo -s”、“sudo -i”、“sudo su” 之间有什么区别?

我已经从手册中读到了它,但我看不出区别。

su- 更改用户 ID 或成为超级用户

sudo -s [command]

( shell -s) 选项运行由 SHELL 环境变量指定的 shell(如果已设置)或 passwd(5) 中指定的 shell。如果指定了命令,则该命令将传递给 shell 执行。否则,将执行交互式 shell。

sudo -i 手册中的描述消失

答案1

这些命令之间的主要区别在于它们限制对其功能的访问的方式。

su (意思是“替代用户”或“切换用户”)- 正是这样做的,它会以目标用户的权限启动另一个 shell 实例。为了确保您有权执行此操作,它会要求您输入密码目标用户的。因此,要成为 root,您需要知道 root 密码。如果您的机器上有多个用户需要以 root 身份运行命令,他们都需要知道 root 密码 - 请注意,密码相同。如果您需要撤销某个用户的管理员权限,您需要更改 root 密码,并只告诉那些需要保留访问权限的人 - 很麻烦。

sudo (嗯...助记符是什么?超级用户 DO?)完全不同。它使用一个配置文件 (/etc/sudoers),该文件列出了哪些用户有权执行特定操作(以 root 身份运行命令等)。调用时,它会要求启动它的用户的密码 - 确保终端上的人确实是 中列出的同一个“joe” /etc/sudoers。要撤销某人的管理员权限,您只需编辑配置文件(或从该配置中列出的组中删除用户)。这会使权限管理更加清晰。

因此,在许多基于 Debian 的系统中,root用户没有设置密码 - 即无法直接以 root 身份登录。

此外,/etc/sudoers还允许指定一些附加选项 - 例如用户 X 只能运行程序 Y 等等。

常用的sudo su组合方式如下:首先sudo要求您你的密码,并且,如果允许的话,su以超级用户身份调用下一个命令 ( )。因为su是由 调用的root,所以它不需要您输入目标用户的密码。因此,sudo su如果文件允许您以超级用户身份访问,则允许您以其他用户(包括 root)身份打开 shell /etc/sudoers

答案2

sudo允许您以 root 权限在您自己的用户帐户中运行命令。su允许您切换用户,以便您实际上以 root 身份登录。

sudo -s以 root 权限运行 shell。sudo -i还获取 root 用户的环境。

su要查看和之间的区别sudo -s,请在每个命令后执行cd ~pwd。在第一种情况下,您将位于 root 的主目录中,因为您是 root 用户。在第二种情况下,您将位于您自己的主目录中,因为您自己具有 root 权限。

关于这个问题还有更多讨论这里

答案3

这个答案与我的答案相同这个问题的重复,把规范答案放在这里,以便人们可以找到它!

sudo -i和之间的主要区别sudo -s是:

  • sudo -i为您提供根环境,即您的环境~/.bashrc被忽略。
  • sudo -s为您提供用户的环境,因此您的环境~/.bashrc受到尊重。

lsl下面是一个示例,您可以看到我的目录中有一个应用程序~/.bin/,可以通过 访问,sudo -s但无法通过 访问sudo -i。还请注意,Bash 提示符会随着 而改变,sudo -i但不会随着 而改变sudo -s

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

虽然sudo -s可以方便地为您提供熟悉的环境,我建议使用sudo -i原因有二:

  1. 视觉提醒您处于“根”会话中。
  2. 根环境不太可能受到恶意软件(例如 中的恶意线路)的攻击.bashrc

答案4

su询问用户“root”的密码。

sudo要求您输入自己的密码(并且还检查您是否被允许以 root 身份运行命令,这是通过以下方式配置的/etc/sudoers——默认情况下,属于“admin”或“sudo”组的所有用户帐户都被允许使用 sudo)。

sudo -s以 root 身份启动 shell,但不会更改您的工作目录。 sudo -i模拟登录到 root 帐户:您的工作目录将是/root,并且 root 的.profile目录等将像登录时一样被获取。

相关内容