ldap認(rèn)證 ldap認(rèn)證服務(wù)器原理以及搭建
LDAP的英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是基于X.500標(biāo)準(zhǔn)的,但是簡單多了并且可以根據(jù)需要定制。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規(guī)范在RFC中都有定義,所有與LDAP相關(guān)的RFC都可以在LDAPman RFC網(wǎng)頁中找到?,F(xiàn)在LDAP技術(shù)不僅發(fā)展得很快而且也是激動人心的。在企業(yè)范圍內(nèi)實現(xiàn)LDAP可以讓運行在幾乎所有計算機(jī)平臺上的所有的應(yīng)用程序從 LDAP目錄中獲取信息。LDAP目錄中可以存儲各種類型的數(shù)據(jù):電子郵件地址、郵件路由信息、人力資源數(shù)據(jù)、公用密匙、聯(lián)系人列表,等等。通過把 LDAP目錄作為系統(tǒng)集成中的一個重要環(huán)節(jié),可以簡化員工在企業(yè)內(nèi)部查詢信息的步驟,甚至連主要的數(shù)據(jù)源都可以放在任何地方。
LDAP服務(wù)器的主要思想是將一個用戶的所有信息(聯(lián)系人詳細(xì)信息、登錄、密碼、權(quán)限)放在一個位置,這樣網(wǎng)絡(luò)管理員就更容易維護(hù)它。例如,您可以:1。使用相同的登錄名/密碼登錄到局域網(wǎng)和本地計算機(jī)上的。2。給一組用戶提供特定的權(quán)限。例如,有些可以訪問內(nèi)部網(wǎng)的特定頁面,也可以訪問共享驅(qū)動器上的特定目錄。三.以O(shè)utlook為例,獲取公司中所有人的聯(lián)系方式。
1.LDAP目錄服務(wù)可以有效地解決眾多網(wǎng)絡(luò)服務(wù)的用戶賬戶問題。
2.LDAP目錄服務(wù)規(guī)定了統(tǒng)一的身份信息數(shù)據(jù)庫、身份認(rèn)證機(jī)制和接口,實現(xiàn)了資源和信息的統(tǒng)一管理,保證了數(shù)據(jù)的一致性和完整性。
3.LDAP目錄服務(wù)是以樹狀的層次結(jié)構(gòu)來描述數(shù)據(jù)信息的,此種模型適應(yīng)了眾多行業(yè)應(yīng)用的業(yè)務(wù)組織結(jié)構(gòu)。[1]
跨平臺
可以在任何計算機(jī)平臺上,用很容易獲得的而且數(shù)目不斷增加的LDAP的客戶端程序訪問LDAP目錄。而且也很容易定制應(yīng)用程序為它加上LDAP的支持。
LDAP協(xié)議是跨平臺的和標(biāo)準(zhǔn)的協(xié)議,因此應(yīng)用程序就不用為LDAP目錄放在什么樣的服務(wù)器上操心了。實際上,LDAP得到了業(yè)界的廣泛認(rèn)可,因為它是Internet的標(biāo)準(zhǔn)。產(chǎn)商都很愿意在產(chǎn)品中加入對LDAP的支持,因為他們根本不用考慮另一端(客戶端或服務(wù)端)是怎么樣的。LDAP服務(wù)器可以是任何一個開發(fā)源代碼或商用的LDAP目錄服務(wù)器(或者還可能是具有LDAP界面的關(guān)系型數(shù)據(jù)庫),因為可以用同樣的協(xié)議、客戶端連接軟件包和查詢命令與LDAP服務(wù)器進(jìn)行交互。與LDAP不同的是,如果軟件產(chǎn)商想在軟件產(chǎn)品中集成對DBMS的支持,那么通常都要對每一個數(shù)據(jù)庫服務(wù)器單獨定制。
企業(yè)內(nèi)部需要認(rèn)證的服務(wù)很多,員工需要記住很多的密碼, 即使對這些服務(wù)進(jìn)行相同的密碼設(shè)置,也存在很大的安全隱患。筆者目前工作的企業(yè)就是如此,每一個新員工的到來管理員都要初始化很多密碼,而這些密碼都被設(shè)置成了“888888”等弱密碼,由于各種軟件的認(rèn)證機(jī)制之間沒有使用一個統(tǒng)一的標(biāo)準(zhǔn),員工無法一次性修改所有服務(wù)的密碼,這導(dǎo)致很多即使是入職很久的員工都還在使用這個“眾所周知”的密碼。
另外—個比較嚴(yán)重的問題出現(xiàn)在公司增加內(nèi)部服務(wù)的時候,例如領(lǐng)導(dǎo)要在公司內(nèi)部提供郵件服務(wù)或把現(xiàn)有的Proftpd 換成更高效的Vsftpd,管理員需要重新為所有的員工初始化新的賬戶信息,對于一個有上千員工的企業(yè)來說這將是一個“災(zāi)難”。
如果可以為各種軟件提供一個標(biāo)準(zhǔn)的認(rèn)證機(jī)制,所有軟件就可以不再用獨有的用戶管理方法, 而是通過這種統(tǒng)一的認(rèn)證機(jī)制進(jìn)行用戶認(rèn)證,這樣就解決了目前很多企業(yè)遇到的問題。LDAP正是這樣一種標(biāo)準(zhǔn)的協(xié)議,LDAP的歷史可以追溯到1988年,之后誕生的很多軟件基本上都支持這個協(xié)議。近年隨著企業(yè)對LDAP需求的不斷增加,絕大多數(shù)有認(rèn)證機(jī)制的軟件都會首先提供對LDAP的支持。本文將介紹通過LDAP統(tǒng)一身份認(rèn)證的方法,以簡化這種復(fù)雜的管理過程。
LDAP概述
LDAP是Light weight Directory Access Protocol(輕量級目錄訪問協(xié)議)的縮寫,其前身是更為古老的DAP協(xié)議。它是基于X.500標(biāo)準(zhǔn)的,但是很簡單,并且可以根據(jù)需要定制。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必需的。LDAP的核心規(guī)范在RFC中都有定義, 大體上講LDAP協(xié)議定義了和后臺數(shù)據(jù)庫通信的方法及客戶端軟件和LDAP協(xié)議之間的通信標(biāo)準(zhǔn),如圖1所示(更詳細(xì)的說明可以參見相關(guān)的RFC文檔)。
在圖1中,LDAP Client指各種需要身份認(rèn)證的軟件,例如Apache、Proftpd和Samba等。LDAP Sever指的是實現(xiàn)LDAP協(xié)議的軟件,例如OpenLDAP等。Datastorage指的是OpenLDAP的數(shù)據(jù)存儲,如關(guān)系型數(shù)據(jù)庫(MySQL)或查詢效率更高的嵌入式數(shù)據(jù)庫(BerkeleyDB),甚至是平面文本數(shù)據(jù)庫(—個txt的文本文件)??梢姡琌penLDAP軟件只是LDAP協(xié)議的一種實現(xiàn)形式,并不包括后臺數(shù)據(jù)庫存儲。但在很多時候管理員經(jīng)常將LDAP Server和DataStorage放在同一臺服務(wù)器,這樣就產(chǎn)生了人們通常所說的“LDAP數(shù)據(jù)庫”。雖然后臺數(shù)據(jù)庫(backend)可以是多種多樣,但LDAP協(xié)議還規(guī)定了數(shù)據(jù)的存儲方式。LDAP數(shù)據(jù)庫是樹狀結(jié)構(gòu)的,與DNS類似,如圖2所示。
?
圖2 跨國公司員工信息的樹狀邏輯結(jié)構(gòu)
在圖中,以這種方式存儲數(shù)據(jù)最大的一個好處就是查詢速度快,LDAP數(shù)據(jù)庫專門對讀操作進(jìn)行了優(yōu)化, OpenLDAP配合Berkeley DB可使其讀操作的效率得到很大提高。LDAP數(shù)據(jù)庫的樹狀結(jié)構(gòu)的另一個好處是便于分布式的管理,有關(guān)這方面的內(nèi)容將在后面有所介紹。
實現(xiàn)思路
統(tǒng)一身份認(rèn)證主要是改變原有的認(rèn)證策略,使需要認(rèn)證的軟件都通過LDAP進(jìn)行認(rèn)證,如圖3所示。在統(tǒng)一身份認(rèn)證之后,用戶的所有信息都存儲在LDAP Server中。終端用戶在需要使用公司內(nèi)部服務(wù)的時候,都需要通過LDAP服務(wù)器的認(rèn)證。每個員工只需要記住一個密碼,在需要修改用戶信息的時候可以通過管理員提供的Web界面直接修改LDAP Server中的信息。
經(jīng)過2天的摸索,基本把ldap理明白了。下面是ldap在centos7上的安裝步驟,包括與samba和NFS使用ldap認(rèn)證的配置。中間遇到許多坑,會在其他文章里介紹。
為什么要用ldap呢?
ldap主要用作統(tǒng)一認(rèn)證服務(wù)器,samba和nfs提供文件共享的服務(wù)。比如要使用samba做文件共享,在windows中訪問共享文件是需要輸入用戶名密碼,驗證通過后才可以讀或者寫文件。在未配置ldap服務(wù)器以前,samba用戶信息在本地保存,也就是說如果有多個samba服務(wù)器則需要在多臺機(jī)器上重復(fù)建立認(rèn)證賬戶信息,管理不方便。建立ldap后就可以將需要認(rèn)證的用戶全部放到ldap服務(wù)器上,這樣就可以避免重復(fù)建立samba的認(rèn)證賬戶,方便統(tǒng)一管理賬戶信息。
不管有沒有配置ldap,samba的用戶認(rèn)證都有自己獨立的一套密碼與系統(tǒng)用戶和ldap用戶分開管理,提高安全性,在ldap中samba密碼是用戶類的一個屬性。本人曾經(jīng)嘗試使用ldap用戶密碼或者系統(tǒng)密碼認(rèn)證samba,包括使用插件或者PAM認(rèn)證,但是均為成功,目前只發(fā)現(xiàn)可以雙向同步samba和系統(tǒng)用戶密碼的配置或者插件(samba-tools)。
ftp服務(wù)器用過的肯定不少,雖然可能有很多公司已經(jīng)摒棄不用,網(wǎng)上也有很多其他方案可以替代,但是還是有些特別的用途,還是有一定的用武之地的。在部署了ldap之后,我們當(dāng)然想盡可能多的將生產(chǎn)范圍內(nèi)的其他系統(tǒng)或應(yīng)用的認(rèn)證都對接到ldap上來,所以這一次來使用ldap認(rèn)證登錄vsftp。
1、準(zhǔn)備工作
1
2
3
4
5
6
7
8
9
|
#停止iptables,并查看iptables狀態(tài) /etc/init .d /iptables ?stop iptables?-L?-n #禁用SELinux,并查看SELinux狀態(tài) setenforce?0 getenforce #編輯/etc/hosts,添加openldap?server的記錄 echo ?"192.168.49.138???ldapsrv01.contoso.com" ?>> /etc/hosts #添加成功后,最好ping一下,看是否能解析正常 |
2、安裝相關(guān)的軟件包
1
2
|
yum?-y? install ?vsftpd? ftp yum?-y? install ?nss-pam-ldapd?pam_ldap |
3、配置/etc/pam_ldap.conf
[root@server136 ~]# cp /etc/pam_ldap.conf?/etc/pam_ldap.conf.bak$(date +%F)
[root@server136 ~]# egrep -v "#|^$" /etc/pam_ldap.conf
host 127.0.0.1
base dc=example,dc=com
[root@server136 ~]# sed -i '/^host/s/host/#host/' /etc/pam_ldap.conf
[root@server136 ~]# sed -i '/^base/s/base/#base/' /etc/pam_ldap.conf
[root@server136 ~]# egrep -v "#|^$" /etc/pam_ldap.conf
[root@server136 ~]# echo "host ?192.168.49.138" >>/etc/pam_ldap.conf
[root@server136 ~]# echo "base ?dc=contoso,dc=com" >>/etc/pam_ldap.conf
[root@server136 ~]# echo "binddn ?cn=admin,dc=contoso,dc=com" >>/etc/pam_ldap.conf
[root@server136 ~]# echo "bindpw ?123456" /etc/pam_ldap.conf
[root@server136 ~]# egrep -v "#|^$" /etc/pam_ldap.conf
host ?192.168.49.138
base ?dc=contoso,dc=com
binddn ?cn=admin,dc=contoso,dc=com
bindpw ?123456
4、配置/etc/vsftpd/vsftpd.conf
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak$(date +%F)
vi /etc/vsftpd/vsftpd.conf
[root@server136 ~]# diff /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak2016-09-12
12c12
< anonymous_enable=NO
---
> anonymous_enable=YES
28d27
< anon_upload_enable=YES
33d31
< anon_mkdir_write_enable=YES
103,104d100
< chroot_local_user=YES
< #
124,126d119
< guest_enable=YES
< guest_username=ftp
< local_root=/opt/data
5、配置/etc/pam.d/vsftpd
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak$(date +%F)
[root@server136 ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
session ? ?optional ? ? pam_keyinit.so ? ?force revoke
session ? ?optional ? ? pam_ldap.so
auth ? ? ? sufficient ? pam_ldap.so
auth ? ? ? required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth ? ? ? required pam_shells.so
auth ? ? ? include password-auth
account ? ?sufficient ? pam_ldap.so
account ? ?include password-auth
session ? ?required ? ? pam_loginuid.so
session ? ?include password-auth
password ? required ? ? pam_ldap.so
6、創(chuàng)建ftp根目錄并啟動vsftpd服務(wù)
1
2
3
4
|
mkdir ?-p? /opt/data chown ?-R? ftp : ftp ?/opt/data chkconfig?vsftpd?on /etc/init .d /vsftpd ?start |
7、使用ftp客戶端測試
[root@server136 ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): charleslv
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
#ldap用戶登錄成功
[root@server136 ~]# useradd user1
[root@server136 ~]# echo "111111" |passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@server136 ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
#本地用戶登錄成功
你基于 SQL 數(shù)據(jù)庫也要重新發(fā)明一套從 SQL 映射出樹形結(jié)構(gòu)并進(jìn)行查詢的方式
你基于 Web 也好 HTTP 也好還是需要重新定義一套 API 去查詢樹形的層級數(shù)據(jù)
LDAP 是一個被廣泛支持的、用于存儲和查詢樹形結(jié)構(gòu)的協(xié)議,它的價值就是「廣泛接受的標(biāo)準(zhǔn)」
在一個沒有閉源商業(yè)系統(tǒng)必須通過 LDAP (以及 Kerberos、Radius 等等等等)整合的理想環(huán)境里你當(dāng)然可以全部走 web 協(xié)議,比如全套 Google Apps + OAuth 認(rèn)證連接 GitHub 的 web IDE 什么的——樓上某位要是活在這樣的環(huán)境請允許我羨慕一下。
但是,考慮到這套服務(wù)的通用性,易用性,balabala,還是會考慮LDAP。
(簡單粗暴的)分析:
如果使用數(shù)據(jù)庫,你準(zhǔn)備讓使用服務(wù)的人如何接入?1給他開數(shù)據(jù)庫的訪問權(quán)限?那你是不是還得提供準(zhǔn)確的sql查詢腳本?2在數(shù)據(jù)庫之上,提供一套web服務(wù)?那接入方要嚴(yán)格按照你的api對接咯。這樣接入方更換認(rèn)證服務(wù)的時候,很可能是不統(tǒng)一的api,想想都麻煩。
認(rèn)證服務(wù)是LDAP的話,接入方的平臺確認(rèn)了之后,接入調(diào)用的api就是確定的,只要更換服務(wù)的地址,目錄的信息就可以了,是不是簡單很多。
0 Comments.