Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117307
  • 博文数量: 31
  • 博客积分: 781
  • 博客等级: 军士长
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 16:52
文章分类

全部博文(31)

文章存档

2014年(1)

2012年(9)

2011年(21)

分类: LINUX

2011-05-19 12:37:40

LDAP目录服务
目录服务,是有效管理各种信息资源并利于检索查询的服务技术,目录服务(Directory Services)可以有效地解决众多网络服务的用户账号问题,基于客户/服务器模型的信息查询服务,是一个特定的数据库,规定了统一的身份信息数据库、身份认证机制和接口,比关系型数据库更擅长查询。适用于基于目录和层次结构的信息管理,写入效率低,使用于用户信息的数据不需要经常改动的系统(电子邮件系统)。
目录服务是以树状的层次结构来描述数据信息,适应行业应用的业务组织结构,目前有X.500和LDAP两个国家标准协议。

X.500简介
X.500 协议簇包括了X.500-525的目录服务,由于目录访问协议DAP严格遵照复杂得ISO七层协议模型制定的,对相关层协议环境要求过多,主要运行在UNIX机器上,在许多小系统上无法使用,也不适应TCP/IP协议体系。
1、初始LDAP
LDAP(Lightweight Directory Access Protocol)轻量级目录访问协议,基于TCP/IP协议,是Internet上目录服务的通用访问协议是Internet上目录服务的通用访问协议。LDAP的出现简化了X.500目录的复杂度,是X.500标准中的目录访问协议DAP的一个子集,同时也作为IETF(Internet Engeering Task Force)的一个正式标准。
1993产生LDAP V1版本,1997年发布了LDAP V3版本,这些协议定义了信息模型、命名空间、功能模型、安全框架、分布式操作模型和LDAP扩展框架
信息模型:确定LDAP目录中信息的格式和字符集,如何表示目录信息(定义对象类、属性、匹配规则和语法等模式)
命名空间:信息组织方式-目录信息树DIT,以DN和RDN为基础的命名方式,以及LDAP信息的Internet表示方式
功能模型:执行操作的通信协议以及在客户端进行这些操作的API接口
安全框架:保证目录中信息的安全,多种认证方式,以及与TLS结合的通信保护框架
LDAP扩展框架:基于控制和扩展操纵的LDAP扩展框架
2、LDAP的存储方式
LDAP以树型结构存储,具体信息存储在条目的数据结构中。一个目录信息树由若干条目组成,一个条目一个对象,每个条目具有唯一的标识名DN,并由多个属性组成,每个属性对应一个或多个值。
LDAP目录服务器是通过目录数据库来存储网络信息以提供目录服务的,目录信息树及其相关概念构成了LDAP协议的信息模型。
注:dc(domain component)表示域名的部分,其格式是将完整的域名分为几部分;uid表示用户ID;ou(organization unit)表示组织单位;cn(common name)表示公共名称;关键字sn(surname)表示姓;dn(distinguished name)表示唯一辨别名,
rdn(relative dn)表示相对辨别名;关键字c(country)表示国家;关键字o(organization)表示组织名。
3、流行的目录服务产品
(1)NDS(Novell Directory Services)
NDS是Netware4目录服务中的对象,随Netware4一起发布的较早的面向企业网络的目录服务产品。随着发展,NDS从系统软件中分离出来,用以支持不同的系统平台,便出现了产品Novell eDirectory
Novell eDirectory是一种支持LDAP,基于目录的身份管理系统,对用户身份、访问特权和其他网络资源实行集中管理,是根据X.500的目录服务标准设计的。
(2)OpenLDAP
OpenLDAP是出色的开放源码的LDAP服务器软件,该软件是在Internet环境下进行集体开放的项目产品,在UNIX和Linux平台上得到了很好的支持,同时,也逐步在向其他系统平台移植。
(3)Microsoft Active Directory (活动目录)
活动目录是Windows平台的核心组件,其为用户管理网络环境各个组成要素的标识和关系提供了一种有效的方法。其使用了一种结构化地数据存储方式,存储有关网络对象的信息,可以让管理员和用户轻松地查找和使用这些信息。

