su 命令未设置 BASH_VERSION 值且未加载配置文件

su 命令未设置 BASH_VERSION 值且未加载配置文件

我有一个 Ubuntu 20.04 LTS 服务器版本,在创建新用户并通过 ssh 连接在 shell 中使用它时遇到了一个奇怪的问题。重现此问题的步骤如下:

  1. 使用 root 帐户创建新用户useradd --create-home test
  2. 以 root 用户登录来测试使用su test

结果:

root@server:~# useradd --create-home test;
root@server:~# echo $BASH_VERSION
5.0.17(1)-release
root@server:~# su test;
$ echo $BASH_VERSION
$

提示未设置,环境变量未加载,自动完成功能不起作用,别名不起作用,就好像 .profile 和 .bashrc 文件不存在,但它们确实存在并且已正确设置其权限:

root@server:/home/test# md5sum /etc/skel/.profile ./.profile 
f4e81ade7d6f9fb342541152d08e7a97  /etc/skel/.profile
f4e81ade7d6f9fb342541152d08e7a97  ./.profile
root@server:/home/test# md5sum /etc/skel/.bashrc ./.bashrc
1f98b8f3f3c8f8927eca945d59dcc1c6  /etc/skel/.bashrc
1f98b8f3f3c8f8927eca945d59dcc1c6  ./.bashrc
root@server:/home/test# ls -lah
total 24K
drwxr-xr-x  3 test test 4.0K Sep 18 13:18 .
drwxr-xr-x  9 root root 4.0K Sep 18 13:17 ..
-rw-r--r--  1 test test  220 Feb 25  2020 .bash_logout
-rw-r--r--  1 test test 3.7K Feb 25  2020 .bashrc
-rw-r--r--  1 test test  807 Feb 25  2020 .profile

为什么当我以测试用户身份登录时配置文件没有加载?

答案1

正如文件所说su

为了向后兼容,su默认不更改当前目录,仅设置环境变量 HOME 和 SHELL(如果目标用户不是 root,则加上 USER 和 LOGNAME)。建议始终使用 选项--login(而不是其快捷方式-),以避免混合环境造成的副作用。

当处于--login或之下时-lsu还运行登录shell,它反过来提供.profile.bashrc应该始终提供)。

要查看已加载的文件,请在这些文件的开头插入一行简单的内容:

echo "$BASH_SOURCE" >&2

相关内容