在 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\]\$
但它显示为
testuser@myhost:/home/testuser$
代替
testuser@myhost:~$
在 中
neomutt
,在列出邮件目录的左栏中,显示其完整路径/home/testuser/Mail/mailbox1
代替
~/Mail/mailbox1
然而,在bash
,
$ echo $HOME
/home/testuser
所以这个env
变量HOME
在某种程度上是被认可的。
这可能是什么问题?
更新
我用来sssd
管理 LDAP 用户的身份验证:
$ 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
命令返回当前工作目录而不附加斜杠,主要是因为这就是 system/libc 调用返回的方式getcwd()
,符合 POSIX 合规性。存储在用户记录中的主目录路径名(无论是在/etc/passwd
LDAP 中还是在 LDAP 中)应采用相同的格式。~
这允许通过简单的字符串比较和替换操作来替换主目录路径。