基于 LDAP 轻量级目录协议的用户管理方式

LDAP 协议入门

  LDAP 是一种通讯协议,支持 TCP/IP 。在这套标准下,有多种的实现方式,比如 OpenLDAP、微软大佬的 AD (Active Directory)。拿 AD 来举例子,LDAP 有点像是数据库一样,但是又不完全是,读起来非常快、写起来慢一点。同时它也有 Server 端和 Client 端,其中 Server 端用来存放资源,Client 端用来操作增删改查等操作,即 AD = LDAP服务器 + LDAP 应用。

  与数据库不同的地方是,数据库是按照记录一条条存放在表中,而 LDAP 数据库是树结构的,数据存储在叶子节点上。下面举个例子来说明一下树结构上的一条记录是如何定义的。

# 描述:苹果是在树的东边那个分叉上的靠西边那个分叉的再靠北边的分叉上的半红半绿的。(dc=tree)
分叉 (ou=bei,ou=xi,ou=dong)
苹果 (cn=redApple)

# 综合起来描述为
dn:cn=redApple,ou=bei,ou=xi,ou=dong,dc=tree

一个完整的 LDAP 树形结构数据库应包含以下几个因素:

dn: 一条记录的详细位置
dc: 一条记录所属的区域(即哪一棵树)
ou: 一条记录所属的组织(即哪一个分支)
cn/uid: 一条记录的名字/ID (即哪一个苹果名字)
LDAP 目录树的最顶部就是根,也就是所谓的"基准 DN"
小提示

为什么要用 LDAP 目录树来存储数据,用 MySQL 不行吗?
  用树形结构存储数据,查询效率更高。在某些特定的场景下,使用树形数据库更理想。比如,需要存储大量的数据,而且数据不是经常更改的,需要很快速的查找。
  把 LDAP 与传统的数据库相比,LDAP 除了快速查找的特点,它还有很多的运用场景,比如域验证等。

如何操作 LDAP 服务器?

  LDAP 服务器的客户端操作方式有很多种,常见的有 JDBC 、 JNDI 、 phpLDAPadmin 等。由于本人不怎么用 Java,所以首选 phpLDAPadmin 来进行实战操作。

采用 Docker 快速部署

  其实在 Ubuntu 上安装 OpenLDAP 和 phpLDAPadmin 两个软件是比较简单的,使用 sudo apt install openldap phpldapadmin -y 即可完成,但是配置起来就有点小麻烦了,不大适合对 LDAP 没有深入了解的人使用,最简单的方式就是使用别人已经封装好的 Docker 镜像进行快速部署。docker-compose.yml 文件内容如下:

version: '2'

services:
    phpldapadmin:
      image: osixia/phpldapadmin
      environment:
        PHPLDAPADMIN_LDAP_HOSTS: openldap
      links:
        - openldap
      ports:
        - 6443:443
      restart: always
    openldap:
      image: osixia/openldap
      environment:
        LDAP_ORGANISATION: "example"
        LDAP_DOMAIN: example.org
        LDAP_ADMIN_PASSWORD: admin
      volumes:
        - ./data/slapd/database:/var/lib/ldap
        - ./data/slapd/config:/etc/ldap/slapd.d
      restart: always
      ports:
        - 389:389
        - 689:689

访问

  安装完成之后使用 https://localhost:6443 即可访问 phpLDAPadmin ,Login DN 为 cn=admin,dc=example,dc=org,Password 为 admin

参考资料

版权声明: 如无特别声明,本文版权归 仲儿的自留地 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:《 OpenLDAP 安装初体验 》

本文链接:https://lisz.me/tech/docker/openldap.html

本文最后一次更新为 天前,文章中的某些内容可能已过时!