su
-更改用户ID或成为超级用户sudo -s [command]
-s
(shell)选项运行由SHELL环境变量指定的shell(如果已设置)或passwd(5)中指定的shell。如果指定了命令,则将其传递到Shell以执行。否则,将执行交互式外壳。
sudo -i
手册中的描述消失#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用户的环境。要查看
su
和sudo -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 -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
的原因有两个:视觉提醒您正在“ 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的实际密码。结果与su
和su -
相同。评论
登录和非登录外壳有什么区别?
–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
视情况而定。
评论
另外,请勿使用su用户从不受信任的shell登录,而要使用su-user。参见unix.stackexchange.com/q/7013/8250@Lekensteyn哇,很好的例子。大声笑的thx :)
永远记住旧的诫命:不要白白索取根的名字!
并不是说sudo -i不好,但是您可以肯定可以使用它进行***
几乎重复:askubuntu.com/questions/376199/…