LDAP服务搭建,phpLDAPadmin+python管理服务

LDAP 是什么?

LDAP(Lightweight Directory Access Protocol)是一种轻量级的目录访问协议。它最初是用于在 TCP/IP 网络上访问 X.500 目录服务,但由于其简单和高效的特点,现在广泛应用于企业、组织等系统中的身份验证、授权、信息管理等方面。

LDAP 的主要作用是在目录中查找和修改信息。目录可以视为一个包含了关于人员、组织、设备等信息的数据库**(可以理解为企业微信中的通讯录,就是一个树的结构)**。

LDAP 协议是一种面向客户端/服务器的协议,客户端通过发送操作请求(如添加、删除、查询等)到服务器,服务器通过返回操作结果(成功或失败等)给客户端。

LDAP 由一系列的 RFC(请求评论)文件定义,常用的有 RFC 1777、RFC 2251、RFC 4510 等。

LDAP中的概念

在 LDAP 里, 一切都是等级化的,或者称之为层级化(hiearchical)。

一棵树有树干,树枝和树叶;树叶长在树枝上,树枝依附于树干。这就是一个简单的层级结构。LDAP 的结构同一棵树类似。假设 LDAP 里存储的是公司的信息,那么可以把公司(company)本身理解为树干,公司里面的各个部门,比如组(group),理解为树干,把用户(user)理解为树叶。这样的结构称之为目录信息树(DIrectory Information Tree,DIT)
在这里插入图片描述

在LDAP中,dc、dn、cn、ou 等都是一些常用的名词,代表着不同的意思。

  • dc(Domain Component):表示域名(Domain Name)中的部分或全部组成部分。例如,dc=example,dc=com 表示组成平台的域名(example.com)。

  • dn(Distinguished Name):表示一个完整的条目(Entry)在 LDAP 树结构中的路径。它由多个 RDN (Relative Distinguished Name,相对区分名)组成,且从根节点开始到该条目的路径是唯一的。例如,表示用户 “cn=张三,ou=users,dc=example,dc=com” 表示这个用户位于组织单元 “users” 下,同时还是域名为 “example.com” 的整体树中的一个条目。

  • cn(Common Name):表示常用名称,通常用来表示条目的名称,可以是人的姓名、群组的名称等。例如,cn=xiaoming 表示一个名为 “xiaoming” 的条目。

  • ou(Organizational Unit):表示组织单元,可用来组织用户或其他条目。例如,ou=users 表示组织单元的名称为 “users”,它可以用来组织用户。

用公司来比喻,dc就是公司域名,dn就是从根节点到叶子节点的路径,ou是容器组织或者是部门,ou下看可以存放cn。
cn为终端节点内容,比如一个人即使一个cn。

除了上述名称外,LDAP 还包含了很多其他的属性和 ObjectClass(对象类),不同的 ObjectClass 定义和支持不同的属性。了解这些名称和属性可以帮助我们更好地设计和使用 LDAP 目录服务。

windows安装LDAP

https://www.cnblogs.com/eternality/archive/2023/08/22/17648094.html
在这里插入图片描述

docker安装LDAP

可以通过Docker Compose快速搭建LDAP服务。这里提供一个简单示例:

  1. 创建一个文件夹 ldap 并进入该文件夹。

  2. 创建 docker-compose.yaml 文件,并添加以下代码:

    version: '3'
    services:ldap:image: osixia/openldapports:- 389:389environment:LDAP_ADMIN_PASSWORD: <your_password>LDAP_DOMAIN: <your_domain>LDAP_BASE_DN: <your_base_dn>volumes:- ldap-data:/var/lib/ldap- ldap-config:/etc/ldap/slapd.d- ldap-secrets:/run/secretssecrets:- ldap_admin_passwordphpLDAPadmin:image: osixia/phpldapadminports:- 6443:443environment:PHPLDAPADMIN_LDAP_HOSTS: ldapdepends_on:- ldapsecrets:- ldap_admin_passwordvolumes:ldap-data:ldap-config:ldap-secrets:secrets:ldap_admin_password:file: ./ldap_admin_password

    主要修改文件中的password,domain,dn信息。
    在这里插入图片描述

  3. 在同级目录下,创建文件 ldap_admin_password ,并输入您想要设置的管理员密码。

  4. 运行 docker-compose up -d 命令,等待容器启动。
    在这里插入图片描述

  5. 访问 https://localhost:6443,使用管理员账户 cn=admin,<your_base_dn> 和设置的管理员密码,即可登录LDAP管理界面。
    在这里插入图片描述
    在这里插入图片描述

