Ubuntu 不会将 /home/testuser 翻译为 ~

Bow*_*ark 0 bash ldap ubuntu home tilde

在 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\]\$
    
    Run Code Online (Sandbox Code Playgroud)

但它显示为

testuser@myhost:/home/testuser$
Run Code Online (Sandbox Code Playgroud)

代替

testuser@myhost:~$
Run Code Online (Sandbox Code Playgroud)
  1. 在 中neomutt,在列出邮件目录的左栏中,显示其完整路径

    /home/testuser/Mail/mailbox1
    
    Run Code Online (Sandbox Code Playgroud)

代替

   ~/Mail/mailbox1
Run Code Online (Sandbox Code Playgroud)

然而,在bash,

$ echo $HOME
/home/testuser
Run Code Online (Sandbox Code Playgroud)

所以这个env变量HOME在某种程度上是被认可的。

这可能是什么问题?


更新

我用来sssd管理 LDAP 用户的身份验证:

$ grep passwd /etc/nsswitch.conf 
passwd:         files systemd sss
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

$ echo $HOME
/home/testuser/
Run Code Online (Sandbox Code Playgroud)

与 中指定的主目录匹配getent passwd testuser

roa*_*ima 5

问题是/LDAP 定义中的尾随字符$HOME

getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash
Run Code Online (Sandbox Code Playgroud)

您可以使用本地用户帐户来演示这一点:

OHOME="$HOME"
cd "$HOME"

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

HOME="$OHOME"
[ -n "$OHOME" ] && { HOME="$OHOME"; unset OHOME; }
Run Code Online (Sandbox Code Playgroud)

一旦将交换分配给主目录的绝对路径,您就会看到这HOME="$HOME/"一点~