问题描述
我已经从手册中读到了它,但我看不出差别..
su
– 更改用户ID或成为超级用户
sudo -s [command]
-s
(shell)选项运行由SHELL环境变量(如果已设置)指定的shell或passwd(5)中指定的shell。如果指定了一个命令,它将被传递给shell执行。否则,执行交互式shell。
sudo -i
手册中的消失说明
最佳解决方法
这些命令之间的主要区别在于它们限制对其功能的访问。
su
(意味着”substitute user”或”switch user”) – 完全是这样,它使用目标用户的特权启动另一个shell实例。为确保您有权这样做,它会要求您输入目标用户的密码。因此,要成为root用户,您需要知道root密码。如果您的计算机上有多个用户需要以root用户身份运行命令,他们都需要知道root密码 – 请注意,它将是相同的密码。如果您需要撤销其中一位用户的管理员权限,则需要更改root密码并将其仅告诉给需要保持访问权限的人员 – 乱七八糟。
sudo
(嗯…什么是助记符?Super-User-DO?)是完全不同的。它使用一个配置文件(/etc /sudoers)列出哪些用户对特定操作具有权限(以root用户身份运行命令等)。当调用时,它会要求启动它的用户的密码 – 以确保终端实际上是在/etc/sudoers
中列出的”joe”。要撤消某个人的管理员权限,只需编辑配置文件(或从该配置中列出的组中删除该用户)。这导致特权的更清洁管理。
因此,在许多Debian-based系统中,root
用户没有设置密码 – 即无法直接以超级用户身份登录。
此外,/etc/sudoers
允许指定一些附加选项 – 即用户X只能运行程序Y等。
often-used sudo su
组合的工作方式如下:首先sudo
询问您的密码,如果允许,请将下一个命令(su
)作为super-user调用。由于su
由root
调用,因此不需要输入目标用户的密码。因此,如果允许/etc/sudoers
文件访问super-user文件,sudo su
允许您以另一个用户(包括root)的身份打开shell。
次佳解决方法
sudo
允许您以自己的用户帐户以root权限运行命令。 su
允许您切换用户,以便您实际上以root身份登录。
sudo -s
以root权限运行一个shell。 sudo -i
还获取root用户的环境。
要查看su
和sudo -s
之间的区别,请在cd ~
和pwd
之后执行每个cd ~
。在第一种情况下,您将位于root的主目录中,因为您是root用户。在第二种情况下,您将位于您自己的主目录中,因为您拥有root权限。
还有更多关于这个确切问题here的讨论。
第三种解决方法
这个答案是我在a dupe of this question上的答案的一个骗局,放在这个规范的答案,以便人们可以找到它!
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
有两个原因:
-
视觉提示您处于’root’会话中。
-
根环境不太可能被恶意软件毒害,例如
.bashrc
中的流氓线。
第四种方法
su
询问用户”root”的密码。
sudo
要求输入您自己的密码(还要检查是否允许以root身份运行命令(通过/etc/sudoers
配置) – 默认情况下,允许属于”admin”组的所有用户帐户都使用sudo)。
sudo -s
以root身份启动一个shell,但不会更改您的工作目录。 sudo -i
模拟登录到root帐户:您的工作目录将是/root
,并且root的.profile
等将在登录时获得。
第五种方法
在Ubuntu或相关系统中,对于传统的super-user意义上的su
,我找不到太多用处。 sudo
处理这种情况要好得多。但是,su
非常适合在one-off情况下成为另一个用户,在这种情况下配置sudoers会很愚蠢。
例如,如果我从Live CD /USB修复我的系统,我经常会将我的硬盘驱动器和其他必要的东西以及chroot
安装到系统中。在这种情况下,我的第一条命令通常是:
su - myuser # Note the '-'. It means to act as if that user had just logged in.
这样,我不是以root身份运行,而是以我的普通用户身份运行,然后根据情况使用sudo
。