备注:

  • LDAP_DOMAIN:LDAP 的域名,例如 example.com
  • LDAP_BASE_DN:LDAP 的根目录,例如 dc=example,dc=com
  • LDAP_ADMIN_PASSWORD:管理员密码,需要在 ldap_admin_password 文件中设置。
  • PHPLDAPADMIN_LDAP_HOSTS:LDAP 服务器的地址,这里填写 ldap,可以通过 Docker 容器名进行访问。
  • LDAP_ADMIN_PASSWORD:这个 secret 会以文件的形式被注入到容器中的环境变量,以安全地存储密码。

管理工具

在windows安装连接里给了3个工具,可以用,我这里直接使用docker安装的phpldapadmin。

phpLDAPAdmin使用

https://blog.51cto.com/u_14049791/5714604
phpLDAPadmin 是一个基于 Web 的 LDAP 管理工具,用于管理 LDAP 服务器。使用它,可以浏览 LDAP 树、查看 LDAP 架构、执行搜索、创建、删除、复制和编辑 LDAP 条目。甚至可以在服务器之间复制条目。

登录

首先登录信息要写对,密码是搭建设置的。
在这里插入图片描述

entry

在LDAP里,每个ou,cn,都是enter,条目.
Entry是指目录管理的基本单元,通常表示一个条目或记录。每个Entry都有一个唯一的标识名(Distinguished Name,DN),用于表示该条目在LDAP目录树中的位置。条目可以是用户、组、组织或其他实体,它们在目录中被表示为条目。

条目是LDAP中的基本对象,对LDAP的增删改查都是以Entry为基本单元进行操作的。通过操作Entry,可以实现用户的创建、删除、修改和查询等操作

创建ou

创建一个名为school的ou
在这里插入图片描述
通过模板选择该entry属于什么,这里选择OU,说明是一个组织。
在这里插入图片描述
在这里插入图片描述

创建组

选中school,选中Create a child entry,选中Generic: Posix Group,输入group名,点击create object
在这里插入图片描述
在这里插入图片描述

创建用户

选中Users,create child entry,选中Generic: User Account,输入信息,选所属组为student
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

python连接ldap

安装ldap3模块
官方文档:https://ldap3.readthedocs.io/en/latest/tutorial_searches.html

  • 连接LDAP服务器,需要配置为自己的服务器,端口,和密码,users
import ldap3# 连接到LDAP服务器
server = ldap3.Server('服务器IP:端口')
conn = ldap3.Connection(server, user='cn=admin,dc=example,dc=com', password='password')
conn.bind()
  • 查询Users下objectclass为organizationalUnit
    在这里插入图片描述

# 执行查询
conn.search('ou=Uses,dc=example,dc=com', '(objectclass=organizationalUnit)')# 打印查询结果
for entry in conn.entries:print(entry.entry_dn)# 断开连接
conn.unbind()

只能查到它自己
在这里插入图片描述
如果要查询Users下面的cn,可以输入如下一个属性objectclass
conn.search(‘ou=Uses,dc=example,dc=com’, ‘(objectclass=inetOrgPerson)’)
在这里插入图片描述

在这里插入图片描述

  • 创建一个组织条目
conn.add('ou=ldap3-tutorial,dc=example,dc=com', 'organizationalUnit')

可以看到新增了一个ou
在这里插入图片描述

  • 添加一个新的用户
conn.add('cn=b.young,ou=ldap3-tutorial,dc=example,dc=com', 'inetOrgPerson', {'givenName': 'Beatrix', 'sn': 'Young', 'departmentNumber': 'DEV', 'telephoneNumber': 1111})

在这里插入图片描述
需要注意,python执行后,phpldapadmin需要重新退出重登才能看到修改内容。
可以看到后面的字典是给cn添加的属性。
其他操作可见:https://ldap3.readthedocs.io/en/latest/tutorial_operations.html#create-an-entry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/155418.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven项目管理

文章目录 Maven项目管理项目结构依赖导入依赖依赖作用域可选依赖排除依赖 继承关系常用命令测试项目打包项目 Maven项目管理 Maven 翻译为"专家"、“内行”&#xff0c;是 Apache 下的一个纯 Java 开发的开源项目。 基于项目对象模型&#xff08;缩写&#xff1a;P…

GPS学习(一):在ROS2中将GPS经纬度数据转换为机器人ENU坐标系,在RVIZ中显示坐标轨迹

