设为首页 收藏本站
查看: 1134|回复: 0

[经验分享] Openldap 整合windows AD认证

[复制链接]

尚未签到

发表于 2018-6-26 09:53:53 | 显示全部楼层 |阅读模式
  Openldap 整合windows AD认证
  Table of Contents
  I.解决的问题2
  II.流程图2
  III.具体配置3
  A.检查Openldap3
  B.Saslauthd安装配置3
  1.安装3
  2.【可选】先熟悉、测试sasl本身3
  3.配置sasl关联到ad域3
  C.配置openldap使用Saslauthd4
  IV.配置SSL/TLS支持5
  A.Windows ad 启用TLS5
  4.导出windows 证书,并配置给ldapsearch6
  5.可能需要修改/etc/hosts6
  6.B.Sasl配置TLS6
  C.Openldap配置TLS7
  D.概念总结7
  V.后续小问题8
  I.解决的问题
  Openldap是开源的目录服务实现,windows AD是微软的目录服务现实。现状是有的场景(应用、客户端)跟openldap结合比较容易,有的场景又是必须要用AD,所以几乎不可能弃用其中的任意一种。但同时维护两套系统意味着维护工作大量增加(不仅仅只是增加一倍,要考虑信息分别维护、同步etc等)、出错几率增加。
  其中的一种较成熟、使用比较多的解决方案是:openldap使用windows AD的认证,这样只需要在AD上维护一套用户密码即可。
  II.流程图
