解决 LDAP 客户端上重复用户名的 LDAP 机制是什么?

解决 LDAP 客户端上重复用户名的 LDAP 机制是什么?

在 LDAP 客户端上,有两个用户具有相同的用户名,例如“abc”。一个是 UID 1000 的本地用户,另一个是 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 的本地用户。结果,当我运行 command 时ls -al ~,由于主文件的所有者 UID 是 1001,由于 UID 不匹配而无法映射到本地用户“abc”,因此上述 ls 命令输出的所有者应该是数字 1001 (这是未配置LDAP客户端的情况)。然而,实际输出是正确的“abc”。所以,我不明白为什么会发生这种情况。当我明确指定“files”位于“ldap”之前时,LDAP 机制如何设法解决 LDAP 客户端上的重复用户名?

LDAP 计算机正在运行 Ubuntu 22.04.3 LTS 服务器。

答案1

getpwnam(3)用于解析abc为一个数字,就像在login您输入用户名后将首先查询files并找到它,其中 uid 1000 和 gid 1000 所以就停在那里。initgroups(3)将迭代所有数据库中的所有组(但再次遵守 中的顺序nsswitch.conf)并将 gid 添加到abc作为成员提及的每个组的补充 gid 列表中。

ls -l反之亦然,它会查找给定 uid 号的用户名。使用getpwuid(3),但过程是相同的。要查找与 uid 1001 对应的用户名,它将首先查询数据库files,如果那里没有用户名具有该 uid,则接下来查询 LDAP。如果 中没有 uid 1001 的用户名,您将获得数据库中 uid 1001 的/etc/passwd第一个用户名。ldap

所以在你的系统上,我期望:

  • abc解决1000通过files
  • 1000解决abc通过files
  • 1001解决abc通过ldap.

帐户数据库中的用户名应该是主键,因此两个具有不同属性的用户名是一种病态的情况,应该解决(这里可能通过删除 中的条目/etc/passwd)。

同一 uid 有两个用户名是可以的,但现在不太常见,而且某些软件(例如)sudo不能很好地使用它,因此通常最好也避免。

相关内容