我正在尝试配置 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。