安裝環境:
redhat9.0
安裝所需軟體(都是以源碼的方式存在的)
openldap-2.1.29 hrrp://www.openldap.org
Derkeley DB 4.2.52 http://www.sleepycat.com
安裝步驟:
(確認是用root使用者登入)
1、由於openldap需要Berkeley DB來存放資料,所以先安裝Berkeley DB 4.2.52。
解壓
#tar -zxvf db-4.2.52.NC.tar.gz
解壓完成後,會產生一個db-4.2.52.NC的目錄,進入該目錄下的build_unix目錄,執行命令進行配置安裝。
#../dist/configure --prefix=/usr/local/BerkeleyDB (將Derkeley DB安裝到/usr/local/DerkeleyDB目錄下)。
#make
#make install
安裝完成活,要把/usr/local/BerkeleyDB/lib的庫路徑加到/etc/ld.so.conf檔案內,添加完成後執行一次ldconfig,使設定檔生效。
2、安裝openLDAP
解壓
#tar -zxvf openldap-2.1.29.tgz
解壓後產生一個openldap-2.1.29目錄,進入該目錄執行以下命令進行配置安裝。
#env CPPFLAGS="-I/usr/local/gdbm-1.8.3/include" LDFLAGS="-L/usr/local/gdbm-1.8.3/lib"
./configure --prefix=/usr/local/topldap --enable-ldbm --enable-bdb=no
(注意以上的配置語句,要配置資料庫的include和lib路徑,否則在配置到資料庫、相關內容時會提示Berkeley DB版本不相容,
並中段配置。如果沒有--enbale-ldbm=選項,在make test時會提示ldbm找不到)
#make depend
#make
#make test
在make test 的時候如果沒有出現錯誤,就可以安裝了,如果有什麼錯誤,去看看以上內容,有沒有全部都作。
開始安裝
#make install
安裝完成之後,在/usr/local/目錄下將會出現openldap檔案夾。
3、現在相關的軟體已經安裝完成了,現在可以進行配置了。
設定檔在軟體的安裝目錄的etc/openldap下,主要的是slapd.comf和ldap.conf。在進行配置之前最好先將要配置的檔案備份一份。
先配置slapd.conf檔案。
在設定檔中添加:
include /usr/local/openldap/ete/openldap/schema/core.schema
include /usr/local/openldap/ete/openldap/schema/corba.schema
include /usr/local/openldap/ete/openldap/schema/cosine.schema
include /usr/local/openldap/ete/openldap/schema/inetorgperson.schema
include /usr/local/openldap/ete/openldap/schema/misc.schema
include /usr/local/openldap/ete/openldap/schema/openldap.schema
include /usr/local/openldap/ete/openldap/schema/nis.schema
include /usr/local/openldap/ete/openldap/schema/java.schema
(包含檔案按一定順序,因為檔案裡面的屬性存在附屬關係,如果順序不對服務會出現問題)
在argsfile /usr/local/openldap/var/slapd.args下面添加
loglevel 1
增加了日誌功能,需修改syslog設定檔,在檔案中增加一項:local4.* /var/log/ldap.log
日誌的層級如下:
Debugging Levels Level Description
-1 enable all debugging
0 no debugging
1 trace function calls
2 debug packet handling
4 heavy trace debugging
8 connection management
16 print out packets sent and received
32 search filter processing
64 configuration file processing
128 access control list processing
256 stats log connections/operations/results
512 stats log entries sent
1024 print communication with shell backends
2048 print entry parsing debugging
預設的情況下是256
將檔案中的
suffix "dc=my-domain,dc=com"
rootdn "cn=Manager,dc=my-domain,dc=com"
修改成自己的目錄根,指定自己根的管理員。
rootdw 是管理員的密碼,預設密碼是secret,這裡可以使用MD5加密。
現在已經能成功的啟動服務了。但是沒有對目錄訪問的許可權進行設定:
access to attr=userPassword
by self write
by anonymous auth
指的是:userPassword只能自己修改,有效驗證使用者查詢,如果加上
by dn="cn=root,dc=it,dc=com"
那樣cn=root,dc=it,dc=com也可以更改其他人的userPassword.
access to *
by self write
by self read
指的是所有的資訊都可以自己查詢,自己修改。
access to dn=".*,dc=it,dc=com"
by self write
by * read
允許使用者訪問所有沒有被控制訪問限制的資訊。
具體詳細用法請查看www.openldap.org。
到現在openldap已經配置完成了,進入安裝目錄的libexec下,執行
#./sladp (注意是sladp,不是sldap)
如果沒有提示什麼出錯資訊,直接返回shell狀態,就說明伺服器正常啟動了,
你可以查詢日誌或用ps -aux查看。或用以下命令查詢服務器。
執行下面的命令來查看一下服務是不是正常啟動了啟動。
#ldapsearch -x -b "dc=it,dc=com"(你在設定檔中定義的自己的根目錄),如果反悔一些資訊那就
是啟動正常。
用下面的、命令、來查看一下389連接埠是不是已經被監聽了
#netstat -an | grep 389
如果沒有提示什麼錯誤,但是服務也沒有啟動,就可以用
#./sladp -d 256
可以看到提示的什麼資訊,一般都是設定檔錯誤,根據錯誤資訊好好查看一下設定檔。
一定要注意設定檔中的空格,該有的一定要有,有的時候看到整個設定檔沒有什麼錯誤,
可就事啟動不了,有可能是有的地方前面沒有加上空格。
配置ldap.conf檔案。該文檔相當簡單,其實不和配置也能正常操作。
只要將BASE dc=it,dc=com 設定成為自己的目錄起點
4、現在伺服器已經正常運作了,可以錄入資訊了。資訊的錄入方法有三種,一種是手工錄入,一種是.ldif檔案格式錄入,一種是指令碼
自動錄入。我們先從最基礎的手工錄入開始介紹,瞭解錄入資訊的格式。明白了手工錄入的格式,其它兩種方式都很容易明白。
資訊錄入用到ldapadd這個程式,他存在於安裝目錄下的bin中,具體用法如下:
第一步要建立DN:
#ldapadd -x -D 'cn=root,dc=it,dc=com' -W (-x 表示簡單驗證,-D表示指定目錄,-W表示彈出密碼輸入提示)
Enter LDAP Password (提示輸入管理員密碼,在sladp.conf中已經配置的那個密碼)
dn: dc=it,dc=com
objectClass: dcObject
objectClass: organization
dc:it
o:Corportion
description:d Corporation
(注意:每行後面一定不要有空格)
第二步是建立接點:
#ldapadd -x -D 'cn=root,dc=it,dc=com' -W
dn:uid=zyx2,dc=it,dc=com
objectClass:person
objectClass:organizationalPerson
objectClass:inetOrgPerson
uid:zyx2
cn:zyx2
sn:zyx2
mail:zyx@zyx.com
userPassword:zyx
telephoneNumber:13913991399
homePhone:01087788888.
輸入完所有的資訊後,安Ctrl+d結束存檔。如果出現錯誤資訊,請查一下對象類和屬性的對應關係有沒有輸入錯誤。
這裡面最容易出錯的地方是對象類和屬性的對應關係出錯,對象類和屬性是在schema文檔中定義的。它們之間的關係是這樣的,
對象類中有些屬性是必選的,有些屬性是可選的。錄入資訊的屬性必須在對象類中有定義才能用。
比如:inetOrgPerson模式包括以下資訊:
departmentNumber
employeeType
givenName
audio
businessCategory
carLicense
displayName
emlpyeeNumber
homePhone
homePostalAddress
manager
photo
roomNumber
等等,詳見inetorgperson.schema。
schema是openldap中的關鍵,一定要好好查看安裝目錄下的/etc/schema中的檔案。掌握schema的格式和常用屬性所對應的類。
介紹完了手工錄入的方法,現在介紹第二種方法,用.ldif檔案格式錄入。用文字編輯工具寫好.ldif檔案。
下面是一個完成的test.ldif檔案。
dn: dc=it,dc=com
dc: it
description: d Corporation
objectClass: dcObject
objectClass: organization
o: Corporation
dn: uid=zyx, dc=it,dc=com
telephoneNumber: 13810246737
mail: starxing@starxing.com
userPassword:: sssssssss
uid: zyx
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
homePhone: 12345678901
sn: zyx
cn: zyx
dn: ou=people, dc=it,dc=com
userPassword:: c3Rhcnhpbmc=
ou: people
description: User Info
objectClass: top
objectClass: organizationalUnit
dn: uid=1,ou=people, dc=it,dc=com
telephoneNumber: 13800000414
userPassword:: sssssssss
uid: 1
jpegPhoto:: MTIzNDU2Nzg5MA==
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
sn: hhh
cn: hhh
dn: cn=root, dc=it,dc=com
mail: root@root.com
userPassword:: secret
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
sn: root
cn: root
dn: uid=3,ou=people, dc=it,dc=com
telephoneNumber: 13810241111
mail: ddd@dd.com
userPassword:: sssssssss
uid: 3
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
sn: sss
cn: sss
dn: uid=qq, dc=it,dc=com
telephoneNumber: 65498732102
mail: qq@qq.com
userPassword::sssssssss
uid: qq
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
sn: qq
cn: qq
dn: uid=zyx,ou=people, dc=it,dc=com
telephoneNumber: 13810246737
mail: starxing@starxing.com
userPassword:: sssssssss
uid: zyx
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
homePhone: 12345678901
sn: 張彥星
cn: zyx
dn: ou=managers, dc=it,dc=com
userPassword:: sssssssss
ou: managers
description: mangers Info
objectClass: top
objectClass: organizationalUnit
dn: cn=starxing,ou=managers, dc=it,dc=com
mail: zyx1220@yahoo.com.cn
userPassword:: sssssssss
description: mananger for people
objectClass: person
objectClass: organizationalPerson
objectClass: top
objectClass: inetOrgPerson
sn: staring
cn: starxing
dn: ou=people,ou=managers, dc=it,dc=com
userPassword:: sssssssss
ou: people
objectClass: top
objectClass: organizationalUnit
description: User Info
dn: uid=1,ou=people,ou=managers, dc=it,dc=com
telephoneNumber: 13800000414
uid: 1
userPassword:: sssssssss
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
jpegPhoto:: MTIzNDU2Nzg5MA==
sn: hhh
cn: hhh
dn: uid=3,ou=people,ou=managers, dc=it,dc=com
telephoneNumber: 13810241111
mail: ddd@dd.com
uid: 3
userPassword:: sssssssss
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
sn: ssssss
cn: ssssss
dn: uid=zyx,ou=people,ou=managers, dc=it,dc=com
telephoneNumber: 13810246737
mail: starxing@starxing.com
uid: zyx
userPassword:: sssssssss
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
homePhone: 12345678901
sn: zyx
cn: zyx
再次提醒一下,每行的最後不要有空格,並且不能存在同一個DN的記錄,執行以下命令將test.ldif檔案中的內容載入到
openldap中。
#ldapadd -x -D "cn=root,dc=it,dc=com" -W -f /root/test.ldif (-f 表示用檔案錄入資訊, /root/test.ldif指的是檔案的存在地方)
第三種是用指令碼錄入方式,需要自己編寫指令碼。也可以使用現有的工具,比如:phpldapadmin。
下面介紹一下openldap的常用命令。
1 ldapsearch
查詢本人記錄
ldapsearch -x -D 'cn=root,dc=it,dc=com' -W -b 'uid=zyx,dc=it,dc=com'
查詢一個ou記錄(包含成員記錄)
ldapsearch -x -D 'cn=root,dc=it,dc=com' -W -b 'ou=people,dc=it,dc=com'
2 ldapdelete
#ldapdelete -x -D 'cn=root,dc=it,dc=com' -W 'uid=zyx,dc=it,dc=com'
這樣就可以刪除'uid=zyx,dc=it,dc=com'記錄了,應該注意一點,如果o或ou中有成員是不能刪除的。
3 ldappasswd
#ldappasswd -x -D 'cm=root,dc=it,dc=com' -W 'uid=zyx,dc=it,dc=com' -S
New password:
Re-enter new password:
Enter LDAP Password:
就可以更改密碼了,如果原來記錄中沒有密碼,將會自動產生一個userPassword。
4 ldapmodify
#ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif
將modify.ldif中的記錄更新原有的記錄。
啟用sasl驗證
前提是你在系統中安裝了sasl認證庫,並在編譯openldap時支援它,預設就支援了。到http://asg.web.cmu.edu/cyrus/下載。
安裝好之後,需要在sasl中建立相應的帳號,用以下命令可完成。
# saslpasswd2 -c test
接著配置slapd.conf檔案,加入以下內容。
sasl-regexp
uid=(.*),cn=.*,cn=auth
uid=$1,dc=it,dc=com
ok,重啟伺服器使設定檔生效。這個配置是最大許可權的配置,如果要細化請查閱相關文檔。
用以下命令測試。
# ldapsearch -U qq -b 'uid=qq,dc=it,dc=com' -D 'dc=it,dc=com' -Y DIGEST-MD5 採用digest-md5驗證
提示密碼,輸入saslpasswd2的密碼。
參考網站
http://www.openldap.org/doc/admin22/
http://asg.web.cmu.edu/cyrus/
http://phpldapadmin.sourceforge.net/
http://www.linux.org/docs/ldp/howto/LDAP-HOWTO/index.html
http://www.linux.org/docs/ldp/howto/LDAP-Implementation-HOWTO/index.html
http://www.chinaunix.com
原文: http://blog.chinaunix.net/u/9295/showart_80425.html