LDAP轻型目录访问协议介绍及应用

简介: 本文对LDAP相关概念进行说明,介绍适用场景和使用方法。

LDAP不难,难的是资料太少,尤其是原理和应用方面的,以安装介绍居多。这也是我写这篇博客的原因。

LDAP(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)即轻型目录访问协议。LDAP由互联网工程任务组(IETF)的文档RFC定义,使用了描述语言ASN.1定义,前生是DAP,但是DAP过于复杂。据说LDAP的出现是源于互联网庞大的邮箱地址目录。

LDAP最大的好处就是他是一个协议,一个为多数软件用来作为登录鉴权的标准。在你为各个系统诸多用户名和密码而烦恼的时候,正是LDAP登场的时候。支持LDAP的软件都有哪些呢?
支持LDAP认证的软件产品(包括但不限于):zabbix、grafana、jenkins、nginx、apache等。

典型的系统访问如下:
ldap_stds_1

LDAP既然是协议,自然要定义一堆的概念。概括的讲LDAP 是一个条目树。条目是有一或者多个 objectClass 组成,objectClass是由一或者多个属性(Attributes)组成,属性即key-value键值对组成。形成一个树形结构。其中每个属性和objectClass名称都是唯一的。说了这么多,不如一张图来的直观。

ldap_dit

概念解释:
Schemas:一组objectClass,前人提供了很多Schemas适用于不同业务场景适用。
objectClass:属性集合。
Attributes:属性。
常见属性如下:
DN:唯一名称标识,各级DN组成当前目录的唯一ID。
CN:名称属性。
OU:组织。
LDAP中的属性都是按照描述语言ASN.1定义,以上是开放环境认可的属性(未一一列出)。引入LDAP的数据导入导出文件.ldif文件表示如下:

dn: cn=Robert Smith,ou=people,dc=example,dc=com
objectclass: inetOrgPerson
cn: Robert Smith
cn: Robert
sn: Smith
uid: rsmith
mail: robert@example.com
mail: r.smith@example.com
ou: sales

目录树如图:
dit_layout_1

以上是LDAP的概念介绍,下面讲LDAP协议的具体实现。主要有windows下的Microsoft出品Active Directory(不在介绍范围),还有一个就是linux环境下的OpenLDAP。LDAP被设计成解决读多写少的目录型数据访问权限控制,如果地址簿,组织关系等。OpenLDAP同样也提供了主从复制的高可用方案。数据也可以分布式存储在不同的LDAP节点,通过配置关联,完成跨节点的查询。
很多人喜欢拿LDAP和数据库类比,或者说LDAP是另外一种数据库。LDAP的协议规定了数据的导入导出格式即LDIF文件,但是对于数据存储却无限制。通常LDAP的数据存储会用到其他关系数据库,如OpenLDAP就可以用Berkeley DB存储数据。OpenLDAP是提供了管理目录数据的服务的软件产品,多数场景用来做统一登录认证。
OpenLDAP支持各种对目录数据访问的控制,即access规则:

access to <what> [ by <who> [<accesslevel>] [<control>] ]+

还有一种on line写法

olcAccess: to <what> [ by <who> [<accesslevel>] [<control>] ]+

olcAccess是on line configuration,能提供在线修改配置而不需要重启LDAP服务(不在本文介绍)。

示例:

access to  *
       by  self write
       by  anonymous auth
       by  * read

含义:针对整个目录树(*),目录用户本身有写的权限,匿名用户可以用来登录认证,所有人可读(如果开放匿名用户的话)。权限设置不正确会直接导致登录认证功能失败。OpenLDAP提供了非常丰富的access控制,详见:http://www.zytrax.com/books/ldap/ch6/#access

LDAP定义了几种数据的操作方法:
bind, add, modify, delete,search。一般需要先进行bind即认证操作,认证通过后进行其他如add或search操作。LDAP官网有详细的request和response定义。

LDAP有自己的查询语法定义,各种filter。

如下示例一种java语言的spring提供的LdapTemplate提供的认证方式:

ldapTemplate.authenticate(LdapQueryBuilder.query().where("cn").is(req.getUsername()), newPassword);

OpenLDAP安装参见官网:https://www.openldap.org/doc/admin24/quickstart.html

参考网站:
http://www.zytrax.com/books/ldap/
http://www.openldap.org/
https://ldap.com/

相关文章
|
安全 Linux 网络安全
组网神器WireGuard安装与配置教程(超详细)
组网神器WireGuard安装与配置教程(超详细)
68530 2
|
Linux PHP
linux centos7 安装php7.4 实测 遇到的坑
linux centos7 安装php7.4 实测 遇到的坑
1189 0
|
JSON 小程序 Java
微信公众平台测试号——模板消息发送Demo
微信公众平台测试号——模板消息发送Demo
2388 0
|
7月前
|
人工智能 小程序 安全
【节省百万研发】开箱即用的智慧校园平台源码:含 SaaS 后台、小程序、Android 班牌全套
智慧校园电子班牌系统是一套面向中小学的SaaS云平台解决方案,含Web管理端(Vue2+Element)、微信小程序(教师/家长端)及Android班牌终端,支持考勤、课表、通知、考试管理等全场景应用,采用Spring Boot+MySQL+Redis架构,保障安全高效。
546 0
|
3月前
|
缓存 NoSQL Java
[006][缓存模块] 两级缓存实战:基于 Caffeine + Redis 的多级缓存设计与实现
本文介绍基于Caffeine(本地)+ Redis(分布式)的两级缓存实战方案,通过自定义`MultiLevelCache`与`MultiLevelCacheManager`,实现Spring Cache标准接口下的透明多级缓存:读优先本地(纳秒级)、未命中查Redis并回填;写同步更新两级,兼顾高性能与数据共享。代码开源可直接集成。
340 0
|
10月前
|
缓存
基于Squid代理实现SSRF攻击物理防御
本文介绍一种通过Squid代理集群实现物理隔绝的SSRF防御方案。利用Private Link与NLB构建隔离网络,将用户URL请求转发至独立Squid集群处理,有效阻断内网探测与攻击,提升系统安全性。
370 4
|
缓存 Linux
解决CentOS 7停止更新后yum源失效问题【图文教程】
以上步骤完成后,你的 CentOS 7 系统就会使用阿里云的 yum 源,更换yum以后就可以正常使用啦。
15906 2
|
存储 监控 中间件
Linux双机热备解决方案之Heartbeat
Linux双机热备解决方案之Heartbeat
|
编解码 定位技术 Windows
电脑多个不同分辨率屏幕鼠标移动时出现偏移、错位情况的解决方法
电脑多个不同分辨率屏幕鼠标移动时出现偏移、错位情况的解决方法
1874 1
|
Web App开发 JSON 安全
【漏洞复现】Yapi接口管理平台远程代码执行漏洞
Yapi接口管理平台远程代码执行漏洞,攻击者可通过特定Payload对目标实施恶意攻击,获取敏感信息,操控服务器指令。
2458 1