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

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

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

答案1

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 "$@"
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 -的话,这种情况就不会发生。

答案2

su -让你完全以root身份登录,而su让你假装是root。

最明显的例子是,~如果使用 ,则为 root 的主目录su -,但如果使用 ,则为您自己的主目录su

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

因此,如果您是管理系统的团队的一员,并且您的同事给您一个运行命令,您知道如果你们都使用 ,那么它的工作原理是相同的su -,但如果你们都使用su,则可能会因为你们有差异而存在差异不同的外壳配置。

另一方面,如果您想以 root 身份运行命令但使用您自己的配置,那么也许su更适合您。

另外不要忘记sudo,它有一个-s选项来启动以 root 身份运行的 shell。当然,这也有不同的规则,并且它们会根据您使用的发行版而变化。

答案3

主要区别是:

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

su username只需为指定用户启动一个具有当前环境设置的 shell。

如果未使用su和指定用户名su -,则默认使用 root 帐户。

答案4

我使用 su -- 当我作为普通用户位于目录中但想要切换到 root 并在切换后保留在同一目录中时。当您使用 su - 时,它将用户切换为 root,并且还会将您带到 /root,这是根主目录。

相关内容