您好,登錄后才能下訂單哦!
Openldap 整合windows AD認證
I.解決的問題
Openldap是開源的目錄服務實現,windows AD是微軟的目錄服務現實。現狀是有的場景(應用、客戶端)跟openldap結合比較容易,有的場景又是必須要用AD,所以幾乎不可能棄用其中的任意一種。但同時維護兩套系統意味著維護工作大量增加(不僅僅只是增加一倍,要考慮信息分別維護、同步etc等)、出錯幾率增加。
其中的一種較成熟、使用比較多的解決方案是:openldap使用windows AD的認證,這樣只需要在AD上維護一套用戶密碼即可。
II.流程圖
如圖,相關組件分四大部分:
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一行 ,最終修改為MECH=ldap
啟動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://192.168.0.7 ldap://192.168.0.20
ldap_search_base: DC=shuobaotang,DC=com
ldap_timeout: 10
ldap_filter: sAMAccountName=%U
ldap_bind_dn: CN=ldap_office,CN=Users,DC=shuobaotang,DC=com
ldap_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程序本地驗證。
通過后在用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程序本地驗證。
通過后在用ldapsearch遠程驗證。這個有幾個注意點,過程如下:
4.導出windows證書,并配置給ldapsearch
windows的證書導出如圖:
講導出的文件傳到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證書(第二種)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。