LDAPクライアントには、同じユーザー名(「abc」など)を持つ2人のユーザーがいます。 1つはUID 1000を持つローカルユーザー、もう1つはUID 1001を持つLDAPユーザーです。を実行するとgetent passwd 1000
返される出力は次のようになります。
abc:x:1000:1000:ローカルユーザー:/home/abc:/bin/bash
を実行するとgetent passwd 1001
返される出力は次のようになります。
abc:x:1001:100:LDAP ユーザー:/home/abc:/bin/bash
ホームディレクトリはNFSサーバーに保存され、私のホームディレクトリのファイルはすべてLDAPユーザーによって作成されるため、デフォルトファイルのUIDはすべて1001です。 passwd、group、およびShadowフィールドでは、「files」が「ldap」の前にあります/etc/nsswitch
。私が理解したのは、この順序はLDAPクライアントが最初にローカルデータベースを検証するため、abcというローカルユーザーが使用されることです。その結果、コマンドを実行すると、ls -al ~
デフォルトファイルの所有者UIDが1001で、UIDの不一致が原因でローカルユーザー「abc」にマップできないため、上記のlsコマンドの所有者出力は数字1001でなければなりません。 (これはLDAP構成クライアントの状況ではありません)。しかし、実際の出力は「abc」が正確です。だからなぜこれが起こるのかわかりません。 「ldap」の前に「files」を明示的に指定した場合、LDAPメカニズムはLDAPクライアントで重複したユーザー名をどのように解決しますか?
LDAPシステムはUbuntu 22.04.3 LTSサーバーを実行しています。
ベストアンサー1
getpwnam(3)
ユーザー名を入力してabc
数字で解析するには、まずuid 1000とgid 1000でクエリして検索します。そこで停止してください。すべてのデータベース内のすべてのグループが繰り返され(ただし、再度の順序を尊重し)、gidはメンバーと呼ばれる各グループの補足gidリストに追加されます。login
files
initgroups(3)
nsswitch.conf
abc
ls -l
逆に、uid 番号が与えられたユーザー名を探します。を使用しましたが、getpwuid(3)
プロセスは同じです。 uid 1001に対応するユーザー名を見つけるには、まずデータベースに照会し、次にfiles
そのuidに対応するユーザー名がない場合はLDAPに照会します。 uid 1001のユーザー名がない場合、データベースは/etc/passwd
uid 1001の最初のユーザー名を取得します。ldap
したがって、お客様のシステムでは、以下を期待しています。
abc
解決1000
策files
1000
解決abc
策files
1001
abc
を通じて解決されましたldap
。
アカウントデータベースのユーザー名は主キーである必要があるため、異なる属性を持つ2つのユーザー名は解決する必要がある病理学的状況です(ここではおそらくアカウントエントリを削除してください/etc/passwd
)。
同じuidに対して2つのユーザー名を持つことは大丈夫ですが、最近はあまり一般的ではなく、一部のソフトウェア(たとえば)はうまくsudo
機能しないため、通常は避けるのが最善です。