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)に格納されているホームディレクトリのパス名は同じ形式でなければなりません。~これにより、単純な文字列比較と交換操作でホームディレクトリパスを置き換えることができます。

関連情報