返回介绍

3.2.3 LDAP

发布于 2024-10-03 16:34:02 字数 6558 浏览 0 评论 0 收藏 0

3.2.3.1 目录服务

目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象 Linux/Unix 系统中的文件目录一样。目录数据库和关 系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字 一样。

目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中:

  • 企业员工信息,如姓名、电话、邮箱等;
  • 公用证书和安全密钥;
  • 公司的物理设备信息,如服务器,它的 IP 地址、存放位置、厂商、购买时间等;

表格 2 目录服务软件比较

 简介特性
LDAP轻量目录访问协议(Lightweight Directory Access Protocol) 的缩写。基于 X.500 标准,最新版本 3.0支持 TCP/IP。 查询快但写慢。 C/S 模型,Server 用于存储数据,Client 提供操作目录信息树的工具。
X.500构成全球分布式的目录服务系统的协议严格按照 ISO 七层协议,较复杂。 主要运行在 UNIX 系统。
Active Directory  
ApacheDS  

3.2.3.2 LDAP 简介

Ldap (Lightweight Directory Access Protocol),轻量目录访问协议,提供被称为目录服务的信息服务,特别是基于 x.500(构成全球分布式的目录服务系统的协议)的目录服务。

  • Ldap 运行在 TCP/IP 或其他面向连接的传输服务之上。
  • Ldap 同时是一个 IETF 标准跟踪协议,在 轻量级目录访问协议(Ldap ) 技术规范路线图 RFC4510 中被指定。
  • Ldap 软件来源于 OpenLDAP 项目,该项目是一个由志愿者组成的团队。

表格 3 LDAP 协议的版本

 发布时间特性
1.01993共有四类 10 种操作:查询类操作,如搜索、比较;更新类操作,如添加条目、删除条目、修改条目、修改条目名;认证类操作,如绑定、解绑定;其它操作,如放弃和扩展操作。
2.0  
3.01997不是一个单一的协议,而是一个协议群组。

说明:

  1. LDAP 中的安全模型:主要通过身份认证、安全通道和访问控制来实现。
  • 身份认证在 LDAP 中提供三种认证机制,即匿名、基本认证和 SASL(Simple Authentication and Secure Layer)认证。
  • 通讯安全:LDAP 中提供了基于 SSL/TLS 的通讯安全保障。SSL/TLS 是基于 PKI 信息安全技术,是目前 Internet 上广泛采用的安全服务。
  • 访问控制:LDAP,用户数据管理和访问标识是一体的。基于策略语句来实现的,无论是访问控制的数据对象,还是访问控制的主体对象,均是与这些对象在树中的位置和对象本身的数据特征相关。

2. LDAP 的衍生版本 ,有以下三种,皆使用 LDAP 协议,但后两种使用额外专有信息指定其使用方式。

  • ldap:// : 一项基本 LDAP 协议,允许对目录服务进行结构化访问。
  • ldaps:// : 此衍生版本用于通过 SSL/TLS 实现 LDAP 表达。普通 LDAP 流量未经加密,不过大多数 LDAP 实现方案支持此功能。这种 LDAP 连接加密方法实际已经被弃用,建议大家使用 STARTTLS 作为替代。如果大家在非安全网络上使用 LDAP,则强烈建议使用加密机制。
  • ldapi:// : 用于通过 IPC 表达 LDAP。其通常用于安全接入本地 LDAP 系统以实现管理用途。其能够内部嵌套而非公开网络端口实现通信。

image-20200108002846475

图 2 LDAP 组织数据的方式(DIT~Data Information Tree 数据信息树)

