freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

【安全科普】AD域安全协议(三)LDAP
2021-10-11 11:38:32

前言

LDAP是一种目录访问协议,它规定了以树状结构的方式来存储和访问数据。

然而协议是抽象的,要产生具体的功效,必须在应用中实现,比如AD域服务就实现了LDAP协议。


LDAP最明显的优势就是读取速度快,拥有极高的搜索效率。

可以用一个例子来体会这种速度:当我们进入一个迷宫,需要寻找出口。

普通数据库:一条路一条路地尝试,直到尝试出能走出去的路线,再将这条路线返回给我们。

LDAP:相当于拿了一张解密地图,上面清清楚楚写着哪条路能直接到达出口。


很明显,普通数据库也许要尝试十多次才能找到正确的路线,但是LDAP只要一次就能找到,搜索性能上孰优孰劣一目了然。

除此之外,LDAP允许灵活地添加数据,并且采取【客户端-服务端】的方式提供服务,即在服务端存储数据,在客户端操作数据,但相比于关系型数据库,它不支持事务、回滚等操作。


LDAP之所以拥有这些特点,主要基于它的数据存储方式——树形目录,即在系统中构建一棵树,在树叶上存储数据。接下来我们通过在系统中搭建一棵树的流程,详细介绍LDAP原理。

# LDAP原理 #


构建一棵树,首先我们需要确定这棵树长在哪里,也就是树根是什么。

LDAP中将域名拆分开,形成树根,系统中的树根叫做DC,比如在test20.local域下,树根为DC=test20,DC=local。

1633921602_6163aa429feac0cdb4d39.png!small?1633921574750

相比于直接用test20.local做树根,这样的组织方式让整体结构更清晰,同时便于扩充域。假如有另一个叫test20.local2的域要加入这棵树,那么我们就可以直接将DC=local2放到DC=test20下面,而不必重新构建一棵叫test20.local2的树,如下图所示。

1633921608_6163aa48ef59eb7685b7e.png!small?1633921581144


树根有了,下一步,我们开始构建树枝。

LDAP中,树的枝干通常是由组织单位(OU)来充当,主要是区分数据所属范围。比如有一个叫张三的用户在local下的信息部,那么张三所属枝干就是OU=信息部。


1633921654_6163aa769d174e480e817.png!small?1633921626715


在这里,LDAP有一个明显优势,就是每一个树枝都可以被单独放在一个服务器中进行管理。这不仅有利于减轻服务器负担,也方便具有分公司的企业在不同地域部署服务器。


到最后,只要把所有的数据制作成树叶,挂到树枝上去就行了。

制作树叶有两个关键的地方,一个是树叶名字,另一个是树叶内容。


LDAP规定的名字结构由两部分组成,一部分是直接名称,即CN,一部分是相对名称,即RDN。

CN是唯一的,用来区分不同树叶。比如用户张三注册时,CN=张三。

而RDN是指从树根到树叶经过的所有枝干,用来标识树叶位置。如果Sam用户在市场运营部,他的RDN就是DC=test20,DC=local,OU=信息部。

RDN加CN就形成了数据名称,用DN来表示,张三的DN就是:DC=test20,DC=local,OU=信息部,CN=张三。

正是这样的名字结构提升了LDAP的读取效率,因为DN就是那张标识了出口路线的地图,只要我们顺着名称往下寻找,就能直接找到所需数据。

1633921670_6163aa86cfac67d3beda6.png!small?1633921642895

树叶内容主要是描述这片树叶的颜色、形状、气味等独特的信息,对应到系统中,就是资源的属性,比如用户的属性有性别,身份zheng号,电话等,计算机的属性有操作系统类型、账号密码等。

1633921680_6163aa90b01280ca01fbe.png!small?1633921652869

一片树叶名称加上它的属性就形成完整的数据信息,在系统中被称为条目。

每片树叶有它单独的条目,如果要增加新的信息,只需要在条目中添加一个属性,不会影响其它的条目。而在关系型数据库中,增加信息需要改变表结构,相比来说,困难很多。


为了提高效率,LDAP还提供了一种比较方便的做法,就是给具有相同属性类型的资源制定模板,在注册时直接往模板中填充信息就能创建一片树叶,这就是对象类。

比如说系统中有一个对象类叫用户,它的属性包括姓名、电话、邮箱。那么我创建用户时,必须填写这三项才能创建成功。

1633921726_6163aabe964df8087df90.png!small?1633921698717

系统中的树还有一个不一样的地方,就是各种不同品种的树叶可以长在一棵树上,这个不同品种的树叶是由系统中多种多样的资源对象来充当的,所以我们可以想象一棵长满了用户、计算机和打印机的树。

除此之外,它还可以允许杂交树叶的存在。这是因为系统中的某个资源对象可能同时具有多个对象类的属性,比如系统管理员,它就同时具有用户和管理员的属性。


到此,在LDAP协议的“指导”下,我们就成功在系统中构建好一棵完整的树了。

# 结语 #

LDAP常用来构建统一的账号管理、身份验证平台,实现sso单点登录机制。此外,它还有访问控制和数据复制的功能,能够帮助增强系统安全性和容灾性。

但同时,LDAP协议也存在一些安全问题,比如LDAP注入造成的恶意LDAP查询。在工作生产中,同样需要我们多加防范。


以上就是LDAP协议的全部内容,下一篇文章中,我们将继续为大家介绍RPC协议。

# 企业安全 # 网络协议
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录