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

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

sudo -s [command]


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

sudo -i手册中的描述消失

评论

另外,请勿使用su用户从不受信任的shell登录,而要使用su-user。参见unix.stackexchange.com/q/7013/8250

@Lekensteyn哇,很好的例子。大声笑的thx :)

永远记住旧的诫命:不要白白索取根的名字!

并不是说sudo -i不好,但是您可以肯定可以使用它进行***

几乎重复:askubuntu.com/questions/376199/…

#1 楼

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

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,因此不需要您输入目标用户的密码。因此,如果sudo su文件允许超级用户访问,则/etc/sudoers允许您以其他用户(包括root)的身份打开外壳。

评论


我从来没有把su看作是“切换用户”,但始终把它看作是超级用户。没有他人用户名的默认行为(尽管这很有意义)。来自维基百科:“ su命令,早在1974年也被称为超级用户[1],也被称为”替代用户”,”欺骗用户”或”设置用户”,因为它允许更改与当前帐户关联的帐户。终端(窗口)。”

– jimbob博士
2011-10-22 13:47

@dr jimbob:您是对的,但我发现“切换用户”有点能更好地描述其功能-尽管从历史上讲,它代表“超级用户”。我也很高兴发现维基百科的文章与我的回答非常相似-我以前从未看过这篇文章:)

–谢尔盖
2011-10-22 20:33



“ su”的正式含义是“替代用户”。请参阅:“ man su”。

–球形天使
13年11月26日在13:02

@ AngelO'Sphere:有趣的是,Ubuntu的联机帮助页根本没有提到“替代”。 gnu.org上的手册页(gnu.org/software/coreutils/manual/html_node/su-invocation.html)确实显示“ su:使用替代用户和组ID运行命令”。我认为gnu.org是一个规范的来源:)

–谢尔盖
13年11月26日在20:25

sudo su呢?

–卡兹·沃尔夫(Kaz Wolfe)
14-10-15在8:14

#2 楼

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

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

要查看susudo -s之间的区别,请分别执行cd ~pwd。在第一种情况下,您将位于root的主目录中,因为您是root。在第二种情况下,您将位于自己的主目录中,因为您自己具有root特权。

这里有更多关于此确切问题的讨论。

评论


“您自己具有root特权”实际上不是在发生:)实际上,不可能是“您自己具有root特权”-您是root还是您自己。在两种情况下都尝试输入whoami。 cd〜结果不同的事实是sudo -s没有设置$ HOME环境变量的结果。

–谢尔盖
11-10-22在7:28

@Sergey,它说的是“ root”用户,因为您正在运行“ whoami” cmd,就好像对它进行了sudo一样,因此暂时(在该命令期间)您似乎是root用户,但您可能仍然没有完整权限根据sudoers文件进行root访问。

–章鱼
2015年2月6日在22:15



@Octopus:我要说的是在Unix中,一个进程只能有一个UID,而该UID决定了该进程的权限。您不能“自己具有root特权”,程序要么以您的UID或以root的UID(0)运行。

–谢尔盖
2015年2月6日在22:24

关于“根据sudoers文件,您仍然可能没有完全的root用户访问权限”:sudoers文件控制谁可以以另一个用户身份运行哪个命令,但这是在命令执行之前发生的。但是,一旦允许您以root用户身份启动进程-运行的进程具有root用户的UID并具有对系统的完全访问权限,则sudo无法限制它。再说一次,您总是自己或生根,没有“一半一半”。因此,如果sudoers文件允许您以root用户身份运行shell,则该shell中的权限将与“普通” root shell没有区别。

–谢尔盖
2015年2月6日在22:32



#3 楼

这个答案是我对这个问题的重复的重复,放在这里是标准答案,以便人们可以找到它!

sudo -isudo -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的原因有两个:


视觉提醒您正在“ root”会话中。
root环境被恶意软件毒害的可能性要小得多,例如.bashrc中的流氓线。


评论


我注意到sudo -s似乎没有处理/ etc / profile或/etc/profile.d/中的任何内容。

– Northstrider
17年2月23日在5:21

@dotancohen-sudo -s是什么意思,它提供了用户熟悉的环境?

–动力十足
19年1月16日在19:18

@dotancohen-命令sudo -s已经提供了视觉提示,因此我对为什么sudo -i是更好的选择感到好奇。

–动力十足
19年1月16日在19:28

#4 楼

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

sudo询问您自己的密码(并检查是否允许以root身份运行命令,该命令是通过/etc/sudoers进行配置的-默认情况下允许所有属于“ admin”或“ sudo”组的用户帐户使用sudo)。

sudo -s以root用户身份启动Shell,但不会更改您的工作目录。 sudo -i模拟登录到root帐户:您的工作目录将是/root,而root的.profile等将作为登录时的源。

评论


使答案更完整:sudo -s几乎等于su($ HOME不同),而sudo -i等于su-

– DJCrashdummy
17年7月29日在0:58



@DJCrashdummy-为什么说几乎等于?有什么不同吗?

–动力十足
19年1月17日在4:38

#5 楼



su询问root密码,成为root,打开一个交互式非登录外壳。

su -询问root密码,成为root,打开交互式登录外壳。





sudo -s询问您的密码,成为root,打开一个交互式非登录外壳。

sudo -i询问您的密码,成为root用户,打开一个交互式登录外壳。

最佳做法是使用这两个。




sudo su询问您的密码,成为root用户一秒钟,然后以root用户身份运行su

sudo su -询问您的密码,成为root用户一秒钟并以root用户身份运行su -

因此,在这种情况下,您将使用su运行sudo,而不必知道root的实际密码。结果与susu -相同。

评论


登录和非登录外壳有什么区别?

–Pilot6
19年8月12日在16:50

另一个问题?

–Ravexina♦
19年8月12日在16:52

#6 楼

在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视情况而定。