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"