“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用户的环境。
要查看su
和sudo -s
之间的区别,请执行cd ~
然后在每个之后执行pwd
。 在第一种情况下,你将在root的主目录中,因为你是root用户。 在第二种情况下,您将位于自己的主目录中,因为您拥有root权限。
这里有更多关于这个问题的讨论。
这个答案是我对这个问题的一个骗局的答案,在这里放在规范的答案上,以便人们可以找到它!
sudo -i
和sudo -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
有两个原因:
- 视觉提示您处于“根”会话中。
- 根环境不太可能被恶意软件毒害,例如
.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
。