深入认识LDAP
1、LDAP的几种基本模型
LDAP的体系结构由信息模型、命名模型、功能模型以及安全模型4种基本模型组成。其中,信息模型描述LDAP的信息表示方式;命名模型描述LDAP的数据如何组织;功能模型描述LDAP的数据操作访问方式;安全模型描述LDAP的安全机制。
(1)信息模型
LDAP信息模型定义了能够在目录中存储的数据类型和基本的信息单位。LDAP中的信息是以树状结构组织,在树状信息中的基本数据单位是条目(即关于对象的信息集合),而每个条目由属性构成,属性中存储属性值,每个属性类型又有对应的语法和匹配规则。通常,条目中的信息说明真实世界的对象。
(2)命名模型
在LDAP中每个条目均有自己的DN和RDN(Relative Distinguished Name,相对标识名),其中DN是该条目在整个树中的唯一名称标识,而RDN是条目在父节点下的唯一名称标识。
(3)功能模型
说明了能够使用LDAP协议对目录执行的操作,共4类10中操作。
更新类操作:添加条目、删除条目、修改条目、修改条目名
查询类操作:搜索、比较
认证类操作:绑定、解绑定
其他操作:放弃和扩展操作
注:除扩展操作,其余9种是LDAP的标准操作,扩展操作是LDAP中为了增加新的功能所提供的一种标准的扩展框架。
(4)安全模型
LDAP的安全模型主要通过身份认证、安全通道和访问控制来实现。
身份认证:
    匿名认证:适用于没有数据安全问题且不涉及访问权限的完全公开方式
    基本认证:通过用分辨名(DN)和密码进行身份识别,密码识别有分为简单密码和摘要密码认证
    SASL(Simple Authentication and Secure Layer)认证:在SSL和TLS安全通道基础上进行的身份认证,包括数字证书的认证
通信安全在LDAP中提供了基于SSL/TLS的通信安全保障。SSL/TLS是基于PKI信息安全技术的,是目前Internet上广泛采用的安全服务。TLS服务可以被LDAP通过StartTLS方式启动,该服务既可以提供通信中的数据保密性、完整性保护,也可以实现客户端身份和服务器端身份的双向验证。
访问控制的标准:目前并无访问控制的标准,但LDAP的访问控制非常灵活和丰富。在LDAP中访问控制是通过访问控制策略语句来实现的,而RDBS和应用系统是通过访问控制列表来实现的。
2、LDAP的应用领域
LDAP被广泛用于基础性、关键性信息的管理。
信息安全类:数字证书管理、授权管理、单点登录
网络资源管理类:MAIL系统、DNS系统、网络用户管理、电话号码簿。
科学计算类:DCE(Distributed Computing Environment,分布式计算环境),UDDI(Universal Description,Discovery and Integration,统一描述,发现和集成协议)
电子政务资源管理:内网组织信息服务,电子政务目录体系,人口基础库,法人基础库
LDAP之所以能广泛用于管理用户信息、网络资源信息等,是由于LDAP具有高效率的查询,树状的信息管理模式,分布式的部署框架以及细致灵活的访问控制的特点。

