企业内部须要认证的服务不少,员工须要记住不少的密码, 即便对这些服务进行相同的密码设置,也存在很大的安全隐患。笔者目前工做的企业就是如此,每个新员工的到来管理员都要初始化不少密码,而这些密码都被设置成了“888888”等弱密码,因为各类软件的认证机制之间没有使用一个统一的标准,员工没法一次性修改全部服务的密码,这致使不少即便是入职好久的员工都还在使用这个“众所周知”的密码。php
另外—个比较严重的问题出如今公司增长内部服务的时候,例如领导要在公司内部提供邮件服务或把现有的Proftpd 换成更高效的Vsftpd,管理员须要从新为全部的员工初始化新的帐户信息,对于一个有上千员工的企业来讲这将是一个“灾难”。html
若是能够为各类软件提供一个标准的认证机制,全部软件就能够再也不用独有的用户管理方法, 而是经过这种统一的认证机制进行用户认证,这样就解决了目前不少企业遇到的问题。LDAP正是这样一种标准的协议,LDAP的历史能够追溯到1988年,以后诞生的不少软件基本上都支持这个协议。近年随着企业对LDAP需求的不断增长,绝大多数有认证机制的软件都会首先提供对LDAP的支持。本文将介绍经过LDAP统一身份认证的方法,以简化这种复杂的管理过程。web
LDAP概述算法
LDAP是Light weight Directory Access Protocol(轻量级目录访问协议)的缩写,其前身是更为古老的DAP协议。它是基于X.500标准的,可是很简单,而且能够根据须要定制。与X.500不一样,LDAP支持TCP/IP,这对访问Internet是必需的。LDAP的核心规范在RFC中都有定义, 大致上讲LDAP协议定义了和后台数据库通讯的方法及客户端软件和LDAP协议之间的通讯标准,如图1所示(更详细的说明能够参见相关的RFC文档)。数据库
在图1中,LDAP Client指各类须要身份认证的软件,例如Apache、Proftpd和Samba等。LDAP Sever指的是实现LDAP协议的软件,例如OpenLDAP等。Datastorage指的是OpenLDAP的数据存储,如关系型数据库(MySQL)或查询效率更高的嵌入式数据库(BerkeleyDB),甚至是平面文本数据库(—个txt的文本文件)。可见,OpenLDAP软件只是LDAP协议的一种实现形式,并不包括后台数据库存储。但在不少时候管理员常常将LDAP Server和DataStorage放在同一台服务器,这样就产生了人们一般所说的“LDAP数据库”。虽而后台数据库(backend)能够是多种多样,但LDAP协议还规定了数据的存储方式。LDAP数据库是树状结构的,与DNS相似,如图2所示。浏览器
图2 跨国公司员工信息的树状逻辑结构安全
在图中,以这种方式存储数据最大的一个好处就是查询速度快,LDAP数据库专门对读操做进行了优化, OpenLDAP配合Berkeley DB可以使其读操做的效率获得很大提升。LDAP数据库的树状结构的另外一个好处是便于分布式的管理,有关这方面的内容将在后面有所介绍。服务器
实现思路网络
统一身份认证主要是改变原有的认证策略,使须要认证的软件都经过LDAP进行认证,如图3所示。在统一身份认证以后,用户的全部信息都存储在LDAP Server中。终端用户在须要使用公司内部服务的时候,都须要经过LDAP服务器的认证。每一个员工只须要记住一个密码,在须要修改用户信息的时候能够经过管理员提供的Web界面直接修改LDAP Server中的信息。
图3修改后的认证策略
目前大部分主流软件都对LDAP提供很好地支持,但因为各类软件对LDAP的支持程度不一样,在作实施的时候也要区别对待。软件对LDPA的支持能够大概分为两大类:
一类是彻底支持,也就是在软件的配置文件中加入和LDAP有关的选项就能够完成。这种方式的好处是不须要借助其余的工具或软件,由软件的开发团队直接完成对LDAP的支持。可能的缺陷也在此,因为各个软件开发团队的水平和开发者经验有所差别,虽然一样是支持了LDAP,但稍微复杂一些的高级功能就没法提供,有的时候甚至出现运行错误致使整个软件出现问题。笔者曾遇到过一个基于Web的CVS浏览软件,安装文档中说明了支持LDAP,但实际使用当中遇到了不少问题致使整个软件crash。一些比较主流的软件,例如Apache 2.X对LDAP的支持已经近乎完美。
另外一类软件因为不少缘由并不直接支持LDAP,而是经过PAM 作身份认证,因为PAM自己支持LDAP,这样也一样能够实现使用LDAP作身份认证。这种方式对LDAP的支持一样有其优点,软件开发人员不须要修改代码支持LDAP协议,减小了软件自己产生安全漏洞的可能。缺点是在一些不但愿使用PAM 的系统中,这样的软件就没法经过LDAP进行用户认证,并且虽然PAM对LDAP的支持已经很完善,但一些高级、复杂的功能仍是没法实现。正因为这些缘由,这类软件为数很少,比较典型的就是Vsftpd和CVS。
使用LDAP作身份认证
介绍到这里可能不少读者会问为何须要使用LDAP数据库?用传统的关系型数据库不能够吗?从上文能够看到,LDAP服务器就是起到了一个认证Server的做用,从技术自己而言,这个认证Server具体使用的是何种数据库并不重要,若是使用一个关系型数据库也能够达到统一身份认证的目的,但LDAP 自身的优点使得不少公司最终选择它。如下笔者列举了一些选择LDAP的重要缘由:
◆LDAP是一个开放的标准协议,不一样于SQL数据库,LDAP的客户端是跨平台的,而且对几乎全部的程序语言都有标准的API接口。即便是改变了LDAP数据库产品的提供厂商,开发人员也不用担忧须要修改程序才能适应新的数据库产品。这个优点是使用SQL语言进行查询的关系型数据库难以达到的。
◆因为LDAP数据库的数据存储是树结构,整棵树的任何一个分支均可以单独放在一个服务器中进行分布式管理,不只有利于作服务器的负载均衡,还方便了跨地域的服务器部署。这个优点在查询负载大或企业在不一样地域都设有分公司的时候体现尤其明显。
◆LDAP支持强认证方式,能够达到很高的安全级别。在国际化方面,LDAP使用了UTF-8编码来存储各类语言的字符。
◆更灵活添加数据类型,LDAP是根据schema的内容定义各类属性之间的从属关系及匹配模式的。例如在关系型数据库中若是要为用户增长一个属性,就要在用户表中增长一个字段,在拥有庞大数量用户的状况下是十分困难的,须要改变表结构。但LDAP只须要在schema中加入新的属性,不会因为用户的属性增多而影响查询性能。
◆LDAP数据库是对读操做进行优化的一种数据库,在读写比例大于7比1的状况下,LDAP会体现出极高的性能。这个特性正适合了身份认证的须要。
目前,不少公司都把LDAP和本身的产品、技术结合在一块儿,增长LDAP在各个领域中的有效性,这一切都来源于LDAP是一个开放的协议,很容易和其余标准协议共存。
LDAP软件的选择
目前,几乎全部大IT厂商都有本身商用的LDAP产品,每一个厂商的LDAP产品都有其特色,不少时候用户更多地选择开源的OPenLdap。
OpenLDAP与其余的商用软件相比有不少优点, 商用的软件版本更新很慢,对Bug的反应速度比开源软件差许多,OpenLDAP还包含了不少有创造性的新功能,能知足大多数使用者的要求。笔者曾使用过许多商用LDAP产品,OpenLDAP是其中最轻便且消耗系统资源最少的一个。OpenLDAP是开源软件,近年国内不少公司开发的LDAP产品都是基于OpenLDAP开发的。
OpenLDAP的源代码能够到官方网站(http://www.openldap.org)下载,安装过程也很简单。因为openldap须要Berkeley DB来存放数据,因此需先安装Berkeley DB 4.4.20,可到它的网站下载,网址见上。
# tar -zxvf db-4.4.20.tar.gz
解完压后,会生成一个db-4.4.20目录,进入该目录下的build_unix目录。执行如下命令进行配置安装。
# ../dist/configure
# make
# make install
# tar -zxvf openldap-stable-20090411.tgz
解压完成后,会生成一个openldap目录。进入该目录,执行如下命令进行配置安装。
#env CPPFLAGS="-I/usr/local/BerkeleyDB.4.2/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.4/lib" ./configure -prefix=/usr/local/openldap --enable-ldbm
注意以上配置语句,要设置资料库的include和lib路径,不然在配置到资料库相关内容时会提示Berkeley DB版本不兼容,并中断配置。若是没有--enable-ldbm选项,在make test时会提示ldbm找不到。为了减小出错,仍是加上为好。
#make depens
#make
#make test
在make test阶段要花费较长时间进行测试,好像有16项吧。你能够放松一下,这个时间应该是最紧张的了。
#make install
经过配置命令能够看出,咱们把openldap安装到/usr/local/openldap目录下。建议以源码安装的软件都放到独立的目录下,不要放到软件默认的目录。好处是方便管理和控制,全部文件在统一的目录下,卸载软件只要删除整个目录就能够了。在此过程当中须要注意以下几个地方:
◆在执行configure以前要肯定安装了Berkeley DB,虽然OpenLDAP可使用不少数据库作back-end,但BerkeleyDB仍然是OpenLDAP开发团队强烈推荐的。
◆若是须要更安全的方式访问OpenLDAP,在配置执行configure以前要肯定已经安装了cyrus-sasl。
◆有些用户在安装OpenLDAP的时候忽略了最后的make test。经验告诉咱们,不少的错误都会在执行make test的过程当中暴露出来,OpenLDAP的开发团队很注意维护软件的Test Case, 整个测试很是全面,不少在平常使用中不多用到的功能都会被测试到,很好的保证了软件在投入使用之后的稳定性。
默认状况下,OpenLDAP的配置文件保存在/usdlocal/etc/openIdap下的sIapd.conf中,配置文件中记录着OpenLDAP的管理员密码。默认状况下密码是用明文表示,能够用slappasswd命令产生密文替换配置文件中的明文。以图3为例,配置文件的相关项应作以下更改:
Suffix “dc=ldap_abc,dc=org”
Rootdn “cn=manager,dc=ldap abc,dc=org"
directory /usr/Iocal/var/openldap-data
其中directory参数为数据文件在服务器上的位置,出于稳定性和性能方面的考虑,数据文件最好放在独立的分区或磁盘阵列上。配置文件的ACL部分也十分重要,不少读取或修改操做不能正常完成都是因为ACL的写法错误形成的。下面是默认状况下ACL部分的配置:
Access to attrs=userPassword
By self write
By * auth
Access to *
By * read
轻松搞定LDAP帐号管理
在这里笔记告诉你们使用PHP语言开发基于Web的LDAP管理器,并着重分析该管理器中类属性与对象类的继承关系、修改过程的递归关系时所用到的相关技术及相关算法,使得咱们在使用和管理LDAP帐号等方面变得更为简便。
LDAP Account Manager(LAM)采用PHP 4/5编写,是基于Web的LDAP用户、用户组、主机和LDAP目录的管理系统,管理员能够经过SSUTLS加密方式进行操做,加强了安全性。LAM支持管理的帐号类型有Samba 2/三、Unix、Kolab 二、地址簿接口和计算机管理须要的信息,包括NIS映射、Email假名、MAC地址等。
1)LDAP Account Manager的强大功能
◆使用LAM,能够经过Web接口较为直观的、简便的管理存储在LDAP 目录里的用户、用户组和计算机系统帐户。
◆能够管理Unix的用户、用户组、主机、域名。
◆具有强大的过滤和排序功能。
◆具备帐号属性管理。
◆多构造属性。
◆直观的树状察看模式。
◆计划查看模式。
◆开放式的编辑器。
◆经过文件上传建立帐户。
◆全部帐号可导出为PDF文件格式。
◆能够管理用户、用户组、配额和自动建立,删除用户的Home 目录。
◆支持LDAP+SSL加密模式。
◆多国语言支持,如Catalan、Chinese(Traditional)、Dutch、English、French、German、Hungarian、Italian、Japanese和Spanish等。
2)安装需求
◆PHP4/5语言环境和Perl语言环境
◆Openldap2.0或更高版本
◆支持CSS的网页浏览器
◆Apache webserver,建议安装SSL、PHP-Module(PHP-Module with ldap,gettext,XML,mcrypt+mhash)等模块。
3)安装和使用
首先从http://lam.sourceforge.net/下载LAM压缩包,解压缩并修改PHP的配置文件php.ini的以下内容:
* memory_limit=64M
接下来复制文件到Web服务器的html-file目录中,如apache/htdocs,并给下面的文件设置合适的读写权限:
◆-lam/sess:设置给apache用户写权限;
◆-lam/tmp:设置给apache用户写权限;
◆-lam/config:(包括子目录)设置给Apache用户写权限;
◆-lam/lib lamdaemon.pl:必须设置为可执行权限。
而后配置conflg.cfg文件,建立一个配置属性,设置密码,并复制config.cfg_到配置目录。最后,在浏览器中打开index.html,在Configuration Login处可使用默认密码“lan”登陆进行相关操做,如图4所示。
图4
4)配置管理LAM
成功登陆进入LAM 系统后,经过网页的形式对咱们的LDAP进行管理就变得十分的直观和简单了,经过鼠标点击就能够轻松查看和管理咱们的LDAP,还能够在线编辑和数据导出。在LAM 系统中,咱们主要能够进行以下的操做:
◆LAM系统配置LAM的具体配置,如图5所示。
图5
◆LAM模块选择和管理:让LAM 列出用户信息。
◆修改用户信息,在LAM 中查看和修改用户属性,如图6所示。
图6
不只如此,LAM的管理功能十分全面, 还能够对用户进行不少操做,如列出用户组信息、列出所管理的服务器主机信息、经过文件上传方式建立用户、树状查看方式、SAMBASAM信息查看修改、开放式在线编辑模式和LDAP信息PDF文件格式输出等,对于系统管理员来讲实在是太方便了。
配置Apache支持LDAP
虽然各类软件支持LDAP的方法有两种,但本质上是同样的,只是一些软件但愿自主开发LDAP的支持,另外一些软件使用PAM已经开发好的LDAP支持。任何一个软件要经过LDAP作用户认证,至少要在软件的配置文件中提供两个认证所须要的信息,一个是LDAP服务器的IP地址,另外一个是须要认证的用户在LDAP数据库中的位置。前面提到过,LDAP数据库是和DNS相似的树状结构,每一个用户做为叶子节点被放置在这棵树上,而这些用户的父节点就是认证所要提供的用户在LDAP数据库中的位置。如图3所示,若是要给亚洲地区市场部的全部员工提供FTP登陆帐号,须要提供的用户在LDAP数据库中的位置就是“ou=Sales,I=Asia,o=ldap_ abc.org”。下面以Apache为例介绍一下软件的配置。
Apache和LDAP整合能够用来限制用户以HTTP方式访问文件的权限,Apache使用LDAP作用户认证有不少现实意义,首先能够限制用户对公司内部HTTP敏感内容的访问。此外,不少版本管理软件(如Subversion)都提供了LDAP支持,这样在用户须要经过Web方式访问文件的时候,能够经过Apache的设置来限制用户对文件的访问权限。Apache是从2.0.41之后才开始支持 LDAP的,若是但愿使用LDAP作身份认证就要安装Apache 2.0.41以上的版本,企业版本的Red Hat AS 3/4/5默认安装的Apache2.0就已经把L DAP相关的模块进行了编译,用户只需正确修改Apache的配置文件就能够支持L DAP认证。
下面代码是对保护目录/var/www/htm/internal设置了必定权限。
<Directory /var/www/html/internal>
AuthName “WeIcome to Linux"
AuthLDAPEnabled on
AuthLDAPURL ldap://192.168.1.2/ou=Sales,I=Asia,o=ldap_abc.org?uid
Require valid-user
</Directory>
◆AuthName是可选项,用户在访问受保护目录的时候,浏览器会弹出—个提示窗口,要求输入用户名和密码,AuthName设置的内容会出如今弹出窗口的标题栏(此项内容支持中文)。
◆AuthLDAPEnabled是可选项,默认值为on。当已经把目录/var/www/htm/intemal设置为须要认证,但又须要将var/www/htm/internal/pub目录设置为公开时,就能够将此项设置成off。
◆AuthLDAPURL为必填项,192.168.1.2即为LDAP服务器的IP地址,ou=SaIes,I=Asia,o=ldap abc.org为用户在LDAP数据库中的位置,uid表示使用每一个用户uid属性的值做为认证过程当中使用的用户名。
◆require valid-user表示只有认证成功的用户才能访问指定的资源。LDAP树结构的设计下面用一个实际的案例简单介绍一下树结构的设计。某上百人的IT企业,总公司设在北京,且在上海、广州设有分部,公司的市场部、开发部、管理部及人力资源部在三个城市都有分部,公司要求全部员工天天更新本身在这一天内的工做成果,并为每一个员工设有企业内部的FTP共享空间,程序开发人员使用CVS提交代码,公司内部有多台Linux服务器,只容许有权限的帐号登陆。
员工使用到上述服务的时候须要进行身份认证。在这样的状况下,既能够选择购买几台昂贵的数据库服务器,装上大型的商业数据库来解决这个问题;也能够选择更廉价且高效 的办法,使用开源软件的解决方案。首先要考虑的是数据的拓扑,根据企业的须要作数据库设计是关键。公司在北京、上海和广州设有分公司,若是数据库服务器只存放在一个城市,在网络流量高峰期会影响认证速度,下降员工的工做效率,所以数据库设计能够有如下两种方案:一种是把主LDAP服务器放在北京,同时在上海和广州同时放有LDAP服务器,相似于DNS的区域受权,总公司把上海和广州员工的管理下放,各地的员工经过本地的LDAP服务器进行认证,既提升了效率,又保证了服务器出现问题都不会影响到其余两个城市的认证服务。这种数据库设计并非把公司的全部员工割裂成了没有联系的三个部分。
如图7所示,三台服务器上的LDAP分支是在同一棵树上经过相似于“引用”的特殊属性链接在一块儿的,三个城市都有本身的管理员来维护各自的分支。三台服务器链接在一块儿有不少好处,在须要搜索或查询公司全部员工信息的时候就会十分方便。若是某个城市的员工较多或负载太重还能够在这个城市增长LDAP服务器,增长的服务器就如同本地服务器的镜像,能够起到负载均衡的做用。须要注意的是,在这个设计方案里每一个LDAP服务器都是能够读写的。
图7 树结构的设计
另外一种方案是在北京存放一台主LDAP服务器,同时在北京、广州和上海三个城市分别放置一台辅LDAP服务器。主LDAP服务器只负责写入数据,辅LDAP服务器只读,任何数据库的修改都要先写入主LDAP服务器以后再同步到三个辅LDAP 服务器,这样的拓扑结构也比较适合认证服务器的须要,由于写操做相对于读操做更少,这种设计的优点在于能根据员工的多少或各分公司的负载状况灵活增长或减小服务器,任何一台辅LDAP服务器的瘫痪都不会影响到整个认证系统。在国外的一些案例中,辅LDAP服务器会多达几十甚至上百台。但这种设计也有缺陷, 若是主LDAP出现问题,那么全部的写操做就会受到影响, 目前OpenLDAP还不支持多个主LDAP 服务器的状况,由于设置多个主LDAP服务器有可能会形成整个数据的不一致, 只有少数商用的LDAP 支持多主LDAP的功能。
统一身份认证的将来
在国外,LDAP应用于身份认证已经十分红熟,最近几年国内才开始逐渐流行起来。前面提到的认证方式还存在一些不足,例如用户在使用FTP服务后,若是再使用Samba服务就须要再次输入用户名和密码,目前微软的Active Directory经过管理域用户已经完美的实现了单点登陆,Linux能够经过OpenLDAP和Samba实现大部分Active Directory可以实现的功能。相信在不久的未来,用LDAP作身份认证的技术还会渗透到更多领域,包括网络计算机、门禁系统,甚至智能IC卡的应用。
原文地址:http://www.cangfengzhe.com/wangluoanquan/3.html