Der Befehl „su“ hat den BASH_VERSION-Wert nicht festgelegt und das Profil nicht geladen

Der Befehl „su“ hat den BASH_VERSION-Wert nicht festgelegt und das Profil nicht geladen

Ich habe eine Ubuntu 20.04 LTS-Serverversion und habe ein seltsames Problem beim Erstellen eines neuen Benutzers und dessen Verwendung in der Shell über eine SSH-Verbindung. Die Schritte zur Reproduktion:

  1. Verwenden Sie das Root-Konto, um einen neuen Benutzer zu erstellen useradd --create-home test.
  2. Melden Sie sich zum Testen als Root-Benutzer an su test.

Das Ergebnis:

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

Die Eingabeaufforderung ist nicht festgelegt, die Umgebungsvariablen sind nicht geladen, die automatische Vervollständigung funktioniert nicht, die Aliase funktionieren nicht. Es ist, als ob die Dateien .profile und .bashrc nicht existieren würden, aber sie existieren und ihre Berechtigungen sind korrekt festgelegt:

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

Warum wird das Profil nicht geladen, wenn ich mich als Testbenutzer anmelde?

Antwort1

In der Dokumentation suheißt es:

Aus Gründen der Abwärtskompatibilität suwird standardmäßig das aktuelle Verzeichnis nicht geändert und nur die Umgebungsvariablen HOME und SHELL (sowie USER und LOGNAME, wenn der Zielbenutzer nicht root ist) festgelegt. Es wird empfohlen, immer die --loginOption (anstelle der Tastenkombination -) zu verwenden, um Nebenwirkungen durch das Mischen von Umgebungen zu vermeiden.

Wenn unter --loginoder -l, suläuft auch einAnmeldungShell, die wiederum die Quelle .profile( .bashrcsollte immer als Quelle verwendet werden) ist.

Um zu sehen, welche Dateien geladen werden, fügen Sie am Anfang dieser Dateien eine einfache Zeile ein:

echo "$BASH_SOURCE" >&2

verwandte Informationen