
У меня есть версия сервера Ubuntu 20.04 LTS и возникла странная проблема с созданием нового пользователя и использованием его в оболочке из ssh-подключения. Действия по ее воспроизведению:
- Используйте учетную запись root для создания нового пользователя с помощью
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 (плюс USER и LOGNAME, если целевой пользователь не является root). Рекомендуется всегда использовать опцию--login
(вместо ее сокращения-
), чтобы избежать побочных эффектов, вызванных смешиванием сред.
Когда под --login
или -l
, su
также запускаетсяавторизоватьсяshell, которая в свою очередь является источником .profile
( .bashrc
должна быть всегда источником).
Чтобы увидеть, какие файлы загружены, вставьте простую строку в их начало:
echo "$BASH_SOURCE" >&2