安装LDAP
1、安装Berkeley DB
搭建LDAP环境的首要任务是安装OpenLDAP所支持的后台数据库Berkeley DB。BDB是OpenLDAP后台数据库的默认配置。
(1)BDB简介
BDB是由美国Sleepcat Software公司开发的一套开放源代码的嵌入式数据库系统,其为数据的存取和管理提供了一组简介的函数调用API接口。
(2)安装前的准备
下载源码包,
(3)安装BDB
#tar zxvf db-4.6.21.tar.gz
#cd db-4.6.21/build_unix
#../dist/configure    ;配置测试
#make
#make install
配置系统动态链接库的路径
默认情况下BDB被安装在/usr/local/BerkerleyDB.4.6/目录下,为了能让OpenLDAP使用BDB的库文件,还需将BDB库文件添加到系统动态链接库的路径中,编辑/etc/ld.so.conf,在文件的末尾添加语句/usr/local/BerkeleyDB.4.6/lib。
#sbin/ldconfig   ;刷新系统动态链接库缓存
2、安装OpenLDAP
(1)安装前的准备
下载OpenLDAP的源代码,
(2)安装OpenLDAP
#tar zxvf openldap-2.4.12.tgz
#cd openldap-2.4.12
#env CPPFLAGS="-I /usr/local/BerkeleyDB.4.6/include" LDFLAGS="-L /usr/local/BerkeleyDB.4.6/lib" ./configure --prefix=/usr/local/ zopenldap --enable-ldbm     ;配置环境
#make depend
#make
#make test
#make install
3、配置OpenLDAP
通过OpenLDAP的主配置文件/usr/local/openldap/etc/openldap/sladp,可以配置一下选项。
(1)设置LDAP使用的Schema(模式)
Schema(模式)定义了LDAP中的对象类型、属性、语法和匹配规则等,类似与关系数据库中的表结构,OpenLDAP安装目录的etc/openldap/schema/子目录包含了许多常用的Schema定义文件,使用这些文件已经可以满足日常应用了。
编辑slapd.conf文件,添加如下语句
include /usr/local/openldap/etc/openldap/schema/corba.schema
(2)为目录树设置后缀
将suffix "dc=my-domain,dc=com"改为 suffix "dc=tree,dc=com"
(3)为LDAP管理员设置DN
将rootdn "cn=Manager,dc=my-domain,dc=com" 改为 rootdn "cn=Manager,dc=Tree,dc=com"
(4)为LDAP管理员设置口令
将rootpw sercet改为rootpw {SSHA}NX....
注:rootpw后的大括号中描述的内容是密码的加密方式,有MD5、SSHA和CRYPT,后面是密文
执行命令"/usr/local/openldap/sbin/slappasswd"生成加密后的密文,复制到配置文件中
4、启动OpenLDAP服务器
#/usr/local/openldap/libexex/slapd
需要关闭防火墙功能或设置允许TCP协议的389端口通过,使用以下命令就可以用命令方式开发TCP协议的389端口
#iptables -I INPUT -p tcp --dport 389 -j ACCEPT
5、为OpenLDAP建立初始化数据
建立初始化数据时为了以后通过LDAP客户端软件来管理目录树,只需将初始化数据保存在文件中,然后使用ldapadd命令导入数据库中即可。
通过LDIF(LDAP Data Interchange Format,LDAP数据交换格式)可以将LDAP条目保存为一种简单的文件格式,实现不同厂家的

LDAP服务器间数据交换。
(1)建立LDIF文件
dn:dc=Tree,dc=com
objectClass:dcObject
objectClass:organization
dc:Tree
o:Tree,Inc.
dn:cn=Manager,dc=Tree,dc=com
objectClass:organizationalRole
cn:manager
(2)数据导入
#/usr/local/openldap/bin/ldapadd -x -W -D "cd=Manager,dc=Tree,dc=com" -f hope.ldif

图形界面管理
1、图形界面管理工具简介
(1)phpLDAPadmin
使用PHP编写的开发源代码,基于Web用于管理LDAP服务器的LDAP管理工具,
(2)基于KDE环境的GQ LDAP client
GQ LDAP client是基于KDE环境的LDAP图形界面管理工具
(3)LDAP Browser/Editor
LDAP Browser/Editor是用Java编写的LDAP图形界面管理工具,~gowor/ldap
2、安装phpLDAPadmin
使用LDAP客户端软件前需要确保安装了Apache Web服务器并建立好了PHP的运行环境,这是因为phpLDAPadmin是基于Web界面的使用PHP编写成的。另外需要将Apache Web服务器的默认字符集设置为中文。
(1)安装phpLDAPadmin
下载源码包:download.php页面
#tar zxvf phpldapadmin-1.1.0.5.tar.gz
#cp -a phpldapadmin-1.1.0.5 /usr/local/phpldapadmin    ;部署到"/usr/local/phpldapadmin"位置
(2)安装并配置Apache服务
确认Apache服务已成功安装并能启动后,还需要对其进行以下配置
加入用户认证功能
#htpasswd -c /etc/httpd/php_ldap_admin_pwd admin
另外,必须创建虚拟目录才可以在主目录以外的目录中进行发布。在Web浏览器中可以使用虚拟目录的别名来访问虚拟目录。
在Apache的主配置文件httpd.conf中加入以下语句建立虚拟目录
Alias /phpldapadmin/ "/usr/local/phpldapadmin"

Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Please Login to phpldapadmin"
AuthUserFile /etc/httpd/php_ldap_admin_pwd
Require user admin

