Lework Study hard, improve every day.

配置OpenLDAP传递身份验证到Active Directory

2019-07-25
lework
 
本文 2664 字,阅读全文约需 8 分钟

Openldap是开源的目录服务实现,windows AD是微软的目录服务现实。现状是有的场景(应用、客户端)跟openldap结合比较容易,有的场景又是必须要用AD,所以几乎不可能弃用其中的任意一种。但同时维护两套系统意味着维护工作大量增加(不仅仅只是增加一倍,要考虑信息分别维护、同步etc等)、出错几率增加。

其中的一种较成熟、使用比较多的解决方案是:openldap使用windows AD的认证,这样只需要在AD上维护一套用户密码即可。

  • 1.LDAP client;这个是实际调用ldap服务的系统,也可以是类似ldapsearch之类的client 程序
  • 2.Openldap; 开源服务端,实际进程为slapd
  • 3.Saslauthd;简单认证服务层的守护进程,该进程要安装在openldap服务器上
  • 4.Active directory;即windows AD

1563964600770

系统环境

OS: centos 7.4

OepnLDAP: 请按照在CentOS 7上安装OpenLDAP服务器文章进行安装部署

AD: 请按照Windows Server 2016安装AD并开启SSL文章进行安装部署

AD 需创建用户ad_test1,密码Admin123用于测试

配置SASLAUTHD

安装saslauthd

yum install cyrus-sasl cyrus-sasl-ldap cyrus-sasl-plain -y

启用LDAP机制

cat /etc/sysconfig/saslauthd
SOCKETDIR=/run/saslauthd
MECH=ldap
FLAGS="-r"

配置ldap访问参数

cat /etc/saslauthd.conf
ldap_servers: ldap://192.168.77.135
ldap_search_base: dc=lework,dc=com
ldap_filter: (|(cn=%u)(userPrincipalName=%u))
ldap_bind_dn: CN=Administrator,cn=Users,dc=lework,dc=com
ldap_password: Admin123
ldap_timeout: 10
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind

启动saslauthd

systemctl enable --now saslauthd  

测试身份传递验证

在上面的AD示例中,首先检查saslauthd在连接到AD时将使用的DN和密码是否有效:

ldapsearch -x -H ldap://192.168.77.135/ \
  -D cn=Administrator,cn=Users,DC=lework,DC=com \
  -w Admin123 \
  -b '' \
  -s base

接下来检查是否可以找到示例AD用户:

ldapsearch -x -H ldap://192.168.77.135/ \
  -D cn=Administrator,cn=Users,DC=lework,DC=com \
  -w Admin123 \
  -b cn=Users,DC=lework,DC=com \
  "(userPrincipalName=ad_test1@lework.com)"

检查用户是否可以绑定到AD:

ldapsearch -x -H ldap://192.168.77.135/ \
  -D cn=Administrator,cn=Users,DC=lework,DC=com \
  -w Admin123 \
  -b cn=Users,DC=lework,DC=com \
  -s base \
  "(objectclass=*)"

如果一切正常,那么saslauthd应该能够做同样的事情:

testsaslauthd -u ad_test1@lework.com -p Admin123
0: OK "Success."

sasl设定

cat /etc/sasl2/slapd.conf
mech_list: plain
pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux

重启openldap

systemctl slapd restart

绑定ad的用户到ldap中

cat >> user1.ldif <<EOF
dn: uid=ad_test1,ou=people,dc=lework,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: ad_test1
cn: ad_test1
sn: ad_test1
userpassword: {SASL}ad_test1@lework.com
givenname: ad_test1
mail: ad_test1@lework.com
EOF

注意密码的设置,userpassword指定的不是用户密码,如果格式为{SASL}xxx, 则将其转至Active Directory以进行身份验证用户。

向ldap中添加用户

ldapadd -x -w "123456" -D "cn=Manager,dc=lework,dc=com" -f user1.ldif

使用ad密码验证

ldapwhoami -x -D uid=ad_test1,ou=People,dc=lework,dc=com -w Admin123
dn:uid=ad_test1,ou=People,dc=lework,dc=com

可以使用lsc脚本将ad域的账号同步到ldap,具体请看使用lsc同步openldap和ad之间的用户和组

参考

原文地址 https://lework.github.io/2019/07/25/openldap-pass-through-ad/

Comments

Content