LDAPクライアントで重複したユーザー名を解決するLDAPメカニズムは何ですか?

LDAPクライアントで重複したユーザー名を解決するLDAPメカニズムは何ですか?

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リストに追加されます。loginfilesinitgroups(3)nsswitch.confabc

ls -l逆に、uid 番号が与えられたユーザー名を探します。を使用しましたが、getpwuid(3)プロセスは同じです。 uid 1001に対応するユーザー名を見つけるには、まずデータベースに照会し、次にfilesそのuidに対応するユーザー名がない場合はLDAPに照会します。 uid 1001のユーザー名がない場合、データベースは/etc/passwduid 1001の最初のユーザー名を取得します。ldap

したがって、お客様のシステムでは、以下を期待しています。

  • abc解決1000files
  • 1000解決abcfiles
  • 1001abcを通じて解決されましたldap

アカウントデータベースのユーザー名は主キーである必要があるため、異なる属性を持つ2つのユーザー名は解決する必要がある病理学的状況です(ここではおそらくアカウントエントリを削除してください/etc/passwd)。

同じuidに対して2つのユーザー名を持つことは大丈夫ですが、最近はあまり一般的ではなく、一部のソフトウェア(たとえば)はうまくsudo機能しないため、通常は避けるのが最善です。

おすすめ記事