前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >一文教你了解ldap的原理和安装使用

一文教你了解ldap的原理和安装使用

作者头像
神的孩子都在歌唱
发布2025-03-05 19:39:11
发布2025-03-05 19:39:11
8700
代码可运行
举报
运行总次数:0
代码可运行

前言

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱

一. 简介

百度百科轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。

官方文档介绍:LDAP 代表轻量级目录访问协议。顾名思义,它是一种用于访问目录服务的轻量级协议,特别是基于 X.500 的目录服务。LDAP 通过 TCP/IP 或其他面向连接的传输服务运行。

1.1 什么是目录服务

目录是专门为搜索和浏览而设计的数据库,目录服务对于网络的作用就像白页对电话系统的作用一样。目录服务将有关现实世界中的事物(如人、计算机、打印机等等)的信息存储为具有描述性属性的对象。人们可以使用该服务按名称查找对象或者像使用黄页一样,可使用它们查找服务。

目录服务器的主要功能是提供资源与地址的对应关系,比如你想找一台网上的共享打印机或主机时,你只需要知道名字就可以了,而不必去关心它真正的物理位置。而目录服务器帮助维护这样的资源-地址映射

目录服务主要作用是使目录中所有信息资源发挥作用的服务,如用户和资源管理、基于目录的网络服务、基于网络的应用管理等!活动目录服务(AD)是将网络中的各种资源组合起来,进行集中管理,以方便网络资源的搜索,使企业可以轻松地管理复杂的网络环境。

有许多不同的方法可以提供目录服务。不同的方法允许将不同类型的信息存储在目录中,对如何引用、查询和更新该信息、如何防止未经授权的访问等提出不同的要求。某些目录服务是本地的,为受限上下文提供服务(例如,单台计算机上的手指服务)。其他服务是全球性的,为更广泛的环境(例如,整个互联网)提供服务。全局服务通常是分布式的,这意味着它们包含的数据分布在许多机器上,所有这些机器都合作提供目录服务。通常,全局服务定义一个统一的命名空间,无论您与数据本身的关系在哪里,它都会提供相同的数据视图。

1.2 LDAP详细描述

我们已经知道,LDAP是一种用于访问目录服务的轻量级协议,那么目录中可以存储哪些类型的信息,他的信息是如何排列的呢?

1.2.1 目录中存储的类型信息

LDAP 信息模型基于条目。条目是具有全局唯一名称 (DN) 的属性集合。DN 用于明确引用条目。每个条目的属性都有一个类型一个或多个值。LDAP中的属性类型(Attribute Types)如下:

  • DN(Distinguished Name):DN 是 LDAP 目录中的唯一标识符,由一系列的相对区别名 (RDN) 组成。每个 RDN 由一个属性类型及其值组成,并且这些 RDN 按从下至上的顺序排列,以逗号分隔。例如,cn=admin,dc=testldap,dc=org是一个 DN,其中包含了三个 RDN:cn=admindc=testldapdc=org
  • CN(Common Name):CN 是用于标识目录中的对象(通常是用户或设备)的属性类型。例如,如果用户的名字是“张三”,那么其 CN 可以是cn=张三。在 DN 中,CN 是最常见的 RDN 之一。
  • OU(Organizational Unit):OU 用于表示组织单位,是一种将目录中的对象进行逻辑分组的属性类型。例如,公司的不同部门或团队可以通过 OU 来表示。一个典型的 OU 可能是ou=Salesou=IT,并且可以在 DN 中用来层次化地组织条目,例如:ou=IT,dc=testldap,dc=org
  • O(OrganizationName):O 表示组织的名称,通常用于标识目录中最高级别的组织。例如,一家公司可能有一个组织名为o=ExampleCorp,可以在 DN 中表示为o=ExampleCorp,dc=testldap,dc=org
  • UID(User ID):UID 是唯一标识用户的属性类型。每个用户在系统中都有一个唯一的 UID。这个属性通常用于用户登录和认证。例如,某个用户的 UID 可能是uid=jdoe
  • DC(Domain Component):DC 是表示域组件的属性类型,用于描述域名的层次结构。例如,dc=org表示顶级域名,dc=testldap表示二级域名。这些组件可以组合在一起形成一个完整的域名,例如:dc=testldap,dc=org

每个这些属性类型都可以组合在一起,形成完整的 DN,用于唯一标识 LDAP 目录中的条目。完整的 DN 提供了一个路径,描述了从根节点特定条目的所有层次结构信息。

1.2.2 信息是如何排列的

在 LDAP 中,目录条目以分层树状结构排列。传统上,这种结构反映了地理和/或组织边界。代表国家/地区的条目显示在树的顶部。在它们下面是代表国家和国家组织的条目。它们下方可能是代表组织单位、人员、打印机、文档或您能想到的任何其他内容的条目。以下图片显示了使用传统命名的 LDAP 目录树示例。

