debian su - 和 su $PATH 的区别?

use*_*108 11 bash root debian su

$ su -
Password: 
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# exit
logout
$ su
Password: 
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Run Code Online (Sandbox Code Playgroud)

我不知道为什么 /bin 和 /sbin 没有添加到$PATH,如果我做普通的 su 。过去就是这样。我怎样才能解决这个问题?我确实注意到:

-rw-r--r-- 1 root root 0 Jan  8  2018 /etc/environment
Run Code Online (Sandbox Code Playgroud)

但除此之外,我的系统似乎很正常。

编辑:我忘了强制性的 uname -a

Linux rpi3 4.17.0-1-arm64 #1 SMP Debian 4.17.8-1 (2018-07-20) aarch64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

编辑2:

$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l
Run Code Online (Sandbox Code Playgroud)

所有的包都来自“测试”repo,因为“稳定”的包在 aarch64 上不能很好地工作。

sca*_*cai 21

最近(util-linux2018 年 7 月 27 日的2.32-0.2 版)Debian 切换到不同的su实现,请参阅错误 833256。“新”su来自,util-linux而“旧”则包含在login包装中并起源于src:shadow

引自util-linux/NEWS.Debian.gz

这两个实现非常相似,但有一些细微的差异(当然可能还有更多尚未注意到的),例如

  • 新的“su”(没有参数,即在保留环境时)也保留 PATH 和 IFS,而旧的 su 将始终重置 PATH 和 IFS,即使在“保留环境”模式下。
  • su '' (空用户字符串) 用于给 root,但现在返回一个错误。
  • 以前 su 只有一个 pam 配置,但现在 'su -' 在 /etc/pam.d/su-l 中单独配置

第一个区别可能是用户最明显的区别。出于多种原因,执行简单的“su”是一个非常糟糕的主意,因此强烈建议使用“su -”来始终获得类似于正常登录的新设置环境。如果您想恢复与前一个更相似的行为,您可以在 /etc/login.defs 中添加“ALWAYS_SET_PATH yes”。

之前使用的su实现在PATH. 此错误报告中也讨论了这一点,请参阅833256#80。新的su蜜饯PATH,如果与调用su -

简而言之:Debian 的旧su表现就像su -,至少对于PATH. 对于新的实现,您几乎应该总是使用su -,类似于其他发行版。