您现在的位置是:首页 > 技术教程 正文

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

admin 阅读: 2024-03-16
后台-插件-广告管理-内容页头部广告(手机)

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: LDAP_DOMAIN: LDAP_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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

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

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

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

  5. 访问 https://localhost:6443,使用管理员账户 cn=admin, 和设置的管理员密码,即可登录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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 查询Users下objectclass为organizationalUnit
    在这里插入图片描述
# 执行查询 conn.search('ou=Uses,dc=example,dc=com', '(objectclass=organizationalUnit)') # 打印查询结果 for entry in conn.entries: print(entry.entry_dn) # 断开连接 conn.unbind()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

在这里插入图片描述

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

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

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

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

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