图片来自官网 LDAP 目录树(传统命名)

树也可以根据互联网域名进行排列。这种命名方法正变得越来越流行,因为它允许使用 DNS 定位目录服务。

图片来自官网 LDAP 目录树(Internet 命名)

通过目录树,我们可以很快的从dc=example,dc=com目录子树中搜索特定名称的人员。

二. LDAP的安装和命令

2.1 LDAP安装

我们这里安装openldap,OpenLDAP 软件是轻量级目录访问协议的开源实现。

openLdap开源路径:openLdap

我们选择docker方式安装

代码语言:javascript
代码运行次数:0
复制
docker pull osixia/openldap

目录/var/lib/ldap(LDAP 数据库文件)和/etc/ldap/slapd.d(LDAP 配置文件)用于保存架构和数据信息,应映射为卷,以便将 LDAP 文件保存在容器外部。

代码语言:javascript
代码运行次数:0
复制
docker run--hostname192.168.1.47--name openldap-p389:389-p636:636--volume /study/data/slapd/database:/var/lib/ldap \
   --volume /study/data/slapd/config:/etc/ldap/slapd.d \
   --volume /study/project/ldap/certs:/container/service/slapd/assets/certs \
   --envLDAP_ENABLE_TLS=yes \
   --envLDAP_TLS_CRT_FILENAME=ldap_server.crt \
   --envLDAP_TLS_KEY_FILENAME=ldap_server.key \
   --envLDAP_TLS_CA_CRT_FILENAME=ldap_ca.crt \
   --detach osixia/openldap:latest

默认情况下,管理员的密码为 admin。它的组织是 Example Inc. 和是 example.org 。

如果要更改可以修改dockers的启动条件

代码语言:javascript
代码运行次数:0
复制
docker run \
--envLDAP_ORGANISATION="My Company" \
--envLDAP_DOMAIN="my-company.com" \
--envLDAP_ADMIN_PASSWORD="JonSn0w" \
--detach osixia/openldap:1.5.0

docker cp phpldapadmin:/container /study/project/phpldapdamin/

2.2 LDAP的命令行工具

OpenLDAP 提供了许多命令行工具,用于管理和操作 LDAP 目录。

我们可以进入到docker容器中进行一些命令操作

代码语言:javascript
代码运行次数:0
复制
docker exec-it openldapbash

比如查询某个用户信息

代码语言:javascript
代码运行次数:0
复制
ldapsearch-x-D"cn=admin,dc=example,dc=org"-W-b"dc=example,dc=org""cn=chen"

具体的操作命令如下

2.2.1 LDAP 操作命令
  1. ldapadd
    • 用途:添加新条目到 LDAP 目录。
    • 示例:ldapadd -x -D "cn=admin,dc=example,dc=org" -W -f newentry.ldif
    • 选项:-x使用简单绑定,-D指定绑定的 DN,-W提示输入密码,-f指定 LDIF 文件。
  2. ldapmodify
    • 用途:修改现有的 LDAP 条目。
    • 示例:ldapmodify -x -D "cn=admin,dc=example,dc=org" -W -f modify.ldif
    • 选项:与ldapadd类似,但用于修改条目。
  3. ldapdelete
    • 用途:从 LDAP 目录中删除条目。
    • 示例:ldapdelete -x -D "cn=admin,dc=example,dc=org" -W "cn=John Doe,dc=example,dc=org"
    • 选项:指定要删除的条目 DN。
  4. ldapsearch
    • 用途:在 LDAP 目录中搜索条目。
    • 示例:ldapsearch -x -D "cn=admin,dc=example,dc=org" -W -b "dc=example,dc=org" "(objectClass=*)" cn mail
    • 选项:-b指定搜索的基准 DN,(objectClass=*)是搜索过滤器,cn mail指定返回的属性。
  5. ldapcompare
    • 用途:比较 LDAP 条目的属性值。
    • 示例:ldapcompare -x -D "cn=admin,dc=example,dc=org" -W "cn=John Doe,dc=example,dc=org" "cn=John Doe"
    • 选项:指定要比较的条目 DN 和属性。
  6. ldapwhoami
    • 用途:验证 LDAP 用户身份并显示绑定的 DN。
    • 示例:ldapwhoami -x -D "cn=admin,dc=example,dc=org" -W
    • 选项:显示当前绑定用户的 DN。
  7. ldappasswd
    • 用途:更改 LDAP 条目的密码。
    • 示例:ldappasswd -x -D "cn=admin,dc=example,dc=org" -W "uid=jdoe,dc=example,dc=org"
    • 选项:提示输入新密码并更新指定条目的密码。
