http://www.openldap.org/html
http://blog.csdn.net/chinalinuxzend/article/details/1870656 OpenLDAP學習筆記 linux
http://www.ttlsa.com/linux/openldap-openssh-lpk-sudo-tls-auth/ LINUX下基於LDAP集中系統用戶認證系統數據庫
http://directory.apache.org/api/ apache dierctoryapache
http://blog.csdn.net/zmxj/article/details/369456 ldap目錄樹的結構windows
在安裝配置任何一個服務器時,儘可能養成一個好習慣,就是在命令行下使用bash內置的目錄棧命令,由於要固定的用那麼幾個命令,目錄棧此時正好用上。api
svn,httpd,openldap服務器配置目錄與數據目錄比較瀏覽器
[root@host02 ~]# cd /mnt/sharerepo/ [root@host02 sharerepo]# ls aa.log client conf server terminal wuliu [root@host02 server]# ls conf db format hooks locks README.txt
[root@host02 db]# ll
total 672
-rw-rw-rw-+ 1 96 96 2 Nov 11 01:39 current
-r--r--r--+ 1 96 96 22 Oct 28 13:53 format
-rw-rw-rw-+ 1 96 96 1920 Oct 28 13:53 fsfs.conf
-rw-rw-rw-+ 1 96 96 5 Oct 28 13:53 fs-type
-rw-rw-rw-+ 1 96 96 2 Oct 28 13:53 min-unpacked-rev
-rw-r--r--+ 1 96 96 636928 Nov 11 01:39 rep-cache.db
drwxrwsrwx+ 3 96 96 4096 Oct 28 13:53 revprops
drwxrwsrwx+ 3 96 96 4096 Oct 28 13:53 revs
drwxrwsrwx+ 2 96 96 4096 Nov 11 01:39 transactions
-rw-rw-rw-+ 1 96 96 2 Nov 10 23:18 txn-current
-rw-rw-rw-+ 1 96 96 0 Oct 28 13:53 txn-current-lock
drwxrwsrwx+ 2 96 96 4096 Nov 11 01:39 txn-protorevs
-rw-rw-rw-+ 1 96 96 37 Oct 28 13:53 uuid
-rw-rw-rw-+ 1 96 96 0 Oct 28 13:53 write-lock
svn的配置目錄 /mnt/sharerepo/server/conf svn的數據目錄 /mnt/sharerepo/server/db httpd的配置目錄 /etc/httpd/conf/ httpd的數據目錄 /var/www/html/ openldap的配置目錄 10:24:28 43 /usr/local/etc/openldap:#ll total 40 -rw-r--r--. 1 root root 618 Nov 13 10:06 1.ldif -rw-------. 1 root root 845 Nov 2 17:22 DB_CONFIG.example -rw-r--r--. 1 root root 245 Nov 2 17:22 ldap.conf -rw-r--r--. 1 root root 245 Nov 2 17:22 ldap.conf.default drwxr-xr-x. 2 root root 4096 Nov 2 17:22 schema -rw-------. 1 root root 1956 Nov 5 17:34 slapd.conf -rw-------. 1 root root 2129 Nov 2 17:22 slapd.conf.default drwxr-xr-x. 2 root root 4096 Nov 13 10:02 slapd.d -rw-------. 1 root root 2626 Nov 5 17:17 slapd.ldif -rw-------. 1 root root 2651 Nov 2 17:22 slapd.ldif.default openldap的數據目錄 10:23:35 41 /usr/local/var/openldap-data:#ll total 1016 -rw-r--r--. 1 root root 4096 Nov 5 17:34 alock -rw-------. 1 root root 24576 Nov 5 17:34 __db.001 -rw-------. 1 root root 188416 Nov 5 17:34 __db.002 -rw-------. 1 root root 270336 Nov 5 17:34 __db.003 -rw-------. 1 root root 98304 Nov 5 17:34 __db.004 -rw-------. 1 root root 753664 Nov 5 17:34 __db.005 -rw-------. 1 root root 32768 Nov 5 17:34 __db.006 -rw-------. 1 root root 845 Nov 2 17:22 DB_CONFIG.example -rw-------. 1 root root 8192 Nov 5 15:14 dn2id.bdb -rw-------. 1 root root 32768 Nov 5 15:14 id2entry.bdb -rw-------. 1 root root 10485760 Nov 5 17:15 log.0000000001 -rw-------. 1 root root 8192 Nov 5 15:14 objectClass.bdb
yum install openldap-servers安全
yum install openldap-clientsbash
/usr/sbin/slapacl
/usr/sbin/slapadd
/usr/sbin/slapauth
/usr/sbin/slapcat
/usr/sbin/slapd
/usr/sbin/slapdn
/usr/sbin/slapindex
/usr/sbin/slappasswd
/usr/sbin/slapschema
/usr/sbin/slaptest服務器
LDAP:Lightweight Directory Access Protocol 輕量級目錄訪問協議
LDAP協議基於X.500標準, 與X.500不一樣,LDAP支持TCP/IP, 是跨平臺的和標準的協議
LDAP標準其實是在X.500標準基礎上產生的一個簡化版本
AD是Active Directory的縮寫,AD應該是LDAP的一個應用實例,而不該該是LDAP自己。好比:windows域控的用戶、權限管理應該是微軟公司使用LDAP存儲了一些數據來解決域控這個具體問題,
只是AD順便還提供了用戶接口,也能夠利用Active Directory當作LDAP服務器存放一些本身的東西而已。好比LDAP是關係型數據庫,微軟本身在庫中創建了幾個表,每一個表都定義好了字段。顯然這些表和字段都是根據微軟本身的需求定製的,而不是LDAP協議的規定。而後微軟將LDAP作了一些封裝接口,用戶能夠利用這些接口寫程序操做LDAP,使得Active Directory也成了一個LDAP服務器。
總之:Active Directory = LDAP服務器+LDAP應用(Windows域控)。Active Directory先實現一個LDAP服務器,而後本身先用這個LDAP服務器實現了本身的一個具體應用(域控)
7.1.2
目錄服務標準:X.500和LDAP
目錄服務的兩個國際標準是X.500和LDAP。X.500包括了從X.501到X.509等一系列目錄數據服務,已經被做爲提供全球範圍的目錄服務的一種國際標準。
而LDAP是基於TCP/IP協議的目錄訪問協議,是Internet上目錄服務的通用訪問協議。
X.500是國際電聯定義的目錄標準,它包括了一系列完整的目錄數據服務。用於X.500客戶機與服務器通訊的協議是DAP(Directory Access Protocol)。X.500爲網絡用戶提供分佈式目錄服務。
它定義一個機構如何在一個企業的全局範圍內共享名字和與它們相關的對象。X.500規定整體命名方式,全球統一的名字空間,一個完整的X.500系統稱爲一個目錄。這個目錄是一個數據庫,稱爲目錄信息數據庫(DIB)。X.500是層次性的,全部對象被組織成樹形結構,模仿一個機構的組織形式。X.500目錄服務還可以實現身份認證、訪問控制。它被公認爲是實現一個目錄服務的最好途徑,可是它的實現須要很大投資,效率不高,在實際應用中存在着很多障礙。DAP對相關層協議環境要求過多,在許多小系統上沒法使用,也不適應TCP/IP協議體系。
鑑於此,出現了DAP的簡化版LDAP。
LDAP(Lightweight Directory Access Protocol)的目的很明確,就是要簡化X.500目錄的複雜度以下降開發成本,同時適應Internet的須要。LDAP已經成爲目錄服務的標準,它比X.500 DAP協議更爲簡單實用,並且能夠根據須要定製,於是實際應用也更爲普遍。與X.500不一樣,LDAP支持TCP/IP協議,這對訪問Internet是必需的。X.500採用公鑰基礎結構(PKI)做爲主要的認證方式,而LDAP最初並不考慮安全問題,目前已增長安全機制。爲保證數據訪問安全,可以使用LDAP的ACL(訪問控制列表)來控制對數據讀和寫的權限。
LDAP目前有兩個版本:第2版LDAP v2和第3版LDAP v3。基於LDAP v3的服務器可讓普通用戶使用支持LDAP功能的Web瀏覽器,進行有關電子郵件用戶的查詢,能夠查詢的用戶屬性包括姓名、電話號碼、電子郵件地址和地址信息等;系統管理員能夠經過LDAP客戶程序遠程進行目錄管理操做,如添加、刪除和修改用戶帳戶信息等;能夠請求服務器執行擴展操做。
內部細節並不重要,由於這些工具能夠將數據庫的內容以文本格式(LDAP 數據交換格式,LDIF)呈如今您的面前。
LDAP 信息被組織成屬性和值的組合,稱爲 條目(entry)。條目可能會具備必須的屬性或可選屬性。一個條目的屬性必需要遵循 /etc/openldap/schema/ 模式文件中定義的規則。規則包含在條目的 objectclass 屬性中。看一下下面的關係,咱們能夠看出 posixAccount objectclass 中包含了密碼文件條目的信息(posixAccount userPassword 是文件條目的 base64 編碼)。
在LDAP中信息以樹狀方式組織,在樹狀信息中的基本數據單元是條目,而每一個條目由屬性構成,屬性中存儲有屬性值
(1)O:Organization 組織
根的表示方法(參考LDAP Server)
a. 組織名稱(x.500)
假設組織名稱爲zhangyang
o=zhangyang
b. 域名
假設組織域名爲zhangyang.com
o=zhangyang.com或dc=zhangyang, dc=com
(2)OU: Organization Unit 組織單元
(3)Entry: 條目,記錄, 由DN惟一標識
(4)DN: Distinguished Name,每一個葉子結點到根的路徑就是DN
如: cn=test, ou=ou1, o=zhangyang.com
(5)RDN: Relative Distinguished Name,葉子結點自己的名字是RDN
如:test就是RDN
(6)Base DN: 基準DN,指定LDAP search的起始DN,即從哪一個DN下開始搜索
搜索組織單元爲ou1,則base DN爲 ou=ou1,o=O
ou=ou1,o=zhangyang.com 或 ou=ou1,dc=zhangyang, dc=com
(7)AttributeType:屬性類型,
(8)ObjectClass: 對象類,由多個attributetype(屬性類型)組成, 每一個條目(Entry)必須屬於某個或多個對象類(Object Class)
(9)schema文件: 定義對象類、屬性類型、語法和匹配規則, 有系統schema,用戶也可自定義schema文件
(10) LDIF:LDAP Interchange Format, 是指存儲LDAP配置信息及目錄內容的標準文本文件格式。LDIF文件經常使用來向目錄導入或更改記錄信息,
基本格式:AttributeName: value
屬性名 冒號 空格 屬性值
如
dn: dc=zy,dc=net
objectclass: dcObject
objectclass: organization
dc: zy
o: zhangyang
(11)監聽端口
TCP/IP port: 389
SSL port: 636
3、Search filter:
每一個表達式都放在括號內,多個表達式用與(&),或(|),非(!)等連結
& (&(filter1)(filter2)...(filtern)) filter1,filter2,...,filtern同時知足
| (|(filter1)(filter2)...(filtern)) filter1,filter2,...,filtern至少有一個知足
! (!(filter)) 非filter
filter支持通配符(wildcard)*
*表示零或多個字符
如(objectclass=*),指列出全部類型的記錄(不過度類)
4、LDAP客戶端和LDAP服務器端交互過程
1. 綁定。LDAP客戶端與LDAP服務器創建鏈接。可匿名綁定,也能夠用戶名+密碼形式綁定(具體參考LDAP Server, AD不支持匿名查詢)。
2. LDAP客戶端向LDAP服務器發出查詢、添加、修改、刪除entry等操做。
3. 解除綁定。LDAP客戶端與LDAP服務器斷開鏈接。
5、 LDAP軟件
常見的LDAP服務器:Microsoft Active Directory, IBM Domino, openldap
常見的LDAP客戶端: JXplorer
DNS樹
UNIX文件的目錄樹
ldap的DIT
超級用戶與密碼由slapd.conf下面指定
rootdn "cn=Manager,dc=fgy,dc=com"
rootpw secret
curl -O ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.42.tgz
tar zxvf openldap-2.4.42.tgz
cd openldap-2.4.42
./configure
yum install db4-devel
make depend
make
make test
make install
cd /usr/local/etc/openldap
vi slapd.conf
cd /usr/local/var/openldap-data
/usr/local/libexec/slapd
默認安裝完成以後,就能夠啓動,而後儘可能經過工具去操做slapadd,slaptest等
兩種配置方式老的slapd.conf,與新的slapd-config方式。
mkdir slapd.d
兩種方式,
1.複製一個現成的,而後添加
cp slapd.ldif slapd.d/1.ldif
grep -v "^#" 1.ldif >2.ldif
slapadd -F /usr/local/etc/openldap/slapd.d -n 0 -l 2.ldif
優先順序是先檢查slapd.d目錄中有無slapd-config方式的文件,如無,會找slapd.conf文件來啓動,並生成bdb格式的文件,以下
[root@localhost slapd.d]# ll /usr/local/var/openldap-data/
total 980
-rw-r--r--. 1 root root 2048 Nov 14 09:46 alock
-rw-------. 1 root root 24576 Nov 14 09:46 __db.001
-rw-------. 1 root root 188416 Nov 14 09:46 __db.002
-rw-------. 1 root root 270336 Nov 14 09:46 __db.003
-rw-------. 1 root root 98304 Nov 14 09:46 __db.004
-rw-------. 1 root root 753664 Nov 14 09:46 __db.005
-rw-------. 1 root root 32768 Nov 14 09:46 __db.006
-rw-------. 1 root root 8192 Nov 14 09:46 dn2id.bdb
-rw-------. 1 root root 32768 Nov 14 09:46 id2entry.bdb
-rw-------. 1 root root 10485760 Nov 14 09:46 log.0000000001
在服務未啓動以前就添加或轉換,這樣當服務啓動後,會在此ldif所定義的目錄中生成如下文件
[root@localhost slapd.d]# ll /usr/local/var/openldap-data/
total 16
-rw-------. 1 root root 12288 Nov 14 10:08 data.mdb
-rw-------. 1 root root 8192 Nov 14 10:08 lock.mdb
2.將現成的進行轉換
slaptest -f /usr/local/etc/openldap/slapd.conf -F /usr/local/etc/openldap/slapd.d
kill -INT `cat /usr/local/var/run/slapd.pid`
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
ldapsearch -x -b 'dc=fgy,dc=com' '(objectclass=*)'
ldapsearch -x -D cn=config -w VerySecret -b cn=config
ldapsearch -x -D cn=config -w secret -b cn=config
ldapadd -x -D "cn=Manager,dc=fgy,dc=com" -W -f a.ldif
ldapadd -x -D "cn=wo,dc=fgy1,dc=com" -W -f b.ldif
ldapwhoami
slaptest -f slapd.conf -F slapd.d
slapindex -b 'dc=fgy,dc=com'
slappasswd -s wo
10:39:45 16 ~/packages/openldap-2.4.42:#slaptest -u -f /usr/local/etc/openldap/slapd.conf config file testing succeeded 15:08:25 62 /usr/local/etc/openldap/schema:#/usr/local/libexec/slapd -d ? Installed log subsystems: Any (-1, 0xffffffff) Trace (1, 0x1) Packets (2, 0x2) Args (4, 0x4) Conns (8, 0x8) BER (16, 0x10) Filter (32, 0x20) Config (64, 0x40) ACL (128, 0x80) Stats (256, 0x100) Stats2 (512, 0x200) Shell (1024, 0x400) Parse (2048, 0x800) Sync (16384, 0x4000) None (32768, 0x8000) NOTE: custom log subsystems may be later installed by specific code
控制檯查看日誌
14:01:20 122 /usr/local/etc/openldap:#/usr/local/libexec/slapd -d 256
56457cb5 @(#) $OpenLDAP: slapd 2.4.42 (Nov 2 2015 17:08:40) $
root@localhost.localdomain:/root/packages/openldap-2.4.42/servers/slapd
56457cb5 bdb_db_open: warning - no DB_CONFIG file found in directory /usr/local/var/openldap-data: (2).
Expect poor performance for suffix "dc=fgy,dc=com".
56457cb5 bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
56457cb5 bdb_db_open: warning - no DB_CONFIG file found in directory /usr/local/var/open: (2).
Expect poor performance for suffix "dc=fgy1,dc=com".
56457cb5 bdb_db_open: warning - no DB_CONFIG file found in directory /usr/local/var/myhome: (2).
Expect poor performance for suffix "dc=myhome,dc=com".
56457cb5 slapd starting
15:08:48 63 /usr/local/etc/openldap/schema:#ps -ef|grep slapd root 6932 1 0 Nov02 ? 00:00:00 /usr/local/libexec/slapd root 25258 19416 0 15:09 pts/0 00:00:00 grep slapd 中止服務 15:14:01 76 /usr/local/etc/openldap:#kill -INT `cat /usr/local/var/run/slapd.pid` 15:14:21 77 /usr/local/etc/openldap:#ps -ef|grep slapd root 25383 19416 0 15:14 pts/0 00:00:00 grep slapd 啓動服務 15:14:27 78 /usr/local/etc/openldap:#/usr/local/libexec/slapd 15:14:52 79 /usr/local/etc/openldap:#ps -ef|grep slapd root 25385 1 0 15:14 ? 00:00:00 /usr/local/libexec/slapd root 25388 19416 0 15:14 pts/0 00:00:00 grep slapd 15:23:19 85 /usr/local/etc/openldap:#man slapd.conf 15:23:19 85 /usr/local/etc/openldap:#man slapd.backends 15:33:29 91 /usr/local/etc/openldap:#man slapd-bdb 15:40:51 92 /usr/local/etc/openldap:#man slapd-mdb 10:32:01 11 ~/packages/openldap-2.4.42:#slappasswd New password: Re-enter new password: {SSHA}J/PnUzwhAju1gn6hqUzktwhZKOHpEzuU 15:50:34 102 /usr/local/etc/openldap:#slappasswd -s wo {SSHA}FxVQwKTQrn0vwIJ2KUmPwy2aJkk0wl+F 16:08:11 14 ~:#cat b.ldif dn: dc=fgy1,dc=com objectclass: dcObject objectclass: organization o: woei dc: fgy1 dn: cn=wo,dc=fgy1,dc=com objectclass: organizationalRole cn: wo 下面這個密碼是fgy1.com的密碼,每一個suffix的密碼由rootpw指定 16:08:15 15 ~:#ldapadd -x -D "cn=wo,dc=fgy1,dc=com" -W -f b.ldif Enter LDAP Password: ldap_bind: Invalid credentials (49) 16:08:44 16 ~:#ldapadd -x -D "cn=wo,dc=fgy1,dc=com" -W -f b.ldif Enter LDAP Password: adding new entry "dc=fgy1,dc=com" adding new entry "cn=wo,dc=fgy1,dc=com" vi /usr/local/etc/openldap/slapd.conf 加入下面部分,定義了兩個數據庫,目錄要在啓動服務以前先創建,權限通常700,不然不能啓動服務 database bdb suffix "dc=fgy,dc=com" rootdn "cn=Manager,dc=fgy,dc=com" rootpw secret directory /usr/local/var/openldap-data index objectClass eq database bdb suffix "dc=fgy1,dc=com" rootdn "cn=wo,dc=fgy1,dc=com" rootpw {SSHA}FxVQwKTQrn0vwIJ2KUmPwy2aJkk0wl+F directory /usr/local/var/open index objectClass eq
添加項(entry)的過程是:不論是slapd.conf,仍是slapd-config方式,
slapd.conf方式
先添加這些內容 database bdb suffix "dc=fgy,dc=com" rootdn "cn=Manager,dc=fgy,dc=com" rootpw secret directory /usr/local/var/openldap-data index objectClass eq 再書寫一個a.ldif,實際上是書寫兩個entry,就是suffix與rootdn dn: dc=fgy,dc=com objectclass: dcObject objectclass: organization o: example company dc: fgy dn: cn=Manager,dc=fgy,dc=com objectclass: organizationalRole cn: Manager
而後再導入,而後再添加其它的entry
ldapadd -x -D "cn=Manager,dc=fgy1,dc=com" -W -f a.ldif
slapd-config方式
先書寫一個2.ldif,再初始化slapadd -F /usr/local/etc/openldap/slapd.d -n 0 -l 2.ldif,再啓動服務以下:dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /usr/local/var/run/slapd.args olcPidFile: /usr/local/var/run/slapd.pid dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema include: file:///usr/local/etc/openldap/schema/core.ldif dn: olcDatabase=frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: frontend dn: olcDatabase=mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: mdb olcSuffix: dc=flt,dc=com olcRootDN: cn=wo,dc=flt,dc=com olcRootPW: secret olcDbDirectory: /usr/local/var/open2 olcDbIndex: objectClass eq而後再添加entry,olcsuffix與olcrootdn是必添加項,與sldap.conf方式同樣,每一項完成以後,要空格。15:05:46 26 /usr/local/etc/openldap/slapd.d:#ldapadd -x -D "cn=wo,dc=flt,dc=com" -WEnter LDAP Password:dn:dc=flt,dc=comobjectclass:dcObjectobjectclass:organizationo:fltdzdc:fltadding new entry "dc=flt,dc=com"dn:cn=wo,dc=flt,dc=comobjectclass:organizationalRolecn:woadding new entry "cn=wo,dc=flt,dc=com"dn:cn=Barbara Jensen,dc=flt,dc=comobjectClass:personcn:Barbara Jensencn:Babs Jensensn:Jensenadding new entry "cn=Barbara Jensen,dc=flt,dc=com"dn:cn=wxy,ou=members,dc=flt,dc=comcn:wxysn:WXYobjectclass:personadding new entry "cn=wxy,ou=members,dc=flt,dc=com"