看到很多与我的问题有关的类似帖子,但到目前为止没有一个真正有助于解决问题。
我有一堆旧的 RHEL 5.5 服务器,需要根据 LDAP 实例(OpenDJ)进行身份验证。
我可以执行手动 ldapsearch,效果很好:
# /usr/bin/ldapsearch -D cn=#####,ou=users,dc=######,dc=com -w ###### -LLLx -H ldaps://lhcsrvprddir02.#######.com:1636 -b dc=#######,dc=com cn=####
dn: cn=####,ou=users,dc=##########,dc=com
objectClass: organizationalPerson
objectClass: top
objectClass: person
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: posixAccount
uid: *****
employeeType: *****
uidNumber: *****
gecos: ********
mail: ******.com
homeDirectory: *******
gidNumber: ******
cn: *****
sn: *****
loginShell: /bin/lbash
userPassword:***************
我的 LDAP 服务器确认连接/绑定成功,并且似乎没有抱怨基于证书的问题等。
[26/Jul/2017:10:06:29 +0100] CONNECT conn=2140 from=10.20.82.8:60136 to=10.20.231.4:1636 protocol=LDAPS
[26/Jul/2017:10:06:29 +0100] BIND REQ conn=2140 op=0 msgID=1 version=3 type=SIMPLE dn="cn=###,ou=users,dc=#######,dc=com"
[26/Jul/2017:10:06:29 +0100] BIND RES conn=2140 op=0 msgID=1 result=0 authDN="cn=####,ou=users,dc=#######,dc=com" etime=0
[26/Jul/2017:10:06:29 +0100] SEARCH REQ conn=2140 op=1 msgID=2 base="dc=######,dc=com" scope=sub filter="(cn=####)" attrs="ALL"
[26/Jul/2017:10:06:29 +0100] SEARCH RES conn=2140 op=1 msgID=2 result=0 nentries=1 etime=0
[26/Jul/2017:10:06:29 +0100] UNBIND REQ conn=2140 op=2 msgID=3
[26/Jul/2017:10:06:29 +0100] DISCONNECT conn=2140 reason="Client Unbind"
但是当我通过 SSH 连接时,我在 /var/log/secure 文件中看到以下内容
sshd[8275]: pam_ldap: ldap_simple_bind Can't contact LDAP server
以下是我目前在 /etc/ldap.conf 中的内容:
uri ldaps://lhcsrvprddir02.######.com
port 1636
base dc=######,dc=com
ldap_version 3
binddn cn=######,ou=service,ou=users,dc=######,dc=com
bindpw ###############
scope sub
timelimit 120
bind_timelimit 30
bind_policy soft
idle_timelimit 3600
pam_filter objectclass=posixaccount
pam_login_attribute uid
pam_lookup_policy yes
pam_password md5
nss_base_passwd ou=users,dc=######,dc=com?sub
nss_base_shadow ou=users,dc=######,dc=com?sub
nss_base_group ou=groups,dc=######,dc=com?sub
nss_base_netgroup ou=netgroup,dc=######,dc=com?sub
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd,gdm
ssl no
tls_cacertdir /etc/openldap/certs
tls_reqcert never
sudoers_base ou=sudoers,dc=#######,dc=com
还有我的 /etc/openldap/ldap.conf 文件:
URI ldaps://lhcsrvprddir02.######.com
BASE dc=######,dc=com
TLS_CACERTDIR /etc/openldap/certs
TLS_REQCERT NEVER
我尝试了几种与 /etc/pam.d/system-auth-ac 的组合,但无济于事。以下是我目前所拥有的:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore authinfo_unavail=ignore] pam_ldap.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 difok=1 minlen=11
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so
在此之前,我运行了:
# authconfig --enableldap --enableldapauth --enableldaptls --disablenis --enablemkhomedir --updateall
答案1
花了一整天时间尝试弄清楚 ubuntu 上几乎相同的事情。
“libnss-ldap”和“libpam-ldap”似乎与 TLS 配合得不好。我在一些论坛上碰到过这个问题(现在无法链接,但也在 SO 上看到过)。使用“libnss-ldapd“”libpam-ldapd“
你必须有两个都-d 版本。我安装了 libnss-ldapd,但安装了 libpam-ldap(没有“-d”)。配置在 /etc/nslcd.conf 中,大部分是 /etc/ldap.conf 的副本。如果没有正确的 libpam-ldapd,我可以使用“getent passwd”成功填充 passwd,但使用 LDAP 用户的 ssh 登录会抛出错误
1 月 6 日 23:51:17 服务器 sshd[11375]: pam_ldap: ldap_simple_bind 无法联系 LDAP 服务器 1 月 6 日 23:51:17 服务器 sshd[11375]: pam_ldap: 重新连接到 LDAP 服务器... 1 月 6 日 23:51:17 服务器 sshd[11375]: pam_ldap: ldap_simple_bind 无法联系 LDAP 服务器
安装 libpam-ldapd 解决了这个问题,然后只需根据我的需要(搜索查询、证书等)调整 /etc/nslcd.conf