我已经从手册中阅读了,但看不到区别。
su
-更改用户ID或成为超级用户
sudo -s [command]
的-s
(壳)的选择,因为在passwd中所指定运行,或者如果它被设置由SHELL环境变量指定的壳的壳(5)。如果指定了命令,则将其传递到外壳程序以执行。否则,将执行交互式外壳程序。
sudo -i
消失手册中的描述
sudo -i
,但您肯定可以使用它
我已经从手册中阅读了,但看不到区别。
su
-更改用户ID或成为超级用户
sudo -s [command]
的-s
(壳)的选择,因为在passwd中所指定运行,或者如果它被设置由SHELL环境变量指定的壳的壳(5)。如果指定了命令,则将其传递到外壳程序以执行。否则,将执行交互式外壳程序。
sudo -i
消失手册中的描述
sudo -i
,但您肯定可以使用它
Answers:
这些命令之间的主要区别在于它们限制对功能的访问。
su
(这意味着“替代用户”或“切换用户”) -正是这样做的,它使用目标用户的特权启动了另一个shell实例。为了确保您有权执行此操作,它会要求您输入目标用户的密码。因此,要成为root用户,您需要知道root密码。如果您的计算机上有多个用户需要以root用户身份运行命令,那么他们都需要知道root密码-请注意,该密码将是相同的密码。如果您需要撤消其中一位用户的管理员权限,则需要更改root密码,然后仅将其告知需要保持访问权限的人员-混乱。
sudo
(嗯……助记符是什么?超级用户DO?)是完全不同的。它使用一个配置文件(/ etc / sudoers),该文件列出了哪些用户有权执行特定操作(以root用户身份运行命令等)。调用该文件时,它会询问启动它的用户的密码 -以确保该用户在终端的确与列出的终端相同/etc/sudoers
。要撤消某人的管理员特权,您只需要编辑配置文件(或从该配置中列出的组中删除该用户)。这样可以更清晰地管理特权。
因此,在许多基于Debian的系统中,root
用户没有设置密码-即无法直接以root用户身份登录。
此外,/etc/sudoers
允许指定一些其他选项-即用户X仅能够运行程序Y等。
常用的sudo su
组合如下:首先sudo
询问您的密码,然后,如果允许您输入密码,则以su
超级用户身份调用下一个命令()。因为su
是由调用的root
,所以不需要您输入目标用户的密码。因此,sudo su
如果/etc/sudoers
文件允许超级用户访问,则允许您以其他用户(包括root)的身份打开外壳。
su
“切换用户”,但总是超级用户。没有其他用户名的默认行为(尽管这是有道理的)。来自维基百科:“ su命令,早在1974年也被称为超级用户[1],也被称为”替代用户”,”欺骗用户”或”设置用户”,因为它允许更改与当前帐户关联的帐户。终端(窗口)。”
sudo su
呢
sudo
使您可以以root用户特权在自己的用户帐户中运行命令。su
让您切换用户,以便您实际上以root用户身份登录。
sudo -s
使用root特权运行shell。sudo -i
还获取root用户的环境。
要看到的区别su
和sudo -s
,做cd ~
再pwd
后他们每个人。在第一种情况下,您将位于root的主目录中,因为您是root。在第二种情况下,您将位于自己的主目录中,因为您自己具有root特权。
有这个确切的问题进行更多的讨论在这里。
cd ~
结果不同的事实是sudo -s未设置$ HOME环境变量的结果。
sudoers
文件控制谁可以另一个用户身份运行哪个命令,但这是在命令执行之前发生的。但是,一旦允许您以root用户身份启动进程-运行的进程具有root用户的UID并具有对系统的完全访问权限,则sudo无法限制它。同样,您总是自己或生根,没有“一半一半”。因此,如果sudoers
文件允许您以root用户身份运行shell,则该shell中的权限将与“普通” root shell没有区别。
这个答案是我对这个问题的重复的重复,放在规范的答案上,以便人们可以找到它!
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
:
.bashrc
。sudo -s
提供用户熟悉的环境是什么意思?
su
询问用户“ root”的密码。
sudo
询问您自己的密码(并且还检查是否允许您以root用户身份运行命令,该命令是通过/etc/sudoers
-默认情况下配置的,属于“ admin”或“ sudo”组的所有用户帐户都可以使用sudo)。
sudo -s
以root身份启动外壳程序,但不更改您的工作目录。 sudo -i
模拟登录到root帐户:您的工作目录将是/root
,并且root的名称.profile
等将作为登录时的来源。
sudo -s
几乎等于su
($ HOME是不同的)并且sudo -i
等于su -
在Ubuntu或相关系统中,su
在传统的超级用户意义上,我找不到太多用处。sudo
处理这种情况要好得多。但是,su
这对于在一次性配置sudoer会很愚蠢的情况下成为另一个用户非常有用。
例如,如果要通过实时CD / USB修复系统,则经常将硬盘驱动器和其他必要的东西安装chroot
到系统中。在这种情况下,我的第一个命令通常是:
su - myuser # Note the '-'. It means to act as if that user had just logged in.
这样,我不是以root用户身份,而是以我的普通用户身份进行操作,然后sudo
在适当时使用它。
su
询问root密码,成为root,打开一个交互式非登录Shell。 su -
询问root密码,成为root,打开一个交互式登录shell。sudo -s
询问您的密码,成为root用户,打开一个交互式非登录外壳。sudo -i
询问您的密码,成为root用户,打开一个交互式登录Shell。最佳实践是使用这两个。
sudo su
询问您的密码,成为root用户一秒钟,然后以root用户身份运行su
。sudo su -
询问您的密码,成为root用户一秒钟,然后su -
以root用户身份运行。因此,在这种情况下,您正在su
使用,sudo
而不必知道root的实际密码。结果与su
和相同su -
。
su user
从不受信任的Shell登录su - user
。见unix.stackexchange.com/q/7013/8250