![LDAP 身份验证失败](https://linux22.com/image/658066/LDAP%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%A4%B1%E8%B4%A5.png)
我尝试设置一个 LDAP 目录,以便对 Debian 用户进行身份验证。配置完 LDAP 服务器和 PAM 文件后,身份验证失败。我认为客户端无法在目录中找到 ldap 用户。当我尝试使用 ldap 用户登录时,系统提示登录失败;当我尝试使用本地用户登录时,系统会询问我密码,然后询问 LDAP 密码。
服务器
1)我首先安装了 ldap-utils libldap-2.4-2 libldap-2.4-2-dbg slapd slapd-dbg
2)在文件 /etc/ldap/ldap.conf 中:
BASE dc=example,dc=com
URI ldap://192.168.1.254/
3)
dpkg-reconfigure slapd
我检查有关域名的信息是否正确:正确。
4)
ldapsearch -x
跟我之前选择的很吻合。
5)我为目录和用户创建 .ldif 文件
结构.ldif:
dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
u: users
description: users
dn: ou=computers,dc=example,dc=com
objectClass: organizationalUnit
ou: computers
description: computers
dn: ou=sale,ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: sale
description: sale
dn: ou=direction,ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: direction
description: direction
dn: cn=sale,ou=sale,ou=users,dc=example,dc=com
objectClass: posixGroup
gidNumber: 501
cn: sale
description: Sale group
dn: cn=direction,ou=direction,ou=users,dc=example,dc=com
objectClass: posixGroup
gidNumber: 502
cn: direction
description: Direction group
dn: cn=pauldupont,cn=direction,ou=direction,ou=users,dc=newsoft,dc=ch
cn=pauldupont,cn=direction,ou=direction,ou=users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
uid: pauldupont
userPassword: pauldupont
cn: pauldupont
uidnumber: 1050
gidnumber: 501
homeDirectory: /home/profils/pauldupont
sn: pauldupont
添加用户组.ldif:
dc: cn=sale,ou=sale,ou=users,dc=example,dc=com
changetype: modify
add: memberuid
memberuid: uid=pauldupont,cn=direction,ou=direction,ou=users,dc=example,dc=com
6)我将文件发送到目录:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f file.ldif
6)
ldapsearch -x
信息就在那里。
客户
1)我安装了 ldap-utils libldap-2.4-2 libldap-2.4-2-dbg slapd slapd-dbg libnss-ldap libpam-ldap libpam-modules libpam-cracklib nscd
2)libnss-ldap配置:服务器ip:192.168.1.254,dc=example,dc=com
3)libpam-ldap 配置:LDAP 管理员是否与本地用户类似,LDAP 服务器是否在进行查询之前询问信息
4)dpkg 重新配置 libnss-ldap
这些信息是正确的。
5)在文件 /etc/ldap/ldap.conf 中
BASE dc=example,dc=com
URI ldap://192.168.1.254/
6)在文件 /etc/nsswitch.conf 中
passwd: compat ldap
group: compat ldap
shadow: compat ldap
7)在文件 /etc/libnss-ldap.conf 中
base dc=example,dc=com
uri ldap://192.168.1.254/
ldap_version 3
rootbinddn cn=admin,dc=example,dc=com
8)在文件 /etc/libnss-ldap.secret 中
ldap password
9)在文件 /etc/pam_ldap.conf 中:
base dc=example,dc=com
uri ldap://192.168.1.254/
rootbinddn cn=admin,dc=example,dc=com
port 389
scope sub
bind_timelimit 30
idle_timelimit 3600
pam_filter objectClass=posixAccount
pam_login_attribute uid
10)在文件 /etc/pam.d/common-auth & common-account & common-session 的底部添加了:
auth sufficient pam_ldap.so
11)在文件 /etc/pam.d/common-password 的底部添加了:
password sufficient pam_ldap.so use_first_pass
12)
getent passwd && getent group
仅显示本地用户和组。
13) 客户端似乎联系了服务器:
ldapsearch -x -H "ldap://192.168.1.254" -b "dc=example,dc=com" dn
返回 dn 条目
14) getent passwd pauldupont
没有返回任何内容,当我检查 /var/log/auth.log 时:
May 12 10:43:36 CLI1-DIR-DEB nscd: nss_ldap: failed to bind to LDAP server ldap:///192.168.1.254/: Invalid credentials
May 12 10:43:36 CLI1-DIR-DEB nscd: nss_ldap: reconnecting to LDAP server...
May 12 10:43:36 CLI1-DIR-DEB nscd: nss_ldap: failed to bind to LDAP server ldap:///192.168.1.254/: Invalid credentials
May 12 10:43:36 CLI1-DIR-DEB nscd: nss_ldap: reconnecting to LDAP server...
May 12 10:43:37 CLI1-DIR-DEB nscd: nss_ldap: failed to bind to LDAP server ldap:///192.168.1.254/: Invalid credentials
May 12 10:43:37 CLI1-DIR-DEB nscd: nss_ldap: could not search LDAP server - Server is unavailable
看来凭据是错误的。我检查了上述所有配置文件,没有发现任何错误。
有人知道问题出在哪里吗?
感谢您的帮助。
我使用 Debian Jessie 8.0 AMD64 作为客户端和服务器
uname -a : Linux SRV1-DEB 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 GNU/Linux
OpenLDAP 2.4
编辑:一旦我在 /etc/ldap.secret 文件中添加了密码,我就会执行getent 密码,我获得了 ldap 用户但仍然无法连接。
当我尝试连接时,日志文件中出现了以下内容:
May 18 09:09:53 CLI1-DIR-DEB login[904]: pam_mail(login:session): user unknown
May 18 09:09:53 CLI1-DIR-DEB login[904]: pam_loginuid(login:session): error_ log for user-name'pauldupont' does not exist
May 18 09:09:53 CLI1-DIR-DEB login[904]: pam_unix(login:session): session opened for user pauldupont by LOGIN(uid=0)
May 18 09:09:53 CLI1-DIR-DEB login[904]: pam_systemd(login:session): Failed to get user data
May 18 09:09:53 CLI1-DIR-DEB login[904]: pam_systemd(login:session): Failed to get user data
May 18 09:09:53 CLI1-DIR-DEB login[904]: User not known to the underlying authentication module
答案1
看起来您提供了 binddn,但凭据不正确。内容/etc/ldap.secret
和您在提示中输入的内容-W
完全相同吗?
rootbinddn
是客户端计算机上 root 使用的 binddn。它通常不应是后缀的 rootdn,因为这意味着计算机受到攻击也会影响目录。
在极少数情况下,使用sssd
over pam_ldap
and nss-ldap
/nss-ldapd
并不是正确的选择。这不是其中之一。(根据我的经验,它仅限于验证非 posix 帐户。)
在处理 RFC2307 与 RFC2307bis 组时,还有其他问题,但在此之前您就已经失败了。当这成为您的实际问题时,请再问另一个问题。