DSC0000.jpg

  如图,相关组件分四大部分:
  1.LDAP client ;这个是实际调用ldap服务的系统,也可以是类似ldapsearch之类的client 程序
  2.Openldap; 开源服务端,实际进程为slapd
  3.Saslauthd;简单认证服务层的守护进程,该进程要安装在openldap服务器上
  4.Active directory;即windows AD,这个不用解释
  III.具体配置
  A.检查Openldap
  检查openldap安装时是否有编译参数 ./configure --enable-spasswd;如没有需要重新编译,否则不支持之后形如 userPassword: {SASL}user@domain的语法配置
  Openldap的安装本文不再详细介绍
  B.Saslauthd安装配置
  1.安装  yum install cyrus-sasl
  通过命令可查看
  [root@localhost ~]# rpm -ql cyrus-sasl|grep bin
  /usr/sbin/pluginviewer
  /usr/sbin/saslauthd                    #守护进程,主程序
  /usr/sbin/testsaslauthd                    #测试程序
  [root@localhost ~]# rpm -ql cyrus-sasl|grep etc
  /etc/rc.d/init.d/saslauthd                    #启动脚本
  /etc/sysconfig/saslauthd                    #配置文件,conf
  2.【可选】先熟悉、测试sasl本身
  比如 adduser blake ; passwd blake  #增加一个linux系统测试账号,设置密码
  配置saslauthd使用shadow认证
  

      编辑 /etc/sysconfig/saslauthd,修改使 MECH=shadow一行  

  启动saslauthd进程,service saslauthd start
  测试testsaslauthd -u blake -p 密码
  这里如密码正确应该出现认证成功,密码错误则失败,到这里可理解sasl本身OK的。后续配置还会用 testsaslauthd 程序测试、调试。验证OK后可删除用户。
  3.配置sasl关联到ad域
  【可选】先用ldap客户端测一下windowad域是否可用,用户密码是否正确,比如
  ldapsearch -x -H ldap://192.168.0.101 -D "CN=administrator,CN=Users,DC=test,DC=com" -w 密码 -b "DC=test,DC=com"
  这个命令ldapsearch是客户端程序,IP地址是windows AD的地址,-x参数表示简单认证,-D参数后面的一串是AD里的用户DN,其中DC=test是AD域的域名,-w后面跟密码,-b指base DN。
  这个命令要成功输出东西,否则就是ldap服务器连windows AD出问题,需检查网络、用户、密码、DN等等。
  下面配置sasl访问ad,再次修改 vi /etc/sysconfig/saslauthd,修改两行:MECH=ldap  FLAGS="-O /etc/saslauthd2ad.conf"
  然后新建一个 /etc/saslauthd2ad.conf ,写入下面内容
  /etc/saslauthd2ad.conf
  ldap_servers: ldap://192.168.0.101
  ldap_search_base: CN=Users,DC=test,DC=com
  ldap_timeout: 10
  ldap_filter: sAMAccountName=%U
  ldap_bind_dn: CN=administrator,CN=Users,DC=test,DC=com
  ldap_password: password
  ldap_deref: never
  ldap_restart: yes
  ldap_scope: sub
  ldap_use_sasl: no
  ldap_start_tls: no
  ldap_version: 3
  ldap_auth_method: bind
  该文件的主要参数:
  ldap_servers: LDAP URI, windowsAD地址
  ldap_bind_dn: DN for connection ,一个windows AD用户的DN,实际不需要admin的
  ldap_password: Password for connection,密码
  ldap_search_base: Search base
  ldap_filter: Search filter ,%U 表示user, %u 表示user@domain
  重启服务service saslauthd restart
  测试testsaslauthd -u administrator -p 密码 ,这里就是使用AD域的用户-密码认证了,并不只是写到配置文件里面的administrator,而是所有AD用户都已经可以用testsaslauthd程序测试验证。可进一步AD里面加用户、或改密码测试。需注意AD修改密码,老密码依然可用5分钟。如验证不通过检查 sasl的配置。
  C.配置openldap使用Saslauthd
  修改openldap的配置文件 /etc/openldap/slapd.conf加入
  sasl-host       localhost
  sasl-secprops   none
  这两行配置是告诉openldap使用本机的sasl
  再修改/新建sasl的配置文件,vi  /etc/sasl2/slapd.conf
  mech_list: plain
  pwcheck_method: saslauthd
  saslauthd_path: /var/run/saslauthd/mux
  这个配置文件相当于sasl的前端,意思是来自于slapd的请求,让saslauthd接手处理。注意这两个配置文件文件名是相同的,但却是不同软件包的配置文件。如果slapd是用非root的OS用户启动的,那还要将用户加到组里。
  usermod -a -G sasl ldap
  最后修改openldap里面的用户配置,比如在openldap里新建用户blake,设置userpassword: {SASL}blake,这样openldap就会讲用户blake转发给sasl程序认证,而sasl又会进一步转发给windows AD,至此配置完成。
  最终测试:
  ldapsearch -w 密码1 -H ldap://192.168.0.107 -D "cn=blake,ou=users,dc=saybot,dc=com" -b "cn=blake,ou
  =users,dc=saybot,dc=com"
  这个测试命令,blake用户在openldap和windows AD上都存在,IP是本机openldap的IP,DN,查询DN也都是openldap的信息,但是密码却是在windows AD上管理的。如成功,到windows AD上修改用户密码,用新密码验证,再等5分钟,旧密码失效。到此配置完成。
  IV.配置SSL
  /TLS支持
  前面的配置有一个安全问题。这样配置下来密码从openldap到windows AD只是明文传输。如果不是在内网、或有×××保护,就有可能被截取。并且,openldap 到 windows AD 之间其实是会传输两个用户名/密码。一个是配置在saslauthd 里面的的用户,一个是真正连入openldap的认证用户。
  /TLS支持
  前面的配置有一个安全问题。这样配置下来密码从openldap到windows AD只是明文传输。如果不是在内网、或有×××保护,就有可能被截取。并且,openldap 到 windows AD 之间其实是会传输两个用户名/密码。一个是配置在saslauthd 里面的的用户,一个是真正连入openldap的认证用户。
  file0002.jpg
  一次认证,可截获2个用户名/密码,都是明文
  解决方案有这么几种:
  Ø外层网络层加密,比如×××隧道
  Ø使用windows安全认证如NTLM  、Kerberos
  Ø启用SSL/TLS镶套协议
  本文采用TLS方案
  D.Windowsad启用TLS
  Windows AD启用TLS支持需要先安装证书服务,即 AD CS,建议在功能里面安装相关管理工具。安装完成后执行 certutil -dcinfo verify ,再用ldp.exe程序本地验证。
DSC0001.jpg

  通过后在用ldapsearch远程验证。这个有几个注意点,过程如下:
  4.导出windows证书,并配置给ldapsearch
  windows的证书导出如图:
  一次认证,可截获2个用户名/密码,都是明文
  解决方案有这么几种:
  Ø外层网络层加密,比如×××隧道
  Ø使用windows安全认证如NTLM  、Kerberos
  Ø启用SSL/TLS镶套协议
  本文采用TLS方案
  D.Windowsad启用TLS
  Windows AD启用TLS支持需要先安装证书服务,即 AD CS,建议在功能里面安装相关管理工具。安装完成后执行 certutil -dcinfo verify ,再用ldp.exe程序本地验证。