如何访问虚拟目录
方法1  关闭SELinux对httpd的访问
方法2  修改站点所有目录或文件的策略类型
删除之前/usr/local/下的phpldapadmin目录,新建目录phpldapadmin,然后通过chcon指令设置该目录的策略类型,最后将解压好的phpldapadmin应用复制到当前的目录下。
#chcon -t http_sys_content_t /usr/local/phpldapadmin
此时/usr/local/phpldapadmin目录下的所有子目录都将继承它的策略类型。
3、配置phpLDAPadmin
(1)生成phpLDAPadmin配置文件
#cp /usr/local/phpldapadmin/config/config.php.example /usr/local/phpldapadmin/config/config.php
(2)对phpLDAPadmin进行支持中文的配置
编辑/usr/local/phpldapadin/config/config.php
$config->custom->appearance['language']='zh_CN';
转换phpLDAPadmin语言文件的编码
#iconv -f gbk -t utf8
#msgfmt -o
编辑/usr/local/phpldapadmin/htdocs/header.php文件
$language=isset($config)?$language=$config->GetValue('appearance','language'):'zh_CN';
(3)设置口令加密信息,在配置文件中修改查询语句
$config->custom->session['blowfish']='hildap';
(4)为LDAP服务器设置名称、地址和端口等信息
$ldapservers->SetValue($i,'server','name','My LDAP Server');
$ldapservers->SetValue($i,'server','host','192.168.5.10');
$ldapservers->SetValue($i,'server','port','389');
(5)为LDAP服务器设置管理员的DN
$ldapservers->SetValue($i,'login','dn','cn=Manager,dc=tree,dc=com');
$ldapservers->SetValue($i,'login','pass','');
注:如果用户认证方式设置的是config,则必须在此填写正确的LDAP服务器管理员的口令
(6)设置用户认证方式
$ldapservers->SetValue($i,'Server','auth_type','cookie');
phpLDAPadmin提供了cookie、session和config 3种认证方式
config是phpLDAPadmin默认的认证方式,不需要用户登录
cookie用户输入正确的LDAP管理员得DN与口令会保存在Web浏览器的cookie里面
session类似于cookie,不同之处在于DN与口令保存在服务器端。
(7)为目录树设置基准DN
$ldapservers->SetValue($i,'server','base',array('dc=tree,dc=com'));
$queries[$q]['base']='dc=tree,dc=com';

使用OpenLDAPadmin管理目录树
1、登录
使用浏览器访问服务器的IP/phpldapadmin
2、创建组织单元
LDAP的信息是以树型结构存储的,顶级为树根,在根下一般存在一个或多个组织(organization,O)或组织单元(organizational units,OU),一个组织或组织单元可能包含基本属性等信息。
3、创建用户组(略)
4、创建用户账号(略)

实现LDAP服务的身份验证
各服务软件在使用LDAP协议认证作为用户验证时可以参考相关资料,这里以Linux系统用户验证、FTP用户验证和Web用户验证这3类验证为代表,介绍如何实现LDAP协议认证作为用户验证。
1、实现Linux系统用户验证
Linux OS支持用户通过LDAP协议认证、登录OS,需要安装使Linux和LDAP服务器能进行良好通信的软件,包括nss_ldap和openldap_clients
nss_ldap 用于LDAP服务器通信,是可以查询和处理主机用户、用户组等信息的程序
openldap_clients 是OpenLDAP的客户端软件,为用户提供了一些操作OpenLDAP的使用程序。
(1)安装nss_ldap和openldap_clients
如果系统开启了SELinux功能,则需要在设置用户认证前关闭SELinux,设置并测试完后再开启SELinux,避免错误情况
关闭SELinux的方法:编辑SELinux配置文件/etc/selinux/config,找到语句“SELINUX=enforcing”改为“SELINUX=disable”,然后重启生效
(2)设置使用LDAP进行用户认证
#authconfig-tui
LDAP设置,输入LDAP服务器的地址和基点DN
2、实现Web用户验证
采用Apache作为Web服务器时,支持LDAP
(1)确保成功安装了openldap-client
(2)编辑Apache服务器的主配置文件httpd.conf(这里对protected目录进行用户的验证)
Alias /myprivate "/usr/local/protected"
Options Indexs MultiViews
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Please Loing,thanks"
AuthLDAPURL "ladp://192.168.1.106/dc=tree,dc=com"
Require valid-user

(3)在protected这个虚拟目录下建立测试页,测试页的代码如下。
<%out.println "Hello world!"%>
(4)登录该页面,如果配置的Web用户验证成功时,则显示“Hello world!”

阅读(2449) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~