0x00 前言简述
主要产品
基本模型
应用场景
0x01 环境安装
基于 yum 安装
基于 Docker 安装
0x02 LDAP配置&命令
slapd 命令
ldapsearch 命令
ldapadd 命令
ldapmodify 命令
ldapdelete 命令
slappasswd 命令
ldappasswd 命令
0x03 LDAP客户端
LDAPAccountManager
PHPLdapAdmin
LDAPAdmin
Apache Directory Studio
Migrationtools
JNDI方式
0x00 前言简述
由于其公司内部都内部各种运维系统等,当每个新员工入职就需要一个挨一个的登录到每个系统的后台给新员工开通账号,设置密码,然后员工离职还得去到每个系统后台去关闭账号,想想多浪费时间那么能不能维护一套账号,对所有系统生效呢?
。
在深入学习LDAP协议之前我们需要了解什么是目录服务?
1.描述:目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。如:。
2.特点:是动态的,灵活的,易扩展的。
3.目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
什么是LDAP?
答:维基百科:它是一个轻型目录访问协议(英文:,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。LDAP目录服务是由目录数据库和一套访问协议组成的系统,它是基于X.500标准的轻量级目录访问协议有时被称为。也是IETF下的一项标准,目前最新的RFC为 RFC4510 ;
。
LDAP有什么用?
答:构建一个统一的账号管理、身份验证平台,实现SSO单点登录机制,即用户可以在多个应用服务系统中使用同一个密码,通常用于公司内部网站的登录以及域内机器登陆管理;
特点:
使用轻量级目录访问协议(LDAP)构建集中的身份验证系统可以减少管理成本,增强安全性,避免数据复制的问题,并提高数据的一致性。
目录数据库和关系数据库不同,它有;
LDAP协议版本:
LDAPv2
LDAPv3
为什么要使用LDAP?
答:LDAP是开放的Internet标准,支持跨平台的Internet协议,在业界中得到广泛认可的,并且市场上或者开源社区上的大多产品都加入了对LDAP的支持,因此对于这类系统,不需单独定制,只需要通过LDAP做简单的配置就可以与服务器做认证交互;
LDAP目录与普通数据库有何异同?
1.主要不同之处在于数据的组织方式,它是一种有层次的、树形结构。所有条目的属性的定义是对象类object class的组成部分,并组成在一起构成schema;那些在组织内代表个人的schema被命名为white pages schema。
2.数据库内的每个条目都与若干对象类联系,而这些对象类决定了一个属性是否为可选和它保存哪些类型的信息。属性的名字一般是一个易于记忆的字符串,例如用cn为通用名(common name)命名,而"mail"代表e-mail地址。例如mail属性包含值“user@example.com”。
主要产品
简单了解下基于 LDAP 协议的产品有一下:
基本模型
每一个系统、协议都会有属于自己的模型,当然LDAP也不例外;
在了解LDAP的基本模型之前我们需要先了解几个LDAP的目录树概念:
目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的一个节点称之为条目(Entry),条目包含了该节点的属性及属性值。
条目:由属性(attribute)的一个聚集组成每个条目就是一条记录,并由一个唯一性的名字引用,即专有名称(),可描述一个层次结构,这个结构可以反映一个政治、地理或者组织的范畴。
对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。补充:属性取值依赖于其类型,并且LDAPv3中一般非二进制值都遵从UTF-8字符串语法。
关键字&术语说明:
:LDAP中的每个单元都认为是条目。
参照 YAPI 中的 LDAP 配置
(1) 信息模型
描述:在LDAP中的信息以树状方式组织,在树状信息中的基本数据单元是条目,而且每个条目由属性构成,属性中存储由属性值;
(2) 命名模型
描述:LDAP中的命名模型即LDAP中的条目定位方式,在LDAP中每个条目均有自己的DN 是该条目在整个树中的唯一名称标识;
LDAP树形结构的构成方式而一般有两种方式:
传统方式:聚焦于国别以及地理信息为上层构成,然后按照地理信息进行继续下行,最后精确到人的姓名以及住址;
互联网域名方式: 上层构成直接使用域名,能结合DNS相关的技术;
(3) 功能模型
描述:在LDAP中共有四类10种操作:
查询类操作,如搜索、比较;
更新类操作,如添加条目,删除条目,修改条目以及修改条目名
认证类操作,如绑定,解绑
其它操作,如放弃和扩展操作(除了扩展操作,另外9种是LDAO的标准操作,扩展操作是LDAP中为了增加新的功能,而提供的一种标准扩展框架,当前已经成为LDAP标准的扩展操作,有修改密码和startTLS扩展,在新的RFC标准和草案中正在增加一些新的扩展操作,不同的LDAP厂商也均定义了自己的扩展操作)
(4) 安全模型
描述:LDAP中的安全模型主要通过身份认证、安全通道和访问控制来进行实现;
应用场景
描述:由于LDAP主要运用于,而其主要是改变原有的认证策略,使需要认证的软件都通过LDAP进行认证,在统一身份认证之后,用户的所有信息都存储在AD Server中。终端用户在需要使用公司内部服务的时候,都需要通过AD服务器的认证。
那么程序中是如何访问的呢?
连接到LDAP服务器;
绑定到LDAP服务器;
在LDAP服务器上执行所需的任何操作;
释放LDAP服务器的连接;
我们以PHP脚本作为例子如下:
0x01 环境安装
描述:在上文中我们对LDAP产品进行列举,在厂商得持续开发迭代下提供LDAP服务的软件有很多商业上获得成功的,其中以使用最为广泛,而开源领域则是OpenLdap(全文实验也是基于此版本);
什么是OpenLDAP?
OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。
官网:http://www.openldap.org
它主要包括下述4个部分:
slapd - 独立LDAP守护服务
slurpd - 独立的LDAP更新复制守护服务
实现LDAP协议的库
工具软件和示例客户端
端口说明:
基于 yum 安装
环境准备:
修改配置文件完成后进行验证配置文件以及权限设置
注意:;
参考文档:
https://blog.51cto.com/skypegnu1/1939302
https://www.cnblogs.com/dmjx/p/9071068.html
https://www.58jb.com/html/120.html
基于 Docker 安装
描述:由于openldap的osixia的镜像所内置的缺省的dc即LDAP结构采用互联网域名方式;
Docker镜像:https://github.com/osixia/docker-openldap
建立数据持久化目录:
docker-compose.yml (v1.3.0)
安装OpenLDAP版本:
环境变量说明:
拉取并运行镜像:
容器内部查询:
0x02 LDAP配置&命令
描述:Yum安装ldap后的配置文件说明:
openLDAP的打开日志信息:
注意事项:
从OpenLDAP2.4.23版本开始所有配置数据都保存在 中,建议不再使用slapd.conf作为配置文件。
线上ACL控制配置解析希望能达到的效果是:;
slapd 命令
ldapsearch 命令
描述:LDAP一般用于SSO的单点登录,所以其他机器能够连接进行验证是最基础的,客户端安装openldap-client包进行登录LDAP并进行查询使用;
基础语法:
补充事项:
1.查询到的是经过base64编码的字符串,通过解码得到SSHA加密后密匙
2.过滤条件实例
下列过滤器将搜索包含一个或多个 manager 属性值的条目称为存在搜索:manager=*
下列过滤器将搜索包含通用名 WeiyiGeek 的条目。这也称为等价搜索:cn=WeiyiGeek
下列过滤器返回所有不包含通用名 WeiyiGeek 的条目:(!(cn=WeiyiGeek))
下列过滤器返回的所有条目中都有包含子字符串 X.500 的说明属性:description=X.500
下列过滤器返回所有组织单元为 Marketing 且说明字段中不包含子字符串 X.500 的条目:(&(ou=Marketing)(!(description=X.500)))
下列过滤器返回所有组织单元为 Marketing 且 manager 为 WeiyiGeek 或 Cindy Zwaska 的条目:(&(ou=Marketing)(|(manager=cn=WeiyiGeek,ou=Marketing,dc=siroe,dc=com)(manager=cn=Cindy Zwaska,ou=Marketing,dc=siroe,dc=com)))
下列过滤器返回所有不代表人员的条目:(!(objectClass=person))
下列过滤器返回所有不代表人员且通用名近似于 printer3b 的条目:(&(!(objectClass=person))(cn~=printer3b))
下列过滤器返回对象类为inetOrgPerson或者为groupOfUniqueNames的条目:
ldapadd 命令
ldapmodify 命令
描述:该命令用于进行数据添加,实际上ldapadd只是采用了一个软链接指向ldapmodify,所以此处我们统一进行说明;
命令参数:
测试添加的LDIF文件内容:
Question:中的ldapadd替换称ldapmodify是否能够完全一致的动作?
Ask:不行,其报错信息:,需要加上-a参数即可;
注意事项:
当部门和人员的信息还未进行关联,当然最简单的方式是先创建部门,然后在人员信息中添加相关内容即可
添加部门关键信息则为organisationalUnit,添加用户时候关键的objectclass是inetOrgPerson
ldapdelete 命令
slappasswd 命令
ldappasswd 命令
描述:LDAP有三种方式可以进行修改密码即
slappasswd命令: 管理员密码修改
ldappasswd命令: 用户密码修改
ldapmodify命令结合ldif文件
ldappasswd 参数:
0x03 LDAP客户端
LDAPAccountManager
采用 docker 容器部署LDAPAccountManager:
简单置流程:
(1) 我们访问进行LAM基础配置,首次登录点击,然后选择;
(4) 至此,已经完成docker版的openldap和LDAP Account Manager的安装配置。
PHPLdapAdmin
描述:phpLDAPadmin(也称为PLA)是一个基于Web的LDAP客户端。它为LDAP服务器提供简单,随处可访问的多语言管理。phpLDAPadmin是LDAP专业人员和新手的完美LDAP浏览器。其分层树查看器和高级搜索功能使您可以直观地浏览和管理LDAP目录。由于它是一个Web应用程序,因此该LDAP浏览器可在许多平台上运行,使您可以从任何位置轻松管理LDAP服务器。
官网:http://phpldapadmin.sourceforge.net/wiki/index.php/Main_Page
比如采用Docker进行安装:`如果开启HTTPS,需要配置443端口映射:-p 8443:443,并采用https访问
基础配置
Step1. 访问phpldapAdmin打开浏览器访问:http://192.168.172.245:6080
Step2.登录phpLdapAdmin添加组以及ldap账号流程步骤如下:
点击新建实体
回到首页,再次创建条目Templates选择:创建组 ,输入组名称然后提交
回到首页,点击创建的OU:Development组织,然后点击 创建创建一个子条目
Step3.采用创建的账号进行登陆LDAP;
LDAPAdmin
描述:Ldap Admin是一个用于LDAP目录管理的免费Windows LDAP客户端和管理工具。此应用程序允许您在LDAP服务器上浏览,搜索,修改,创建和删除对象。它还支持更复杂的操作,例如目录复制和在远程服务器之间移动,并扩展常用编辑功能以支持特定对象类型(例如组和帐户), 支持多类型系统:Winndows&Linux
官网:http://www.ldapadmin.org/
下载安装LDAP Admin客户端,新增连接如下:
Apache Directory Studio
描述: 设计用来和各种LDAP服务器进行交互操作,提供了一个使用方便的客户端操作平台。除了Apache DS之外,诸如OpenLdap也可以很好地进行交互,对于不习惯不喜欢命令行方式的用户,Apache Directory Studio也是选择之一。
官方网址:http://directory.apache.org/studio/
支持OS:跨平台,支持MacOS/Windows/Linux
下载地址:http://directory.apache.org/studio/downloads.html
导入与导出
File->右键 选择 Export 进行导出格式为LDIF
File->右键 选择 import 进行导入格式为LDIF的备份文件,还能通过直接修改ldif文件进行;
入坑解决:
(1)import的失败请按照如下顺序进行原因确认:
ldif文件的多个entry的格式,包括全角字符等
ldif文件内容是否有缺失,拼写是否有错误
ldif文件的内容依赖的部分,这个只能你自己根据系统的情况自行确认,本身ldap就是一个类似目录层级的方式,比如上层目录没有试图添加下层,自然会出错
ldap的权限设定与配置 一般来说都是既存的数据和ldif文件中的某个entry写错了导致的问题,请首先排除这个方面的问题
Migrationtools
描述:采用migrationtools工具包,实现导入系统账号的相关信息;
创建两个测试用户及用户组,并修改密码
将刚创建的两个用户导入至openldap数据文件
使用migrationtools将两个临时用户生成ldif文件
4.把用户导入至openLDAP的数据文件并查询导入的数据
JNDI方式
描述:我们可以使用Java中使用javax.naming可以对Ldap用户信息进行验证,使用这点可以完成SSO之类功能的集成;
简单的基础示例:
执行结果:
其它博主的代码:
Java连接LDAP-JNDI参考: