
Ubuntu 20.04 LTS サーバー バージョンを使用していますが、新しいユーザーを作成して SSH 接続からシェルで使用すると奇妙な問題が発生します。再現手順は次のとおりです。
- ルート アカウントを使用して、 を使用して新しいユーザーを作成します
useradd --create-home test
。 - を使用してテストするには、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
またはの下にある場合は-l
、su
ログインシェルは、.profile
(.bashrc
は常にソースされる必要があります) をソースします。
どのファイルがロードされているかを確認するには、ファイルの先頭に簡単な行を挿入します。
echo "$BASH_SOURCE" >&2