文章目录 一、GPS模块介绍二、坐标转换转换原理参数解释&#xff1a; 增加回调函数效果演示 本文记录在Ubuntu22.04-Humbel中使用NMEA协议GPS模块的过程&#xff0c;使用国产ROS开发板鲁班猫(LubanCat )进行调试。 一、GPS模块介绍 在淘宝找了款性价比较高的轮趣科技GPS北斗双…

LLM - 训练与推理过程中的 GPU 算力评估

目录 一.引言 二.FLOPs 和 TFLOPs ◆ FLOPs [Floating point Opearation Per Second] ◆ TFLOPs [Tera Floating point Opearation Per Second] 三.训练阶段的 GPU 消耗 ◆ 影响训练的因素 ◆ GPT-3 训练统计 ◆ 自定义训练 GPU 评估 四.推理阶段的 GPU 消耗 ◆ 影响…

识别flink的反压源头

背景 flink中最常见的问题就是反压&#xff0c;这种情况下我们要正确的识别导致反压的真正的源头&#xff0c;本文就简单看下如何正确识别反压的源头 反压的源头 首先我们必须意识到现实中轻微的反压是没有必要去优化的&#xff0c;因为这种情况下是由于偶尔的流量峰值,Task…

PHP连接SQLServer echo输出中文汉字显示乱码解决方法

1、查询结果有中文会显示乱码。 解决方法一&#xff08;较简单&#xff0c;建议使用&#xff09;&#xff1a; 在php文件最开头写上&#xff1a; header(Content-type: text/html; charsetUTF8); // UTF8不行改成GBK试试&#xff0c;与你保存的格式匹配 <?php header(&q…

python 练习 在列表元素中合适的位置插入 输入值

目的&#xff1a; 有一列从小到大排好的数字元素列表&#xff0c; 现在想往其插入一个值&#xff0c;要求&#xff1a; 大于右边数字小于左边数字 列表元素&#xff1a; [1,4,6,13,16,19,28,40,100] # 方法&#xff1a; 往列表中添加一个数值&#xff0c;其目的方便元素位置往后…

APISpace 全国快递物流地图轨迹查询API接口案例代码

1.全国快递物流地图轨迹查询接口详解 1.1 接口请求 请求方式&#xff1a;POST请求地址&#xff1a;https://eolink.o.apispace.com/wldtgj1/paidtobuy_api/trace_map请求头&#xff1a; 标签必填说明X-APISpace-Token是鉴权私钥&#xff0c;登陆 APISpace 后在管理后台的[访…

对xss-labs靶场的一次XSS攻击

1、首先我们进入靶场&#xff0c;提示我们开始测试 2、我使用AWVS工具进行了先行扫描&#xff0c;发现爆出XSS漏洞 3、然后对症下药 在输入框中输入&#xff1a; <script>alert(document.cookie)</script> 4、进入下一关 5、我们直接执行<script>…

【c++|opencv】一、基础操作---2.图像信息获取

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 图像信息获取&#xff0c;roi 1. 图像信息获取 // 获取图像信息#include <iostream> #include <opencv2/opencv.hpp>using namespace cv; …

【Docker】从命名空间和路由角度探究Docker的bridge网络

桥接网络是Docker的默认网络模式。在桥接网络中&#xff0c;Docker会为每个容器创建一个虚拟网络接口&#xff0c;并为容器分配一个IP地址。容器可以通过桥接网络与主机和其他容器进行通信&#xff0c;也能暴露端口供外部访问。 容器之间的通信原理 首先我们创建两个容器&…

三.RocketMQ单机安装及集群搭建

RocketMQ单机安装及集群搭建 一&#xff1a;安装环境1.软硬件要求2.下载RocketMQ 二.安装单机MQ1.上传并解压2.目录介绍3.修改MQ启动时初始JVM内存4.启动NameServer与Broker5.测试RocketMQ 三.RocketMQ集群搭建1.集群概念特点2.集群模式分类3.集群工作流程4.双主双从集群搭建4.…

git本地搭建服务器[Vmware虚拟机访问window的git服务器]

先按照https://zhuanlan.zhihu.com/p/494988089说明下载好Gitblit然后复制到tomcat的webapps目录下,如下: 双击"startup.bat"启动tomcat: 然后访问"http://127.0.0.1:8080/gitblit/"即可看到git的界面: 说明git服务器已经能够成功运行了! Vmware虚拟机…