su コマンドは BASH_VERSION 値を設定せず、プロファイルをロードしません

su コマンドは BASH_VERSION 値を設定せず、プロファイルをロードしません

Ubuntu 20.04 LTS サーバー バージョンを使用していますが、新しいユーザーを作成して SSH 接続からシェルで使用すると奇妙な問題が発生します。再現手順は次のとおりです。

  1. ルート アカウントを使用して、 を使用して新しいユーザーを作成します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ログインシェルは、.profile(.bashrcは常にソースされる必要があります) をソースします。

どのファイルがロードされているかを確認するには、ファイルの先頭に簡単な行を挿入します。

echo "$BASH_SOURCE" >&2

関連情報