Ubuntu는 /home/testuser를 ~로 번역하지 않습니다.

Ubuntu는 /home/testuser를 ~로 번역하지 않습니다.

Ubuntu 22.04.3 LTS에서 LDAP 사용자의 자격 증명을 사용하여 로그인하면 testuser몇 가지 다른 프로그램에서 디렉터리 경로가 $HOME바뀌지 않습니다 ~(로컬 사용자의 경우와 마찬가지로).

몇 가지 예를 들면 다음과 같습니다.

  1. 에서는 bash값이 PS1기본값입니다.

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
    

하지만 그것은 다음과 같이 표시됩니다

testuser@myhost:/home/testuser$

바꾸다

testuser@myhost:~$
  1. 에서 neomutt메일 디렉터리를 나열하는 왼쪽 열에 전체 경로를 표시합니다.

    /home/testuser/Mail/mailbox1
    

바꾸다

   ~/Mail/mailbox1

그러나bash

$ echo $HOME
/home/testuser

그래서 이 env변수는 HOME어느 정도 인식이 됩니다.

무엇이 문제일까요?


고쳐 쓰다

LDAP 사용자를 관리하는 데 사용하는 인증 sssd:

$ grep passwd /etc/nsswitch.conf 
passwd:         files systemd sss

LDAP 사용자 및 로컬 사용자에 대한 항목은 매우 유사해 보입니다.

$ getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash

$ getent passwd localuser
localuser:x:<uid>:<gid>:,,,:/home/localuser:/bin/bash

그리고

$ echo $HOME
/home/testuser/

에 지정된 홈 디렉토리와 일치합니다 getent passwd testuser.

답변1

문제는 /LDAP 정의의 후행 문자 입니다 $HOME.

getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash

로컬 사용자 계정을 사용하여 이를 시연할 수 있습니다.

OHOME="$HOME"
cd "$HOME"

HOME="$HOME/"
cd "$HOME"

HOME="$OHOME"
[ -n "$OHOME" ] && { HOME="$OHOME"; unset OHOME; }

스왑을 홈 디렉토리의 절대 경로에 할당하면 HOME="$HOME/"이 내용을 볼 수 있습니다 ~.

답변2

사용자 홈 디렉토리에 대한 LDAP 레코드의 디렉토리 경로 끝에 추가 슬래시가 있는 것 같습니다.

/home/testuser/

바꾸다

/home/testuser

예, 실제로 디렉토리임을 나타내기 위해 디렉토리 이름 끝에 슬래시를 추가하는 것이 일반적입니다. 그러나 이것은 사용자를 위한 추가 장식일 뿐이며 경로 이름의 표준 형식은 아닙니다.

예를 들어, 이 pwd명령은 슬래시를 추가하지 않고 현재 작업 디렉터리를 반환합니다. 이는 주로 getcwd()POSIX 준수를 위해 system/libc 호출이 슬래시를 반환하는 방식이기 때문입니다.사용자 레코드( /etc/passwdLDAP 또는 LDAP)에 저장된 홈 디렉토리 경로 이름은 동일한 형식이어야 합니다.~이를 통해 간단한 문자열 비교 및 ​​교체 작업을 통해 홈 디렉터리 경로를 교체할 수 있습니다.

관련 정보