一、LDAP介绍

目录服务(Directory Service)

目录是专门为搜索浏览而设计的专用数据库,支持基本的查找和更新功能。

提供目录服务的方式有很多。不同的方法允许将不同类型的信息存储在目录中,对如何引用,查询和更新该信息,如何防止未经授权的访问等提出不同的要求(这些由LDAP定义)。一些目录服务是本地的,提供本地服务;一些目录服务是全球性的,向更广泛的环境(例如,整个Internet)提供服务。全局服务通常是分布式的,这意味着它们包含的数据分布在许多机器上,所有这些机器协作以提供目录服务。通常,全局服务定义统一的名称空间,无论在何处访问,都可以提供相同的数据视图。

LDAP(Lightweight Directory Access Protocol)

LDAP代表轻型目录访问协议(Lightweight Directory Access Protocol)。顾名思义,它是用于访问目录服务的轻量级协议,特别是基于X.500协议的目录服务。LDAP运行于TCP/IP连接上或其他面向传输服务的连接上。LDAP是IETF标准跟踪协议,并且在“Lightweight Directory Access Protocol (LDAP) Technical Specification Road Map” RFC4510中进行了指定。

从用户角度讲LDAP

目录中可以存储哪些信息?

LDAP信息模型基于条目(entries)。一个条目属性集合(包含很多属性),并且有一个全局唯一的专有名称(Distinguished Name)。DN用于明确地引用条目条目的每一个属性都有一个类型和一个或多个。这些类型通常是便于记忆的字符串,例如“ cn ”表示通用名称(common name),或“ mail ”表示电子邮件地址(email address)。的语法取决于类型。例如,cn属性可能包含值Babs Jensen。一个邮件属性可能包含值“ babs@example.com ”。一个jpegPhoto属性将包含在一张照片JPEG格式 (二进制)格式。

信息如何排布?

在LDAP中,目录条目以树状分层结构排列。传统上,此结构反映了地理和组织边界。代表国家的条目显示在树的顶部。它们下面是代表省和国家机构的条目。再下一层可能是代表组织单位,人员,打印机,文档或您想到的几乎所有其他内容的条目

ldap 管理平台 python ldap 使用_ldap 管理平台 python


该树还可以基于网络域名进行排列。这种命名方法变得越来越流行,因为它允许使用DNS定位目录服务。图1.2显示了基于域名的LDAP目录树示例。

ldap 管理平台 python ldap 使用_OpenLDAP_02


此外,LDAP允许您通过使用名为objectClass的特殊属性来控制条目中需要和允许哪些属性。objectClass属性的值确定条目必须遵循的结构规则。

如何引用这些信息?

条目由其DN(专有名称)引用,该专有名称是通过采用条目本身的名称来构造的,称为相对专有名称(Relative Distinguished NameRDN),并连接其上级条目的RDN

例如,上面的Internet命名示例中,Barbara Jensen条目的RDNuid = babs,而DN为uid = babs,ou = People,dc = example,dc = com。完整的DN格式在RFC4514 “ LDAP: String Representation of Distinguished Names”中进行了描述。

如何获取信息?

LDAP定义用于查询和更新目录的操作,提供了用于在目录中添加和删除条目、更改现有条目以及更改条目名称的操作。但是,在大多数情况下,LDAP用于搜索目录中的信息。

例如,可能想在dc = example,dc = com及以下的整个目录子树中搜索名称为Barbara Jensen的人员。LDAP可以轻松地执行此操作。或者可能想直接在st = California,c = US条目下面搜索条目,以查找名称中包含字符串Acme且具有传真号码的组织。LDAP也可以支持。

如何保护信息避免未经授权的访问?

有些目录服务不提供保护,任何人都可以查看信息。LDAP为客户端提供了一种向目录服务器进行身份验证或证明其身份的机制,从而为丰富的访问控制铺平了道路。LDAP还支持数据安全(完整性和机密性)服务。

二、为什么使用LDAP

随着公司内部各种开源平台越来越多(例如:gitlab、Jenkins、Yapi等等),账号维护变成一个繁琐麻烦的事情,急需有一个统一的账号维护平台,一个人只需一个账号,在公司内部平台通用,而大多数开源平台都支持LDAP;因此只要搭建好LDAP服务,并跟钉钉之类的平台实现账号同步,即可实现统一账号管理;

三、相关资料

四、安装

Docker安装OpenLDAP

  • 创建目录
    mkdir /home/openldap/database -p,镜像运行用于映射;
  • 运行镜像
docker run -p 389:389 -p 636:636 \
--env LDAP_ORGANISATION="lenovoedu" \
--env LDAP_DOMAIN="lenovoedu.cn" \
--env LDAP_ADMIN_PASSWORD="password" \
-v  /home/openldap/database:/var/lib/ldap --privileged=true \
--name ldap  -d osixia/openldap
  • 开启防火墙
    RHEL/CentOS可能需要开启防火墙,否则本机其他容器无法访问;
firewall-cmd --add-port=389/tcp --permanent
firewall-cmd --add-port=636/tcp --permanent
firewall-cmd --reload
  • 查看安装是否成功
    可使用ldapAdmin,进行连接,下载地址,下载后解压运行,



    输入连接名称,ip地址,点击Fetch DNs获取Base值,不勾选Anonymous connection,输入用户名密码,用户名默认为admin,密码为docker run时设置密码,点击Test connection,测试是否能连接成功;

Docker安装LDAP Account Manager

OpenLDAP安装完成后,用命令操作不方便,需要一个可视化管理工具随时访问,LDAP Account Manager为web版的管理工具;
官网:https://www.ldap-account-manager.org/lamcms/ 官网Demo:https://www.ldap-account-manager.org/lam/templates/login.php,密码lam 官方docker镜像:https://registry.hub.docker.com/r/ldapaccountmanager/lam

docker 安装运行
docker run -p 8080:80 -it -d ldapaccountmanager/lam:stable
配置

浏览器输入IP:8080端口,访问

ldap 管理平台 python ldap 使用_ldap 管理平台 python_03


管理员密码为lam,这里仅说明关键的几个配置

ldap 管理平台 python ldap 使用_LdapAccountMana_04


ldap 管理平台 python ldap 使用_LDAP_05


ldap 管理平台 python ldap 使用_LDAP_06


点击保存

ldap 管理平台 python ldap 使用_OpenLDAP_07


ldap 管理平台 python ldap 使用_ldap 管理平台 python_08


点击保存,其他部分配置,根据需要自行修改,使用OpenLDAP配置账号密码登录即可(与ldapAdmin登录的账号密码一致)

ldap 管理平台 python ldap 使用_LDAP_09


ldap 管理平台 python ldap 使用_ldap 管理平台 python_10