近幾年,隨著LDAP(Light Directory Access Protocol,輕量級目錄訪問協議)技術的興起和應用領域的不斷擴展,目錄服務技術成為許多新型技術實現信息存儲、管理和查詢的首選方案,特別是在網絡資源查找、用戶訪問控制與認證信息的查詢、新型網絡服務、網絡安全、商務網的通用數據庫服務和安全服務等方面,都需要應用目錄服務技術來實現一個通用、完善、應用簡單和可以擴展的系統。
對于任何一家大IT網絡的企業來說,IT系統中的目錄服務功能是必不可少的。如果一個在全國有多個分支機構的企業,已經有了一個內部網絡系統,每一個分支機構都有一個局域網,局域網之間通過專線或者VPN通道連接在一起,那么,如何將網絡中的資源和信息有效地管理起來呢?通常,這個企業可以在每一個分支機構或者每個城市建立一個目錄服務器,任何地方的員工連接到本地目錄服務器就可以訪問到目錄樹中所有的信息,在目錄服務器之間復制目錄信息,以保持同步。比如,人事部門看到的人員目錄與財務部門、設備管理部門看到的人員目錄是完全一致的,他們所使用的應用系統無須再建立另一套目錄結構。當然,這一切都是要經過身份驗證的。
目錄服務有著如此重要的作用,但在過去,企業通常采用基于Windows的目錄服務器,Linux在這方面相形遜色。作為Windows的核心內容,目錄服務被企業IT人員認為是Windows與Linux相比最具競爭力的部分,也成為Linux產品架構中的軟肋。隨著Red Hat Enterprise Linux 4.0出現,這個情況已經改變了。RHEL 4 內附的LDAP 服務器為OpenLDAP 2.2.13-2 版,OpenLDAP 2.x包括數個重要功能:
1. 支持LDAPv3 - OpenLDAP 2.0 除了其它改善外還支持SASL(SimpleAuthentication and Security Layer)、TLS(Transport Layer Security)以及SSL(Secure Sockets Layer)。LDAPv2 之后通訊協議很多的改變都是為了加強LDAP 的安全性。
2. 支持IPv6 - OpenLDAP 支持新一代的因特網通訊協議第6 版。
3. LDAP Over IPC - OpenLDAP 能夠使用IPC 在系統內進行通訊。這可以避免使用網絡通訊以增加安全性。
4. 使用新的應用程序界面: 改善程序設計人員聯機及使用程序的方法。
本文將以Red Hat Enterprise Linux 4.0 為例,介紹在Linux平臺使用OpenLDAP上建立目錄服務器。
一、LDAP協議簡介
LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的信息服務。目錄服務是一種特殊的數據庫系統,其專門針對讀取,瀏覽和搜索操作進行了特定的優化。目錄一般用來包含描 述性的,基于屬性的信息并支持精細復雜的過濾能力。目錄一般不支持通用數據庫針對大量更新操作操作需要的復雜的事務管理或回卷策略。而目錄服務的更新則一般都非常簡單。這種目錄可以存儲包括個人信息、web鏈結、jpeg圖像等各種信息。為了訪問存儲在目錄中的信息,就需要使用運行在TCP/IP之上的訪問協議—LDAP。 LDAP目錄中的信息是是按照樹型結構組織,具體信息存儲在條目(entry)的數據結構中。條目相當于關系數據庫中表的記錄;條目是具有區別名DN(Distinguished Name)的屬性(Attribute),DN是用來引用條目的,DN相當于關系數據庫表中的關鍵字(Primary Key)。屬性由類型(Type)和一個或多個值(Values)組成,相當于關系數據庫中的字段(Field)由字段名和數據類型組成,只是為了方便檢索的需要,LDAP中的Type可以有多個Value, 而不是關系數據庫中為降低數據的冗余性要求實現的各個域必須是不相關的。LDAP中條目的組織一般按照地理位置 和組織關系進行組織,非常的直觀。LDAP系統結構圖見圖1.
圖1 LDAP系統結構圖
LDAP的信息是以樹型結構存儲的,在樹根一般定義國家(c=CN)或域名(dc=com),在其下則往往定義一個或多個組織(organization)(o=Acme)或組織單元(organizational units) (ou=People)。一個組織單元可能包含諸如所有雇員、 大樓內的所有打印機等信息。
此外,LDAP支持對條目能夠和必須支持哪些屬性進行控制,這是有一個特殊的稱為對 象類別(objectClass)的屬性來實現的。該屬性的值決定了該條目必須遵循的一些規則,其規定了該條目能夠及至少應該包含哪些屬性。例如:inetorgPerson對象類需要支持sn(surname)和cn(common name)屬性,但也可以包含可選的如郵件,電話號碼等屬性。dn :一條記錄的位置;dc :一條記錄所屬區域;ou :一條記錄所屬組織;cn/uid:一條記錄的名字/ID。OpenLdap是一個正在得到日益普遍應用的開源軟件,和LADP完全兼容。
二、安裝OpenLDAP服務器
如果在系統安裝時已經把安裝上了,那么我們就可以直接對OpenLDAP進行配置使用了。否則,可以通過Rat Het Enterprise Linux圖形界面下的“添加/刪除應用程序”工具進行安裝。具體方法是,選擇“主選單”→“系統設置”→“添加/刪除應用程序”,在彈出的界面中選中“網絡服務器”的“OpenLDAP-server”,單擊“更新”即可,見圖2。
圖2 安裝OpenLDAP 服務器軟件
如果你使用的是其他版本的Linux,那么通常要安裝以下軟件包:OpenLDAP、OpenLDAP-servers、OpenLDAP-clients、OpenLDAP-devel ,OpenLDAP-2.0是必要套件,一定要先安裝;OpenLDAP-servers是服務器套件;OpenLDAP-clients是操作程序套件;OpenLDAP-devel是開發工具套件。
三、配置OpenLDAP 服務器
以RedHat Linux 4所為例字介紹OpenLDAP 服務器配置文件。主要文件見表1。
表1
1. 建立Linux用戶賬號
使用文本編輯建立一個文本文件,文件名稱myusers.list 內容如下:
user1 123456 user2 123456 user3 123456 user4 123456 user5 123456 user6 123456 user7 123456 user8 123456 user9 123456 |
注意:第一個字段為使用者名稱;第二個字段為預設密碼,中間必須用空格隔開。然后使用文本編輯建立另外一個文本文件,文件名稱add-users.sh內容如下:
#!/bin/bash for i in `awk '{print $1}' users.list ` do useradd $i grep "\< $i\>" users.list | awk '{print $2}' | passwd --stdin $i done |
建立Linux用戶賬號:
#chmod 775 add-users.sh
#./add-users.sh
2.修改缺省配置文件:/etc/OpenLDAP/slapd.conf,請把藍色部分按照您的具體情況填寫。
database bdb suffix "dc=myexample,dc=com" #一條記錄所屬區域# rootdn "cn=Manager,dc=example,dc=com" rootpw 1234567 #定義LDAP根管理員的密碼 |
3.將原有Linux 賬號轉為LDIF 文件
原有Linux 服務器上有user1-user9 這些使用者賬號,密碼均為123456;下面便是轉換的步驟:
# cd /usr/share/OpenLDAP/migration #轉換文件的目錄# # vi migrate_common.ph $DEFAULT_MAIL_DOMAIN = "myexample.com"; Default base $DEFAULT_BASE = "dc=myexample,dc=com"; # ./migrate_passwd.pl /etc/passwd > /worktmp/user.ldif # ./migrate_group.pl /etc/group > /worktmp/group.ldif |
4. 建立example.ldif,ou_people.ldif, ou_group.ldif三個文件
#cat example.ldif dn: dc=example,dc=com dc: example objectClass: dcObject objectClass: organizationalUnit ou: example.com #cat ou_people.ldif dn: ou=people, dc=example, dc=com objectclass: organizationalunit ou: people #cat ou_group.ldif dn: ou=group, dc=example, dc=com objectclass: organizationalunit ou: group |
5. 轉換原有Linux 賬號至OpenLDAP服務器上:
#slapadd -vl example.ldif added: "dc=example,dc=com" (00000001) #slapadd -vl ou_people.ldif added: "ou=people,dc=example,dc=com" (00000002) #slapadd -vl ou_group.ldif added: "ou=group,dc=example,dc=com" (00000043) #slapadd -vl user.ldif #slapadd -vl group.ldif |
四、啟動OpenLDAP服務器
#chown ldap.ldap /var/lib/ldap/* #把/var/lib/ldap/目錄內的檔案變更擁有者及群組為ldap。
然后可以通過Rat Het Enterprise Linux圖形界面下的選擇“主選單”→“系統設置”→“服務器設置”→“服務”,在彈出的界面中選中ldap”,單擊“重新啟動”即可,見圖3。
圖3 服務器啟動界面
利用ldapsearch 指令可搜尋LDAP 服務器的數據,若是可看到以下的數據,代表整個設定正確無誤。
# ldapsearch -x -b "dc=example,dc=com" ……… # user9, Group, myexample.com dn: cn=user9,ou=Group,dc=myexample,dc=com objectClass: posixGroup objectClass: top cn: user9 userPassword:: e2NyeXB0fXg= gidNumber: 508 ……… |
五、配置Linux OpenLDAP客戶端
在客戶端執行authconfig-gtk命令,進入認證配置界面,進入圖4所示的界面中配置LDAP服務器的信息。在LDAP 服務器處 指定 LDAP 服務器的 IP 地址。
圖4 添加OpenLDAP服務器IP地址
打開 /etc/ldap.conf 文件,下面是一些用于配置的關鍵指令。
到此為止我們已經配置完成Liunx OpenLDAP目錄服務器、客戶端,接下來將介紹一下管理技巧
我們已經配置完成Liunx OpenLDAP目錄服務器、客戶端,下面著重介紹一下目錄服務器的管理技巧。
一、監控OpenLDAP服務器
1.使用uptime命令
使用uptime命令可以查看系統負載,系統平均負載被定義為在特定時間間隔內運行隊列中的平均進程數目。如果一個進程滿足以下條件則其就會位于運行隊列中:沒有在等待I/O操作的結果、它沒有主動進入等待狀態(也就是沒有被調用、沒有被停止。
# uptime
9:51pm up 3 days, 4:43, 4 users, load average:6.02, 5.90, 3.94
上面命令顯示示最近1 分鐘內系統的平均負載是6.02,在最近5分鐘內系統的平均負載是5.90,在最近的15 分鐘內系統的平均負載是3.94。一共四個用戶。通常來說只要每個CPU的當前活動進程數不大于3那么系統的性能就是良好的,如果每個CPU的任務數大于5,那幺就表示這臺機器的性能有嚴重問題。對于上面的例子來說,由于筆者系統使用是雙CPU,那幺其每個CPU的當前任務數為:6.02/2=3.01。這表示該服務器的性能是可以接受的。
2.使用cron命令進行定時監測系統負載:
cron是一個守護進程,它提供定時器的功能,讓用戶在特定時間執行命令,首先使用命令:“chkconfig -list|grep crond”查看該服務是否啟動,然后使用命令:
# crontab -e
此時打開一個vi編輯器:輸入以下內容:
#30 * * * * * uptime
存盤退出,這樣每隔十五分鐘就記載其平均負載,這樣累計一天,我們就可以得到最近一天的平均負載。
3. OpenLDAP進程的監控
Linux系統提供了ps、top等察看進程信息的系統調用,通過結合使用這些系統調用,我們可以清晰地了解進程的運行狀態以及存活情況,從而采取相應的措施,來確保Linux系統的性能。它們是目前在Linux下最常見的進程狀況查看工具,是隨 Linux版本發行的,安裝好系統之后,用戶就可以使用。這里以ps命令為例,ps命令是最基本同時也是非常強大的進程查看命令。利用它可以確定有哪些進程正在運行及運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等。ps命令可以監控后臺進程的工作情況,因為后臺進程是不和屏幕鍵盤這些標準輸入/輸出設備進行通信的,圖5是ps -ef|grep ldap命令輸出的例子。說明其中PID為3653是主進程。
圖5 OpenLDAP服務器的進程
4.端口的監控
輕型目錄訪問協議默認使用389端口??梢允褂妹睿?/p>
# netstat -an | grep 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN
二、 OpenLDAP服務器自動啟動和安全設定
1.自動啟動OpenLDAP服務器
如果希望ldap每次啟動都能自動運行,可以用ntsysv設置。以root權限運行命令:
# ntsysv
圖6啟動OpenLDAP提供網絡服務
打開如圖6 所示的窗口,在ldap服務選項加上*(用空格鍵),然后重新啟動系統,這樣系統會啟動ldap目錄服務。
2.使用訪問控制(Access Control)實現用戶認證
修改OpenLDAP的配置文件,增加控制模塊方法如下:
# vi /usr/local/etc/OpenLDAP/slapd.conf access to attr=userPassword by anonymous auth by self write by * none access to * by self write by users read |
這里訪問控制用于禁止匿名查詢,而認證用戶可以修改自己的所有屬性,除了userPassword屬性,允許查詢它人的信息條目。上面的每一行都是必須的,如果沒有“by anonymous auth”,需要認證的用戶不能完成認證,因為它查詢不到密碼。所以“auth”在這里的作用就是允許匿名用戶可以讀到密碼,但只能用于驗證,而不能用于其它的用途,這就保證了密碼屬性的安全。
另外前面介紹/etc/OpenLDAP/slapd.conf文件設定密碼時,使用了明文,主要是為了調試方便,實際工作時應當使用加密方法。最新版本的OpenLDAP支持三種加密方法:MD5、CRYPT、SSHA。我們不想將rootpw 存儲在服務器上的明文內,所以我們改用散列。有幾種普遍使用的散列方法可通過slappasswd 命令來實現,包括SHA、SSHA、MD5、和CRYPT在內。安全方面CRYPT最差。SSHA是默認方法,MD5也不錯。使用slappasswd 可以生成一個很好的散列rootpw:
$ slappasswd New password: Re-enter new password: {SSHA}Lr7P++EoH6GpIS4GZ36vkV4R422RuW7R 現在復制粘貼這個很好的新散列到/etc/ldap/slapd.conf內: rootpw {SSHA}Lr7P++EoH6GpIS4GZ36vkV4R422RuW7R |
這是一個永久設置,很適合用在小型的簡單的網絡上。更好的解決方案就是創建一個LDAP記錄,該記錄定義了LDAP管理員,還為LDAP管理員使用slapd.conf中的ACLs (access control lists)定義了訪問權限。盡量少將安全敏感的信息存儲在目錄中.如果非存不可.一定要編輯ACL嚴格的控制訪問權限如userPassword等.多數情況下目錄服務還要主要是給其他的服務提供數據存儲.這樣的話應該讓每個服務器綁定到不通的DN,同時在ACL中賦予他們較高的權限.而不能讓所有的服務都使用rootdn來綁定。
三、 管理OpenLDAP服務器
1. 命令行下的管理
Linux系統管理員更加喜歡使用命令,一定要養成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應用程序。在命令行下學習雖然一開始進度較慢,但是熟悉后,您未來的學習之路將是以指數增加的方式增長的。從網管員來說,命令行實際上就是規則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的調制解調器線路,它也能操縱幾千公里以外地遠程系統。OpenLDAP提供了在Linux命令行下的訪問工具集。包括ldapsearch,ldapadd,ldapmodify,ldappassword,ldapdelete等必要的工具。
2.使用phpldapadmin管理OpenLDAP服務器
phpldapAdmin 是免費的工具,可以管理OpenLDAP服務器,使用它透過瀏覽器就可管理OpenLDAP服務器。phpldapAdmin是一個開源工具,官方主頁:http://phpldapadmin.sourceforge.net/ ,最新版本:0.9.7.2 ,下載安裝步驟:
#cd /var/www/html/ 修改phpMyadmin配置文件: # vi config.php |
然后在Linux 瀏覽器服務器的URL欄目輸入:http://主機/phpldapadmin ,即可。界面見圖7。當然也可以使用IP地址。
圖7 phpMyadmin管理OpenLDAP界面
除了phpMyadmin還有兩個管理工具:ldapbrowser,官方網址:http://www-unix.mcs.anl.gov/~gawor/ldap/ ,最新版本:282b2,ldapbrowser是純JAVA的程序,可跨平臺運行,在開源的程序中,是最優秀的一個。缺點是不能瀏覽服務器端的schema對象,從而限制了條目編輯(添加)的能力。其次,由于JAVA對LDAP的訪問方式在添加時,必須預先生成一個實現DirContext接口的類,因此,這也令訂制型的添加操作在JAVA實現時相當困難。ldapadministrator官方網址:http://www.ldapadministrator.com/ ,最新版本:3.3,ldapadministrator是一個windows的收費程序,試用一個月。Ldapadministrator除了具備ldapbrowser的功能外,在條目編輯上的功能大為增強。
四、Outlook下如下使用OpenLDAP
因為微軟的Outlook 軟件一直占有很大的使用率,所以也的介紹一下Outlook 如何使用OpenLDAP。我們可以使用Outlook 來觀看遠程LDAP 目錄服務器的各項信息。例如我們要搜尋某個員工的資料時,我們只要打開我們的Outlook 就可以查詢該員工的數據了。開啟 Outlook 之后,選擇 工具 / 賬戶,然后再選取“新增 / 目錄服務”。填入你的服務器的IP地址或者主機全稱域名,在下一個屏 幕中選yes以允許用目錄服務來查詢地址,最后在"目錄服務"欄中選中剛才設置的項目擊“屬性/高級",在"搜索庫"中填入 “ou=mycompany,dc=lpenguin,dc=idv,dc=cn”,即可。見圖8。
圖8 Outlook設置界面
五、OpenLDAP在Linux上集群的應用
OpenLDAP在該系統的網絡應用體系中用于對所有應用提供統一的身份認證服務,還包括如郵件路由、地址、聯系人信息等其它信息的查詢。LDAP作為一種特殊的數據庫,通過對讀取、查詢操作進行特別的優化和處理,以保證在查詢速度方面的優勢,所以特別適合用來統一企業的各種認證服務,從而規范各種業務系統的同一登錄身份和口令。當然,它的缺點和優點一樣明顯,比如不善于update、insert等操作,但是如果把它作為中央認證數據庫,則正好可以利用它的長處而回避它的弱點。
由于系統采用了LDAP作為所有應用的中央認證數據庫,一旦該LDAP服務器失效,則系統網絡環境中所有依賴于該數據庫的應用都會受到影響,甚至停止提供相應的服務。為了避免這種情況的發生,就要通過兩臺LDAP服務器建立一個高可靠性的認證數據庫集群,同時對其它應用系統提供統一的數據庫訪問網絡接口。
總結:
以上是Linux下使用OpenLDAP建立目錄服務器,其實在紅帽軟件公司推出目錄服務器之前,Linux的平臺理論上是可以實現目錄服務功能的,但是,Linux的目錄服務功能很多都是由免費開源軟件包幫助實現,并沒有專門的公司來負責開發和維護支持,因此,很多企業用戶都對其心存擔憂。在企業的信息系統中,最重要的就是要系統各方面實現無縫集成。很多企業通常用的都是Windows操作平臺、Oracle數據庫,以及Windows目錄服務器。即使他們采用的是Linux平臺,由于Linux之前沒有專業的公司提供專門的目錄服務器產品,因此這些企業在目錄服務器上還是會選擇Windows。這樣一來,考慮到Linux平臺與Windows目錄服務器無縫連接的問題,企業在選擇平臺時也會很慎重。因此,Linux現在推出自己的目錄服務器,可以完善其產品結構,系統各方面可實現無縫集成,將整個產業鏈向前推動。
主流的LDAP服務器還有Sun Java System Directory Server和IBM Directory Server、Domino,使用它們同樣可行,配置也是大同小異。其中Domino、Sun Java System Directory Server還可以在其他平臺運行。
原文轉自:http://www.anti-gravitydesign.com