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

news2024/10/6 22:28:42

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/openldap
        ports:
          - 389:389
        environment:
          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/secrets
        secrets:
          - ldap_admin_password
    
      phpLDAPadmin:
        image: osixia/phpldapadmin
        ports:
          - 6443:443
        environment:
          PHPLDAPADMIN_LDAP_HOSTS: ldap
        depends_on:
          - ldap
        secrets:
          - ldap_admin_password
    
    volumes:
      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.coloradmin.cn/o/1155852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov5的ptq量化流程

本次试验是基于yolov5n的模型进行ptq、qat的量化以及敏感层分析的试验。 Post-Training-Quantization(PTQ)是目前常用的模型量化方法之一。以INT8量化为例,PTQ处理流程如下: 首先在数据集上以FP32精度进行模型训练,得到训练好的baseline模型; 使用小部分数据对FP32 basel…

第2篇 机器学习基础 —(3)机器学习库之Scikit-Learn

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。Scikit-Learn&#xff08;简称Sklearn&#xff09;是Python 的第三方模块&#xff0c;它是机器学习领域当中知名的Python 模块之一&#xff0c;它对常用的机器学习算法进行了封装&#xff0c;包括回归&#xff08;Regressi…

这个学习方式,用的太及时了!

学校思政学习是培养未来社会精英、提升学生政治觉悟的重要环节。在学生的成长过程中&#xff0c;思政学习扮演着至关重要的角色&#xff0c;不仅有助于提高学生的政治素质&#xff0c;还能够培养他们的思维能力、价值观念&#xff0c;使他们更好地为社会和国家的发展贡献力量。…

c语言练习(9周)

输入样例11输出样例7.0980 #include<stdio.h> int main() {int n, i;double s 1,a1;scanf("%d", &n);for (i 2; i < n; i) {a 1 / (1a);s a;}printf("%.4lf", s);return 0; } 题干输入10个整数&#xff0c;分别按输入正序、逆序显示。输…

input 调起键盘 ,键盘距离输入框底部太近

input 调起键盘 &#xff0c;键盘距离输入框底部太近 解决方法 cursorSpacing‘20’ 单位是 ‘px’ <input cursorSpacing20 type"text" v-model"replyMain" />距离底部距离 20px &#xff0c;输入框距离键盘距离是20px

第五章 I/O管理 八、缓冲区管理

目录 一、定义 二、缓冲区的作用 三、单缓冲 1、定义&#xff1a; 2、例子1 3、例子2 四、双缓冲 1、定义&#xff1a; 2、例子1&#xff1a; 3、例子2&#xff1a; 五、单缓冲和双缓冲的区别 六、循环缓冲区 1、定义&#xff1a; 七、缓冲池 1、定义&#xff1a;…

岩土工程监测利器:多通道振弦数据记录仪应用铁路隧道监测

岩土工程监测利器&#xff1a;多通道振弦数据记录仪应用铁路隧道监测 岩土工程监测是工程建设中十分重要的一环&#xff0c;特别是在铁路隧道工程中&#xff0c;岩土工程监测更是不可或缺的一项。其中&#xff0c;振弦数据记录仪是一种非常重要的仪器&#xff0c;可以帮助监测…

思维训练第三课 反意疑问句

系列文章目录 文章目录 系列文章目录前言一、什么是反意疑问句二、反意疑问句的回答&#x1f49a;主系表/主谓宾&#xff08;肯定&#xff09;&#xff0c;否定提问1、一般现在时2、一般过去时3、一般将来时4、现在完成时 &#x1f49b; 主谓宾1、一般现在2、一般过去3、一般将…

2023最新版本 FreeRTOS教程 -2-任务创建-验证(动态创建)

API函数 BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,const configSTACK_DEPTH_TYPE usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask )API函数参数理解 -1-任务函数就是和函数指针 -2-名称自定义 -3-堆栈大小自…

041-第三代软件开发-QCustcomPlot波形标注

第三代软件开发-QCustcomPlot波形标注 文章目录 第三代软件开发-QCustcomPlot波形标注项目介绍QCustcomPlot波形标注效果初始化绘制 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML…

C++11线程

C11线程 创建线程 创建线程需要包含头文件<thread>&#xff0c;使用线程类std::thread 构造函数 默认构造函数 thread() noexcept; 默认构造函数&#xff0c;构造一个线程对象&#xff0c;但它不会启动任何实际的线程执行。 任务函数构造函数 template< class Fun…

计算机毕业设计选题推荐-短文写作竞赛微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

物联网的音视频基础设施,谁在提供最优解?

声网在作为RTC服务商的同时&#xff0c;也更在成为赛道的核心布道者和推动者&#xff0c;通过一个个场景的逐步落地&#xff0c;进而推动RTC行业产生更大的想象力。 作者|斗斗 出品|产业家 某海外物流企业的控制室内&#xff0c;工作人员正聚精会神地注视着高清视频画面&a…

深入浅出排序算法之快速排序(重要)⭐⭐⭐⭐⭐

目录 1. 算法介绍⭐⭐⭐⭐⭐ 1.1 图示解析 2. 执行流程和代码实现 2.1 挖坑法⭐⭐⭐⭐ 2.2 Hoare法⭐⭐⭐⭐ 2.3 前后指针法&#xff08;了解即可&#xff09; 2.4 非递归实现快速排序&#xff08;了解即可&#xff09; 4. 性能分析 5. 算法改进 5.1 三数选中法 5.2…

ChatGPT正在测试原生文件分析功能,DALL·E 3能P图啦!

10月29日&#xff0c;有部分用户在社交平台上分享&#xff0c;ChatGPT Plus正在测试原生文件上传、分析功能&#xff0c;可以通过文本问答的方式&#xff0c;对上传的PDF等数据文件进行提问、搜索。 例如&#xff0c;上传一份50页的员工手册PDF文件&#xff0c;然后向ChatGPT提…

基于Qt Designer 操作教程

​本章将简介使用 Qt Creator 里自带的 Qt Designer,使用 Qt Designer 比较方便的构造 UI 界面。特点是方便布局,比较形象。 ## 使用 UI 设计器开发程序 在这小节里我们继续学习如何使用 Qt Designer 开发程序,Qt Designer 是属于 Qt Creator 的一个功能而已,大家不要搞混…

一款针对SpringBootEnv页面进行快速漏洞利用

参考GitHub - 0x727/SpringBootExploit: 项目是根据LandGrey/SpringBootVulExploit清单编写&#xff0c;目的hvv期间快速利用漏洞、降低漏洞利用门槛。 &#x1f4dd; TODO 支持Eureka XStream deserialization RCE支持Fastjson 内存马注入支持更多可以使用JNDI内存马注入反序…

英语——歌曲篇——My Heart Will Go On——我心永恒

My Heart Will Go On [Celine Dion我心永恒] Every night in my dreams I see you,I feel you, That is how I know you go on Far across the distance And spaces between us You have come to show you go on Near,far,wherever you are I believe that the heart does g…

huggingface离线模式及默认保存路径

T5Tokenizer.from_pretrained()函数会在线下载huggingface上的模型&#xff0c;并自动保存在C盘的.cache路径下&#xff1a; C:\Users\xxxxx\.cache\huggingface\hub\models--google--t5-v1_1-base # 这里xxxxx代表自己电脑用户名huggingface离线下载 以google/t5-v1_1-base为…

RabbitMQ入门到实战教程,消息队列实战,改造配置MQ

RabbitMQ入门到实战教程&#xff0c;MQ消息中间件&#xff0c;消息队列实战-CSDN博客 3.7.Topic交换机 3.7.1.说明 Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。 只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候…