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
ある程度認識になります。
何が問題なのでしょうか?
修正する
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/passwd
LDAPまたはLDAP)に格納されているホームディレクトリのパス名は同じ形式でなければなりません。~
これにより、単純な文字列比較と交換操作でホームディレクトリパスを置き換えることができます。