Bow*_*ark 0 bash ldap ubuntu home tilde
在 Ubuntu 22.04.3 LTS 中,如果我使用 LDAP 用户的凭据登录testuser
,在几个不同的程序中,目录的路径$HOME
不会被替换~
(相反,本地用户会发生这种情况)。
举几个例子:
在 中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)
在 中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
。
问题是/
LDAP 定义中的尾随字符$HOME
:
Run Code Online (Sandbox Code Playgroud)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; }
Run Code Online (Sandbox Code Playgroud)
一旦将交换分配给主目录的绝对路径,您就会看到这HOME="$HOME/"
一点~
。