su 명령이 BASH_VERSION 값을 설정하지 않고 프로필을 로드하지 않습니다.

su 명령이 BASH_VERSION 값을 설정하지 않고 프로필을 로드하지 않습니다.

Ubuntu 20.04 LTS 서버 버전이 있는데 새 사용자를 생성하고 SSH 연결을 통해 셸에서 사용하는 데 이상한 문제가 있습니다. 그것을 재현하는 단계:

  1. 을 사용하여 새 사용자를 만들려면 루트 계정을 사용하십시오 useradd --create-home test.
  2. 를 사용하여 테스트하려면 루트 사용자로 로그인하십시오 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 포함)만 설정하는 것입니다. 환경 혼합으로 인해 발생하는 부작용을 방지하려면 항상 --login바로가기 대신 옵션을 사용하는 것이 좋습니다 .-

--login또는 아래에서도 다음을 실행합니다 -l.su로그인.profile셸은 ( .bashrc항상 소스로 제공되어야 함) 소스를 제공합니다.

어떤 파일이 로드되었는지 확인하려면 파일 시작 부분에 간단한 줄을 삽입하세요.

echo "$BASH_SOURCE" >&2

관련 정보