轻型目录访问协议
(LDAP)介绍
研究生园地
高能物理所计算中心
石京燕
内容
目录服务概述
LDAP介绍
LDAPv3扩展
目录服务的设计
目录服务概述
目录服务是一个特殊的数据库,用来保存描述性的,基于属性的详细信息,还支持过滤功能。
目录是动态的,灵活的,易扩展的。
例子:电话簿,地址簿,用户目录
内容
目录服务概述
LDAP介绍
LDAPv3扩展
目录服务的设计
LDAP介绍
什么是LDAP?
LDAP协议
LDAP模型
LDIF
LDAP服务器软件
LDAP Command-Line Utilities
LDAP APIs
什么是LDAP
LDAP(Lightweight Directory Access Protocol)代表轻量级目录访问协议。用于访问目录服务的一个标准,可扩展的internet协议。部分基于X.500标准,但更简单,更精炼,可扩展性更好。与其他某些通信协议相比,它是轻量级的。
四个模型:信息模型、命名模型、功能模型、安全模型
信息被集中存储在服务器上的LDAP目录中。数据按层次树状结构存储;
信息模型是以条目(entry)为基础,一个条目是属性的集合,并具有全局唯一 DN(Distinguished Named),用来唯一标识。每一个条目的属性具有一个类型和一个或者多个值。
什么是LDAP(续)
LDAP Data Interchanged Format(LDIF):目录数据的基本格式
LDAP服务器:商业和开放软件
基于LDAP应用和LDAP服务器的应用程序
LDAP应用程序接口(API):用于客户端程序的开发
LDAP协议
A message-oriented protocol
典型的LDAP数据交换
LDAP模型-信息模型
条目,属性和值
– 基本信息单元是条目,它是一个对象的信息集合,每个条目有一个DN。
– 属性类型是由相关的语法和匹配规则的。
– 管理员可以设定某一属性是否有多个值。
LDAP模型-信息模型(续)
Part of a Typical Directory
LDAP模型-命名模型
如何组织及定义数据。
将条目规划为一个树状结构。
例如:按地理位置,组织部门等划分
LDAP模型-功能模型
三组操作:
– Interrogation Operations:查找和恢复数据
– Update Operations: 增加,删除,重命名等
– Authentication and control: 加密,认证等
LDIF
可以实现数据的导入、导出
可以实现数据的修改:增加,修改,重命名条目
dn: uid=shijy,ou=cc,dc=ihep,dc=ac,dc=cn
changetype: add
objectclass:top
objectclass:person
un: Shi jingyan
uid: shijy
mail: [email protected]
:
:
LDAP Server 软件
Openldap
Netscape Directory Server ns-slapd
IBM Security Server
LDAP Command-Line Utilities
功能强大的ldapsearch
查找条目
认证
查找某些属性
用ssl查找条目
其他:过滤功能
ldapsearch –h localhost –D “cn=Manager,dc=ihep,dc=ac,dc=cn” –W –b “dc=ihep,dc=ac,dc=cn”
Ldapmodify: 与ldapsearch类似
LDAP APIs
LDAP C API :
ldap_search() ldap_compare()
ldap_bind() ldap_unbind()
ldap_modify() ldap_add()
ldap_delete() ldap_rename()
ldap_result()
内容
目录服务概述
LDAP介绍
LDAPv3扩展
目录服务的设计
LDAPv3扩展的方面
三方面:
– ldap控制,
– ldap扩展操作,
– SASL认证
LDAP控制
LDAP控制
– 对ldap操作加一些额外的控制信息。
– 例如:Server- Side Sorting control
– 一个操作上可以使用多个控制
LDAP扩展操作
增加一些ldap操作,扩展操作包含一个OID用来唯一标识
– 例如:netscape定义了扩展操作,可以大批量修改数据
Sasl认证
Simple Authentication and Security Layer(SASL)是一个认证框架,支持多个认证协议,例如:Kerberos v5, DIGEST-MD5等等
内容
目录服务概述
LDAP介绍
LDAPv3扩展
目录服务的设计
目录服务的设计
目录设计概述
定义目录需求
数据设计
Schema设计
安全问题
目录设计概述
目录的生命周期:
– 设计阶段:环境,用户,数据源,应用等信息
– 开发阶段:开发应用服务,系统的可靠性,冗余性,性能测试,容错性等
– 维护阶段:数据更新,系统维护等
定义目录需求
第一步:分析环境
– 组织结构,系统,网络环境,应用软件,用户,管理员。。。
第二步:决定需求优先级
– 应用需求:保证应用可以正确高效执行
– 用户需求:考虑使用目录的所有用户需求
– 开发限制:用户习惯,资源限制(钱、时间。。)
– 其它环境限制:网络环境,硬件,软件。。。。
定义目录需求(续)
第三步:选择全局的目录开发软件
第四步:设定一些目标和里程碑
数据设计
数据设计概述
数据相关问题
建立数据策略
标识所需数据元素
数据源
数据设计概述
数据如何存储在LDAP目录中及数据间的相互关系
一个例子:
数据相关问题
太多信息
太少信息
不正确的格式
过期的信息
冗余的数据
要求设计者仔细考虑及与数据所有者及时沟通
建立数据策略
存储哪些数据的方针
访问目录数据的方针
修改目录数据的方针
法律的考虑
在多处存储数据的方针
出现运行错误后的处理方针
数据元素的特征
数据元素的一般特征:
– 格式
– 数据值的尺寸
– 一个元素拥多个有数据值的数目
– 数据所有权和限制
– 数据值改变的频率
– 与其他数据的关系
数据源
其它目录服务
网络操作系统
数据库
电子格式的文本文件
应用
软件
最终用户
数据源关系的维护
复制:LDAP Duplication / Replication / Update Protocol group Internet Engineering Task Force (LDAP IETF)标准提供LDAP-LDAP的复制
同步化:集成于目录软件或是单独工具
批处理:
Schema 设计
Schema的目的
Schema的元素
目录Schema格式
已有的schema
Schema的目的
Schema是目录中存储数据的规则集合
决定目录存放什麽,及server和client如何操作
设置数据的尺寸、取值范围、数据值的格式
防止数据混乱
Schema的元素
属性类型,语法,匹配规则,对象类
属性的OID来自X.500协议组。
– 例:postalAddress的属性为2.5.4.16
Schema 的一个例子:
(2.5.4.13 NAME 'description' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
属性名为description是字符串,长度为1024,caseIgnoreMatch指其值可忽略大小写,OID为2.5.4.13,语法规则为1.3.6.1.4.1.1466.115.121.1.15
Schema元素(续)
Schema支持subtype
Subtype继承supertype的特性
Schema元素(续)
属性的语法
. Standard Syntaxes
Schema元素(续)
匹配规则
Schema元素(续)
Object class
– 每个目录条目属于一个或多个对象类
决定条目中必须有的属性
决定条目中可能有的属性
提供搜索功能的过滤
Schema元素(续)
Schema总结
已有的schema
标准的schema
– LDAP standards documents
– X.500 standards documents
– Industry consortium standards
安全问题
支持匿名:可以通过设置访问控制允许匿名用户只读
支持简单口令:通过网络发送简单口令
支持SSL/TLS
支持口令加密:KERBEROS_v4,RSA…
支持证书认证
访问控制(access control)
可以将访问控制设置到属性级
可以将访问控制设置到某一个子树
可以将访问控制设置到某一个组
每个访问控制定义三个事情:
– 目录中的一个或多个对象
– 一个或多个客户机访问对对象
– 一个或多个访问权限
访问控制的例子
例:
Aci:(target =“ldap:///dc=example,dc=com”)
(targetattr=“cn||sn||givenName||middleinitial||name”)
(version 3.0; acl “Anonymous read-search access”;allow (read, search,compare) userdn=“ldap:///anyone”;)
例:
Aci:target=“ldap:///dc=example,dc=com”)
(targetattr=“salary”)
(version 3.0; acl “allow manager access to salary”; allow (read, write) userdnattr=“manager”;)
谢谢!