libnss-ldap getent passwd - AD 正确回复,但输出显示本地 /etc/passwd

libnss-ldap getent passwd - AD 正确回复,但输出显示本地 /etc/passwd

我正在尝试配置 libnss-ldap 以向我的 Linux Debian 服务器提供 AD 身份验证。如果用户存在于本地,则此方法可正常工作,我想使其适用于域用户。

这是我的 /etc/ldap.conf 文件内容:

host $AD_IP
base ou=Users,dc=MY,dc=DOMAIN
uri ldap:///$AD_IP
ldap_version 3
binddn [email protected]
bindpw $password
pam_filter objectclass=user

nss_base_passwd ou=Users,dc=MY,dc=DOMAIN
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName
nss_map_attribute uniqueMember Member
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_objectclass posixGroup Group
pam_login_attribute sAMAccountName
pam_filter objectclass=User
pam_password ad

这是我的 /etc/nsswitch.conf

passwd: compat ldap
group:  compat ldap
shadow: compat ldap
...

当我输入命令时

getent passwd

输出是本地 /etc/passwd 文件。但 tcpdump 显示请求已正确发送到 AD,并且 AD 返回了整个用户列表。我认为 getent 命令检索的数据被错误解释(nss_map_* 配置不正确?),因此 getent 最终返回本地信息(nsswitch 首先尝试 ldap,然后尝试 compat)。

如何纠正此 /etc/ldap.conf 配置以使其正常工作?

非常感谢

答案1

如果可以的话,我建议更改如何在 AD 中验证用户。

libnss-ldap 是一个非常古老的库,存在大量内存泄漏,并且多年未更新。我不知道为什么它仍然在发行版中可用,人们一直建议在我们有更好的解决方案时使用它。

我从未使用过 AD,但我确信ssd 的可以很好地处理这个问题。

我从谷歌获得的第一个链接: https://blog.dlasley.net/2013/06/configure-linux-for-active-directory-authentication-with-sssd/

在为 libnss-ldap 和 libpam-ldap 制作补丁几乎要了我的命之后,我刚刚开始使用 sssd 连接到我的 OpenLDAP 服务器。

如果你因为某种原因无法使用 sssd,那么另一个可能对你有用的库就是它。libnss-ldapd,它是一个基于 libnss-ldap 的版本并且仍在更新,绝对比 libnss-ldap 更好,并且最新版本(0.9)几乎具有 libnss-ldap 的所有功能。

请注意,即使 sssd 配置正确,当您使用getent passwd它来获取整个列表时,您也无法从 LDAP 中获取用户列表。

为了测试你可以使用$ id <ldap_user>$ getent passwd <ldap_user>

getent单独仅适用于 libnss-ldap 或 libnss-ldapd。

相关内容