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

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

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

 sudo -s [command] 

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

sudo -i 在手册中消失了描述

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

su (表示“替换用户”或“切换用户”) – 确切地说,它启动另一个具有目标用户权限的shell实例。 为确保您有权这样做,它会要求您提供目标用户的密码。 因此,要成为root用户,您需要知道root密码。 如果您的计算机上有多个用户需要以root身份运行命令,则他们都需要知道root密码 – 请注意它将是相同的密码。 如果您需要撤消其中一个用户的管理员权限,则需要更改root密码,并仅将其告知那些需要保持访问权限的人 – 凌乱。

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

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

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

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

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

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

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

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

这个答案是我对这个问题的一个骗局的答案,在这里放在规范的答案上,以便人们可以找到它!

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

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

这是一个例子,你可以看到我的~/.bin/目录中有一个应用程序lsl ,它可以通过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的流氓行。

su要求输入用户“root”的密码。

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

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

在Ubuntu或相关系统中,我没有在传统的超级用户意义上找到su用处。 sudo处理这个案子要好得多。 但是, su非常适合在一次性情况下成为另一个用户,配置sudoers会很愚蠢。

例如,如果我从现场CD / USB修复我的系统,我会经常将我的硬盘和其他必要的东西和chroot到系统中。 在这种情况下,我的第一个命令通常是:

 su - myuser # Note the '-'. It means to act as if that user had just logged in. 

这样,我不是以root用户身份运行,而是以普通用户身份运行,然后根据需要使用sudo