
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:
- Verwenden Sie das Root-Konto, um einen neuen Benutzer zu erstellen
useradd --create-home test
. - 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 su
heißt es:
Aus Gründen der Abwärtskompatibilität
su
wird 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--login
Option (anstelle der Tastenkombination-
) zu verwenden, um Nebenwirkungen durch das Mischen von Umgebungen zu vermeiden.
Wenn unter --login
oder -l
, su
läuft auch einAnmeldungShell, die wiederum die Quelle .profile
( .bashrc
sollte 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