1.测试环境
a) 安装在虚拟机上的centos6.9
b) openLADP
2.LDAP概述
LDAP 是轻量级目录访问协议的简称(Lightweight Directory Access Protocol).用于访问目录服务。它是 X.500 目录访问协议的移植,但是简化了实现方法。看到目录服务器我的第一反应就是想到书的目录和检索功能,再就是图书馆的图书放置,进而想到yahoo的在一开始的网站导航功能。那么到底什么是目录服务,已经LDAP是什么?
和我的第一反应一样,目录服务就是信息查询服务,实际上是一个数据库,在这个数据库里面存储了网络资源的信息,包括资源的位置、管理。数据信息采用的树状的层次结构存储。
含有目录数据库,提供给用户查询、使用信息的计算机就是目录服务器。X.500是一套目录服务标准,定义了一个机构在全局范围内共享名称和与名称相关联的数据。X.500采用层次结构,其中的管理域可以提供这些域内的用户和资源信息,并定义了强大的搜索功能,因此查询变得更简单。由于X.500目录服务协议过于复杂,因此开发了LDAP(轻量级的目录访问协议)。
LDAP目录存储和组织的基本数据结构称为条目,每个条目都有唯一的标识符,并有一些属性,就类似数据库中每一行代表一条数据,并且有一项是唯一标识。但是LDAP比数据库简单很多,并且常用于查询(也就是读取),写操作不常使用。
目录服务和数据库的差别:
a)目录查询操作比关系数据库有更高的效率,但是更新效率比关系数据库低
b) 目录不支持关系数据库那样的复杂查询,比如两个表的连接。
c) 目录不支持多操作的事物完整性,没有方式确认一些操作是全部成功还是全部失败
d) 目录能够更好和更灵活的支持子查询和匹配查询
e) 目录协议更适合应用于广域网,比如因特网或者大型公司的网络
f) 目录的管理,配置,和调试比关系型数据库更简单
g) 在使用关系数据库之前,必须首先定义表结构(模式)才可以进行操作。而目录中所使用的模式是由 LDAP 定义好的一系列类组成的。对于目录中的每条记录中必须属于其中的一个类或者多个类。这些类定义了该记录中可以存储的信息。
h) 目录以对象的形式存储数据。信息被组织成树型结构。
i) 目录服务支持分布式存储结构,容易实现数据的扩展,能满足大容量存储的要求。
j)ACL控制表对LDAP服务器中的数据进行安全管理。ACL是一种灵活方便的用户访问权限控制方法。LDAP 是一个标准的,开放的协议,具有平台无关性。不会像关系数据库之间互不兼容的问题。
四种模型:
信息模型:描述 LDAP 中信息的表达方式及数据的存储结构
LDAP 信息模型包含三部分 Entries Attributes Values (条目 属性 值)
Entry:Directry 中最基本的信息单元,Entry 中所包含的信息描述了现实世界中的一个真实的对象,在目录系统中它可以理解为,目录树中的一个节点 。在目录中添加一个 Entry 时,该 Entry 必须属于一个或多个 object class ,每一个 object class 规定了该 Entry 中必须要包含的属性,以及允许使用的属性。Entry 所属的类型由属性 objectclass 规定。每一个 Entry 都有一个 DN(distinguished name) 用于唯一的标志 Entry 在directory 中的位置。RDN: 是目录树中节点的相对分辨名。如 :People节点的DN:ou=People,dc=example,dc=com而该节点的 RDN:ou=People。
Attribute: 每个 Entry 都是由许多 Attribute 组成的。每一个属性(Attribute)描述的是对象的一个特征。
命名模型:描述数据在LDAP目录中如何进行组织与区分
上图是一个典型的目录结构
第一个节点 DN 命名为:dn:dc=example,dc=com
第二个节点 DN 命名为:dn:ou=People,dc=example,dc=com
第三个节点 DN 命名为:dn:uid=bjensen,ou=people,dc=example,dc=com
我们说每一个 Entry 的 DN 是唯一的,就是因为这种数形结构决定了,从根节点到其它
任何一个节点的路径是唯一的。
RDN:在 DN 中最左边的内容称为相对域名。如 ou=People,dc=example,dc=com其 RDN 为 ou=People对于共享同一个父节点的所有节点的 RDN 必须是唯一的。如果不属于同一个节点则节
点的 RDN 可以相同。
功能模型:定义了LDAP中有关数据的操作方式,类似于关系型数据库SQL语句。
查询类操作:搜索,比较
更新操作:添加条目,删除条目,修改条目,修改条目名
认证操作:绑定,解绑定,放弃
其他操作:
安全模型:描述如何保证LADP目录中的数据安全
LDAP 中的安全模型主要通过身份认证、安全通道和访问控制(ACL)来实现
LDAP 是一个面向连接的协议,在能够对 LDAP 目录进行任何操作之前,LDAP 客户端必须获得一个到 LDAP 服务端的一个连接,在这个过程中需要对 LDAP 客户端的身份进行验证,这一过程可以理解为用户绑定。
LDAPV2 只支持简单的密码验证。
LDAPV3 实现了 SASL 安全框架,SASL 为多种验证协议提供了一种标准的验证方法,对于不同的验证系统,可以实现特定的 SASL 机制。SASL 机制代表了一种验证协议。在用户通过验证之后,可以为该用户分配附加的权限,比如一些用户只能查看特定的 Entry,而不能修改。一些用户可以查看并且修改所有的 Entry 等。这一过程可以理解为访问控制。
LDIF
通过一个文本文件,用来描述目录数据,可以将目录服务器中的数据导出到一个 LDIF文件中,并且可以将 LDIF 文件中的数据导入到另一个目录服务器。即使这两个目录服务器内部使用的是不同的数据库格式。
有两种类型的 LDIF 文件,第一种用来描述 Directory 目录数据的,第二种包含更新语句,用于更新现有的 Directory 条目数据。
常用LADP协议的产品:
eTrust Directory 提供主干的目录服务,可以满足大规模在线的业务应用所带来的最为紧迫的需求支持LADPv3目录访问。
Active Directory 微软的域服务,如果对windows比较熟悉应该使用过。
Apache directory server:ApacheDS 的安装比较简单,没有什么特殊的设置。在 ApacheDS 安装完成后要启动 ApacheDS服务。路径如下:控制面板--- 管理工具---服务--Apache Directory serverApacheDS 的监听端口默认为 10389
Sun directory server:属于SUN ONE 系统产品的一种。
openDS一个开源的基于LDAP和DSML标准的Directory service。Directory service不仅包括Directory server,还有其它与directory相关的基本service:directory proxy、virtual dirctory、namespace distribution和数据同步Directory server是一个可以通过网络访问信息分级存储的数据库。OpenDS 只 能用 在 linux 操 作 系 统 。该 项目 的 地 址为 :http://www.opends.org/
OpenLDAP:开源的软件,本文将以此来测试安装、配置、运行LDAP.
3.软件安装
查看yum源:yum list |grep openldap
(其实此处查看错误了,根本不是所谓的服务器软件)。openldap需要libtool-ltdl的支持,另外还需要Berkeley DB数据的支持。
如果以上信息说明已经安装好软件了。还需要配置文件的配置信息。
rpm -ql openldap 查看安装后文件。ldap.conf是主配置文件(
特别说明这个是错误的
)。
这里可以看到没有启动脚本,我也不知道什么原因,因此我想卸载openldap之后在重新安装,但是我在卸载的过程中出现报错。说明卸载的一个依赖包被yum使用。
yum remove openldap
报错
后来使用
rpm -e --nodeps openldap
是卸载了,但是yum也无法使用了。
解决办法:强制安装openldap
wget http://ftp.pbone.net/mirror/ftp.scientificlinux.org/linux/scientific/6.4/x86_64/updates/fastbugs/openldap-2.4.2332.el6_4.1.x86_64.rpm
rpm -v --checksig ./openldap-2.4.23-32.el6_4.1.x86_64.rpm rpm -ivh --force --nodeps openldap-2.4.23-32.el6_4.1.x86_64.rpm
但是这个安装之后,还是没有发现openldap可以使用。进一步确认发现我们安装的软件openldap根本不是我们需要的那个软件。所以一定要记住。
yum install -y openldap-servers
安装完成
再使用 rpm -ql openldap-servers可以看到已经安装的文档。主要文件:
测试关闭了启动都正常
/etc/rc.d/init.d/slapd start service slapd stop
除了服务器软件之外还有关于openldap的客户端软件
yum install -y openldap-clients
使用
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
(搜索命令测试服务器运行正常。)
4.配置文件
虽然使用了rpm -ql的命令可以看到配置文件,但是我在那个文件夹里面并没有发发现配置文件,没有配置文件但是上面测试时候也是正常的,这就非常奇怪了。最后网上查询得知,使用yum安装的软件默认使用的是动态的配置目录slapd.d。
如果需要使用之前slapd.conf配置文件可以自己新建一个,但是需要将原来的目录改名字。在网上找了一个别人配置好的文件。下面是对配置文件的一个说明可以自行查看。
在添加目录树到LDAP数据库中,需要使用LDIF文件。我们来看一个ldif文件:
dn:<唯一标识>
<属性名称1>:<属性值1>
<属性名称2>:<属性值2>
类似上面的形式。如果需要详细了解LDIF文件可以自行查询。本人也只是简单 的连接了下。
5.测试
在上面已经测试可以正常启动和登录,都是命令行形式的操作,如果希望图形化管理LDAP目录,可以考虑安装phpLDAPadmin可以图形化的管理LDAP服务器各个方面,但是需要支持php的apache服务器。其实就是将phpLDAPadmin文件复制到apache服务器的/var/www/html目录中就要可以了。
关于LDAP使用主要是用来认证,例如某一个系统需要赋予用户不同的权限,就可以使用认证。