su
我知道和之间应该有什么区别su -
,但在我的系统(Debian)中PATH
是相同的:
[root]# su
[root]# echo $PATH
/user_path/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[root]# exit
[root]$ su -
[root@debian ~]# echo $PATH
/user_path/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
所以我开始认为可以在配置文件中更改设置。
答案1
要配置su
PATH
,请查看/etc/login.defs
:
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
还有一些其他地方PATH
可以更改,包括:
/etc/environment
/etc/bash.bashrc
/etc/profile
/etc/profile.d/*
~/.bashrc
~/.bash_profile
在每用户设置中没有任何特殊的内容,su
似乎是从 获取其环境PATH
,/etc/environment
并且su -
似乎是从 获取其环境/etc/login.defs
ENV_SUPATH
。
因此,在您的系统上,我的猜测是您在 中具有与 中相同的PATH
值,或者您在 , 中具有一些额外的配置,或者在 中具有一些 rc 文件。/etc/login.defs
/etc/environment
/etc/profile.d
/etc/bash.bashrc
/home/someuser
答案2
参数-
表示启动环境,与该用户的登录环境几乎相同。
没有-
环境与原始用户的环境相同。
例如,PATH
root 用户和普通用户通常是相同的。在某些系统中sbin
,普通用户没有文件夹。您无法-
轻松禁用su
。当然你可以去编辑源代码。
你可以通过运行来尝试这个
export FOO=bar
su # enter your password
echo $FOO
logout
su - # enter your password again
echo $FOO
第一次echo $FOO
打印“bar”,第二次打印为空。