DSC0002.jpg

  通过后在用ldapsearch远程验证。这个有几个注意点,过程如下:
  4.导出windows证书,并配置给ldapsearch
  windows的证书导出如图:
DSC0003.jpg

DSC0004.jpg

  讲导出的文件传到ldapsearch所在服务器
  修改配置文件(ldap客户端配置文件和openldap客户端配置文件是不同的)
  /usr/local/openldap2.4/etc/openldap/ldap.conf
  加入 TLS_CACERT /etc/openldap/certs/ca2.crt
  5.可能需要修改/etc/hosts
  192.168.0.101 WIN-QLMQQENMPLO.test.com
  因为会验证主机名是否与证书里的字段匹配,所以不能用ip地址访问
  测试命令:
  ldapsearch -x -H ldaps://WIN-QLMQQENMPLO.test.com -D "CN=blake,CN=Users,DC=test,DC=com" -w 密码 -b "CN=administrator,CN=Users,DC=test,DC=com"
  注意连接协议是ldaps,默认636端口,不再是ldap
  这里OK了再继续。否则后面也容易出问题
  E.Sasl配置TLS
  修改配置文件/etc/saslauthd2ad.conf
  [root@localhost log]# cat /etc/saslauthd2ad.conf
  ldap_servers: ldaps://WIN-QLMQQENMPLO.test.com/
  ldap_search_base: CN=Users,DC=test,DC=com
  ldap_filter: sAMAccountName=%U
  ldap_bind_dn: CN=administrator,CN=Users,DC=test,DC=com
  ldap_password: 密码
  ldap_tls_cacert_file: /etc/openldap/certs/ca-test.cer
  这里和前面的配置有2点不同,一是协议变为ldaps,而是最后一行指定了证书。就是前面从windows导出的证书。这里的逻辑是:自签名的ssl/tls证书,ldaps要求把自签名用到的ca证书配置给客户端。Ldapsearch程序修改ldap.conf文件,sasl则修改本文件。
  使用testsaslauthd -u administrator -p 密码 命令验证
  F.Openldap配置TLS
  Openldap服务端也可以配置TLS,配置文件是slapd.conf
  比如 /usr/local/openldap2.4/etc/openldap/slapd.conf
  增加3行
  TLSCACertificateFile /etc/openldap/certs/ca.crt
  TLSCertificateFile /etc/openldap/certs/ldap.crt
  TLSCertificateKeyFile /etc/openldap/certs/ldap.key.pem
  这里第一行是自签名用到的ca证书(可以不是本机,可以用前面的windows服务器来签证书),第二行是本机服务器证书,第三行是本机服务器证书密钥。证书的概念这里不详细讲解。
  之后,用命令开启TLSslapd -4 -h "ldap:/// ldaps:///"
  特别注意,这里要验证openldapTLS的话又比较麻烦
  可以先openssl s_client -connect localhost:636看一下证书对不对
  然后配置ldapsearch 1.合并证书,即ldap.conf 配置文件里面,TLS_CACERT 参数指定的文件,直接用cat命令讲两个ca证书合并(一个是前面windows的,一个是签发给openldap的) 2.修改/etc/hosts 192.168.0.107          ldap
  测试验证命令:ldapsearch -w 密码 -H ldaps://ldap -D "cn=blake,ou=users,dc=saybot,dc=com" -b "cn=blake,ou
  =users,dc=saybot,dc=com"
  G.概念总结
  TLS的配置整体比较麻烦,把握以下概念:
  ØLdap协议是389端口,明文;TLS加密后协议是ldaps ,636端口
  ØWindowsad开启ldaps(TLS)安装活动目录证书(AD CS)服务
  Ø证书有2种,1是服务器证书,2是签发服务器证书的ca证书
  Ø自签名的情况下,客户端需要额外配置ca证书(第二种)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-530837-1-1.html 上篇帖子: Zabbix_Agent windows下自动安装脚本 下篇帖子: Windows高手常用的五个按钮
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表