说明:树型目录。

  1. 条目 Entry:也叫记录项,是 LDAP 中最基本的颗粒,就像字典中的词条,或者是数据库中的记录。通常对 LDAP 的添加、删除、更改、检索都是以条目为基本对象的。

     

    • DN:Distinguished Name,每一个条目都有一个唯一的标识名。
    • Base DN: LDAP 目录树的最顶部即根结点,如上图的 Base DN="dc=mydomain,dc=org"
    • RDN:一般指 DN 逗号最左边的部分,特指管理 LDAP 中信息的最高权限用户。
      通过 DN 的层次型语法结构,可以方便地表示出条目在 LDAP 树中的位置,通常用于检索。
  2. Attribute: 属性,每个条目都可以有很多属性(Attribute),比如常见的人都有姓名、地址、电话等属性。每个属性都有名称及对应的值,属性值可以有单个、多个,比如你有多个邮箱。
  3. ObjectClass: 对象类,对象类是属性的集合,通过对象类可以方便的定义条目类型。每个条目可以直接继承多个对象类,这样就继承了各种属性。对象类有三种类型:结构类型(Structural)、抽象类型(Abstract) 和辅助类型(Auxiliary)。

     

    • 结构类型是最基本的类型,它规定了对象实体的基本属性,每个条目属于且仅属于一个结构型对象类。
    • 抽象类型可以是结构类型或其他抽象类型父类,它将对象属性中共性的部分组织在一起,称为其他类的模板,条目不能直接集成抽象型对象类。
    • 辅助类型规定了对象实体的扩展属性。每个条目至少有一个结构性对象类。

表格 4 LDAP 基本术语

概述别名语法描述值(举例)
commonNamecn/uidDirectory String姓名sean
surnamesnDirectory StringChow
organizationalUnitNameouDirectory String单位(部门)名称IT_SECTION
organizationoDirectory String组织(公司)名称example
telephoneNumber Telephone Number电话号码110
owner DN该条目拥有者cn=doubao,ou=ops,dc=shuyun
jpegPhoto BinaryJPEG 照片 
objectClass  对象类organizationalPerson
     
Entry条目   
Distinguished NameDN 每一个条目都有一个唯一的标识名。 
 DC 一条记录所属区域 

3.2.3.3 LDAP 使用

LDIF

LDIF(LDAP Data Interchange Format,数据交换格式)是 LDAP 数据库信息的一种文本格式,用于数据的导入导出,每行都是 属性: 值 对,见 openldap ldif 格式示例

LDAP 服务端配置

OpenLDAP(2.4.3x) 服务器安装配置方法见 这里

LDAP 客户端模块支持

PHP 默认并不启用 LDAP 支持, php 的 LDAP 模块依赖于 OpenLDAPbind9.net 提供的客户端 LDAP 库,你必须在编译的时候使用 --with-ldap[=DIR] 才行,如果你想要 SASL 支持,那还必须使用 --with-ldap-sasl[=DIR] 选项,而且你的系统中必须有 sasl.h 头文件才行。

LDAP 客户端访问

LDAP 中也是利用登陆名和密码进行验证,LDAP 中会定义一个属性 password,用来存放用户密码,而登陆名使用较多的都是 mail 地址。那怎么样才能正确的用 LDAP 进行身份验证呢,下面是一个正确而又通用的 步骤 (五大步基于 LDAP 的一个 两次绑定 验证方法):

说明:绑定有两种,即 WEB 服务器的用户绑定和请求用户的绑定。实际使用中可只需一次绑定即用户的绑定(如支持匿名绑定搜索)。

  1. 从客户端得到登陆名和密码。注意这里的登陆名和密码一开始并没有被用到。
  2. bind:先匿名绑定 bind 到 LDAP 服务器,如果 LDAP 服务器没有启用匿名绑定,一般会提供一个默认的用户,用这个进行绑定即可。(若绑定失败,即可认定 LDAP 验证失败)
  3. search 搜索:,当上一步绑定成功以后,需要执行一个搜索,而 filter 就是用登陆名来构造,形如: (|(uid=$login)(mail=$login)) ,这里的 login 就是登陆名。搜索执行完毕后,需要对结果进行判断,如果只返回一个 entry,这个就是包含了该用户信息的 entry,可以得到该 entry 的 DN,后面使用。如果返回不止一个或者没有返回,说明用户名输入有误,应该退出验证并返回错误信息。(可将搜索返回的信息作为注册用户信息)
  4. 再次 bind 用户:上一步执行时得到了用户信息所在的 entry 的 DN,这里就需要用这个 DN 和第一步中得到的 password 重新绑定 LDAP 服务器。
  5. bind 用户结果的处理:如果能成功绑定,那么就说明验证成功,如果不行,则应该返回密码错误的信息。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文