2.2.2 数据库管理命令
  1. slapcat
    • 用途:导出 LDAP 目录的内容到 LDIF 文件。
    • 示例:slapcat -n 1 -l backup.ldif
    • 选项:-n指定数据库编号,-l指定输出文件。
  2. slapadd
    • 用途:从 LDIF 文件导入条目到 LDAP 目录。
    • 示例:slapadd -n 1 -l import.ldif
    • 选项:与slapcat相反,用于将 LDIF 文件中的数据导入到 LDAP 数据库。
  3. slapindex
    • 用途:重新生成 LDAP 数据库的索引。
    • 示例:slapindex -n 1
    • 选项:用于在修改索引配置后重新生成索引。
  4. slaptest
    • 用途:检查 LDAP 服务器配置文件的语法。
    • 示例:slaptest -f /etc/openldap/slapd.conf
    • 选项:验证配置文件的正确性。
2.2.3 其他命令
  1. ldapmodrdn
    • 用途:修改 LDAP 条目的相对区别名(RDN)。
    • 示例:ldapmodrdn -x -D "cn=admin,dc=example,dc=org" -W "cn=John Doe,dc=example,dc=org" "cn=Johnny Doe"
    • 选项:指定条目的旧 RDN 和新 RDN。
  2. ldif2ldbm
    • 用途:将 LDIF 文件转换为 LDBM 数据库格式(通常在旧版 OpenLDAP 中使用)。
    • 示例:ldif2ldbm -i input.ldif -o output.ldbm
    • 选项:指定输入和输出文件。
  3. ldbmcat
    • 用途:将 LDBM 数据库格式转换回 LDIF 文件。
    • 示例:ldbmcat -i input.ldbm -o output.ldif
    • 选项:指定输入和输出文件。
  4. ldapurl
    • 用途:构建和解析 LDAP URL。
    • 示例:ldapurl -h ldap://localhost -b "dc=example,dc=org" "(objectClass=*)" cn
    • 选项:指定 LDAP URL 和搜索参数。
2.2.4 辅助命令
  1. ldapaddent
    • 用途:从文件中读取条目并将它们添加到 LDAP 目录中。
    • 示例:ldapaddent -f /path/to/file
    • 选项:-f指定输入文件。
  2. ldif
    • 用途:处理 LDIF 文件的辅助工具。
    • 示例:ldif -m merge.ldif
    • 选项:用于合并、分割或验证 LDIF 文件。

三. phpldapadmin可视化页面操作LDAP

osixia/openLdap开源路径:phpldapadmin

docker安装

代码语言:javascript
代码运行次数:0
复制
docker pull osixia/phpldapadmin

指定端口路径启动

代码语言:javascript
代码运行次数:0
复制
docker run-p6543:80 \
   --name phpldapadmin \
   --envPHPLDAPADMIN_HTTPS=false \
   --envPHPLDAPADMIN_LDAP_HOSTS=192.168.1.47 \
   --volume /study/project/phpldapdamin/container:/container \
   --detach osixia/phpldapadmin:latest

说明

  • -p 6543:80:将容器的 80 端口映射到主机的 6543 端口。你可以通过http://localhost:6543访问 phpLDAPadmin。
  • --name phpldapadmin:指定容器的名称为phpldapadmin
  • --env PHPLDAPADMIN_HTTPS=false:禁用 HTTPS,使 phpLDAPadmin 通过 HTTP 访问。
  • --env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.47:设置 LDAP 服务器的主机地址。将192.168.1.47替换为你的 LDAP 服务器地址。
  • --detach:后台运行容器。

运行成功后访问 http://192.168.1.47:6543/输入DN和密码

如果是默认设置的就输入以下信息 Login DN:cn=admin,dc=example,dc=org Password:admin

这样子我们就可以通过web页面去操作ldap了

四. 参考文章

参考文章:https://zhuanlan.zhihu.com/p/678707699

官方文档:https://www.openldap.org/doc/admin24/index.html

osixia/openLdap开源路径:openLdap

官方网站:https://www.openldap.org/

docker下载地址:https://hub.docker.com/r/osixia/openldap/

LDAP简单介绍及使用:LDAP简单介绍及使用

docker 安装 OpenLDAP 及 LdapAdmin桌面版、页面版(osixia/openldap):docker 安装 OpenLDAP 及 LdapAdmin桌面版、页面版(osixia/openldap)

作者:神的孩子都在歌唱 本人博客:https://blog.csdn.net/weixin_46654114 转载说明:务必注明来源,附带本人博客连接。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 神的孩子都在歌唱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 简介
    • 1.1 什么是目录服务
    • 1.2 LDAP详细描述
      • 1.2.1 目录中存储的类型信息
      • 1.2.2 信息是如何排列的
  • 二. LDAP的安装和命令
    • 2.1 LDAP安装
    • 2.2 LDAP的命令行工具
      • 2.2.1 LDAP 操作命令
      • 2.2.2 数据库管理命令
      • 2.2.3 其他命令
      • 2.2.4 辅助命令
  • 三. phpldapadmin可视化页面操作LDAP
  • 四. 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档