LDAP 企业部署实战 - LDAP 基础服务安装

👌 2022-03-23 LDAP 企业部署实战 - LDAP 基础服务安装

FileInfo Filename - LDAP 企业部署实战 - LDAP 基础服务安装 Version - v1.0.2203(2022/03/25 ~ 2022/04/06) Author - nuo standuke Email - shadowdoker@gmail.com DescriptionKey - LDAP Enterprise Deployment Practice

⚠️ 注意:现有版本 openldap-servers-2.4.44-25.el7_9.x86_64 按照需要全程使用 CLI 操作配置,请勿直接修改 slapd.d 文件夹内的配置。目前网络上安装文档均为老版本,使用 ‘slapd.conf’ 进行配置,与新版本安装操作方式不一致「详见本文档 版本变化 部分」

[TOC]

简介

目前网络资源较少「真的很少、很老、很差」,建议大部分问题从官方文档寻找说明与解决方案。

Wikipedia

OpenLDAP 是轻型目录访问协议「Lightweight Directory Access Protocol,LDAP」的自由和开源的实现,在其 OpenLDAP 许可证下发行,并已经被包含在众多流行的 Linux 发行版中。 它主要包括下述 4 个部分:

  • slapd - 独立 LDAP 守护服务
  • slurpd - 独立的 LDAP 更新复制守护服务
  • 实现 LDAP 协议的库
  • 工具软件和示例客户端

版本说明

  • CentOS 7.9-2009 系统源版本
openldap-2.4.44-25.el7_9.x86_64
openldap-servers-2.4.44-25.el7_9.x86_64
openldap-clients-2.4.44-25.el7_9.x86_64
  • 最新官方版本「截止本文档发布日期」
OpenLDAP 2.6 (Released October 2021)
Functional enhancements:
slapd and lloadd
File-based logging, including log file management capabilities (ITS#9492)
Load Balancer enhancements
Read affinity (ITS#9598)
Additional balancing algorithms (ITS#9599)
  • 下一次大版本更新「官方都没想过,老老实实用 2.* 版本吧」
OpenLDAP 3.0 (TBD)
We're not thinking that far ahead right now.

⚠️ 版本变化

这是本文章比较重要的一点,由官网可得目前 openldap 配置以及改为动态配置文件,由命令方式去修改配置文件,并且直接生效。同时,官方在每个配置文件内开头都注明了不要修改配置文件,以及配置文件的 CRC 校验。「OpenLDAP 2.3 及其以后版本,使用 cn=config 作为后端配置文件」

⚠️ 不要手动修改配置,否则启动时 CRC 校验失败,导致 slapd.service 服务无法启动

官方说明 https://www.openldap.org/doc/admin24/guide.html#Configuring%20slapd

  • 官方说明文档
OpenLDAP 2.3 and later have transitioned to using a dynamic runtime configuration engine, slapd-config(5). slapd-config(5)
  • 现有配置文件的开头说明「自带 CRC 校验,所以不要去改文件」
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 7ee1beb6

官方说明地址

  • 官方 release 版本路线说明

https://www.openldap.org/software/roadmap.html

  • 官方源码下载地址

https://www.openldap.org/software/download/ https://www.openldap.org/software/download/OpenLDAP/openldap-release/

基础概念

OpenLDAP 1.0「released August 1998」发布近 25 年,部分配置概念还是有些跟不上时代,但是理解后也能满足当下的业务需求。「主要还是 LDAP 能对接的系统太多了,不然折腾到现在我也不想弄」

https://blog.csdn.net/liukuan73/article/details/78684710

  • 数据库组织架构

  • DIT = Directory Information Tree 目录信息树,整一个 LDAP 数据库就是一个目录信息树

  • Enrty = 条目,可以理解为一条数据一个用户或组织,是 LDAP 中一个基本的存储单元;也可以被看作是一个 DN 和一组属性的集合。一条 entry 可以包含多个 objectClass,例如 zhang3 可以存在于 “电话薄” 中,也可以同时存在于 “同学录” 中。

  • DN = Distinguished Name 全局唯一的标识名,每一个条目 Entry 都可通过 DN 来唯一确定

  • RDN = Relative Distinguished Name 区分名或者相对区别名

  • Base DN = 一条 Base DN 可以是 “dc=expwd,dc=com”,也可以是“dc=People,dc=expwd,dc=com”。执行 LDAP Search 时一般要指定 basedn,由于 LDAP 是树状数据结构,指定 BaseDN 后,搜索将从 BaseDN 开始

🌰 例

DN = uid=stan,ou=People,dc=expwd,dc=com RDN = uid=stan BaseDN = dc=expwd,dc=com Enrty = 条目「下方详解」

dn: uid=stan,ou=People,dc=expwd,dc=com
cn:: stan
gidnumber: 5001
homedirectory: /home/users/stan
loginshell: /bin/bash
mail: stan@expwd.com
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: shadowAccount
sn: stan
uid: stan
uidnumber: 2000
userpassword: {SSHA}tIUzvYvE7YWxRRKCE0jC53vxdIwAt96k
  • Schema = LDAP 元数据模型「Schema」,也就是上面 Entry 的模板,模板定义了需要哪些数据,必填项等,Schema 会定义 Enrty 有哪些 objectClass 组成。
  • objectClass = 对象类「objectClass」是 LDAP 内置的数据模型,比如我们有一种叫“电话薄”的objectClass,肯定会内置很多属性(attributes),如姓名(uid),身份证号(uidNumber),单位名称(gid),家庭地址(homeDirectory)等,同时,还有一种叫“同学录”的objectClass,具备“电话薄”里的一些attributes(如uid、homeDirectory),还会具有“电话薄”没有的attributes(如description等)。一个条目(Entry)必须包含一个对象类(objectClass)属性,且需要赋予至少一个值。每一个值将用作一条 LDAP 条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。
  • inetOrgPerson = 对象类 inetOrgPerson(Internet Organizational Person)

一个条目的属性通过 LDAP 元数据模型(Schema)中的对象类(objectClass)所定义,下面的表格列举了对象类 inetOrgPerson(Internet Organizational Person)中的一些必填属性和可选属性。

objectClass

https://www.cnblogs.com/lfdblog/p/9803276.html

LDAP中,一个条目必须包含一个 objectClass 属性,且需要赋予至少一个值。每一个值将用作一条 LDAP 条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。objectClass 有着严格的等级之分,最顶层是 top 和 alias。例如,organizationalPerson 这个 objectClass 就隶属于person,而 person 又隶属于 top。

文件

*.ldif = LDAP Data Interchange Format / LDAP 数据交换格式 「https://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format 」 *.schema = LDAP 用户模板 「https://www.openldap.org/doc/admin23/schema.html 」

节点「组织架构」

  • CN = Common Name
  • OU = Organizational Unit
  • DC = Domain Component

其他

OpenLDAP监听的端口:

默认监听端口:389(明文数据传输,适用于启用了 StartTLS 的 LDAP)= OpenLDAP 不加密 / OpenLDAP over TLS 加密监听端口:636(密文数据传输,适用于启用了 SSL/TLS 的 LDAP)= OpenLDAP + SSL

安装 OpenLDAP Server

初始化安装环境

卸载已有的 LDAP 环境

若前期已安装 LDAP 相关服务,建议首先备份导出 LDAP 数据后卸载 LDAP 程序

# 关闭系统服务
systemctl stop slapd
# 卸载软件包 ⚠️ 注意,不要卸载 系统的 openldap 包
yum remove compat-openldap openldap-clients openldap-servers
# 移除配置文件
rm -rf /var/lib/ldap/*
rm -rf /etc/openldap/slapd.d/*

置备操作系统环境

最小化安装的操作系统即可
建议配置完 DNS 以及主机和域名,方便接入域名系统

开始安装

使用 rpm 包安装

yum install openldap openldap-clients openldap-servers
  • openldap: 操作系统默认会安装此包,注意只能升级不能卸载。
  • openldap-clients: LDAP 的客户端,客户端必须要安装,内置 LDAP 操作的一些命令。
  • openldap-servers: LDAP 的服务端,服务端必须要安装,为 LDAP 的主程序,同时建议安装 openldap-clients 用于对服务端配置。

使用最新官方源码包安装

略,rpm 就已经够折腾的了

目录及配置文件介绍

涉及文件简介

  • /var/lib/ldap/ ldap 用户数据,所属用户所属组均为 ldap,故只有 ldap 用户才有读写权限。刚安装完时目录是空的
  • /etc/openldap openldap 的配置文件目录「所有 openldap 相关的配置都在此目录下,包括client 和 server 两者配置都这里」
  • /usr/sbin/slapd ldap 程序
  • /usr/share/openldap-servers/DB_CONFIG.example 模板 数据库配置文件
  • /usr/share/openldap-servers/slapd.ldif 模板 配置文件

每个 rpm 包涉及的配置文件如下

[root@ldap-client ~]# rpm -qc openldap-clients
【空】
[root@ldap-server ~]# rpm -qc openldap # 系统默认会安装此包
/etc/openldap/ldap.conf # 此文件为 openldap rpm 包的配置文件
/usr/lib/tmpfiles.d/openldap.conf

[root@ldap-server ~]# rpm -qc openldap-servers
/etc/openldap/check_password.conf
/etc/sysconfig/slapd
/usr/lib/tmpfiles.d/slapd.conf
# 部分文件详见下方「/etc/openldap 配置文件详解」部分

/etc/openldap 配置文件详解

[root@ldap-server openldap]# tree
.
├── certs # TLS 密钥文件夹 cat /etc/openldap/slapd.d/cn\=config.ldif 可见配置
│   ├── cert8.db
│   ├── key3.db
│   ├── password
│   └── secmod.db
├── check_password.conf # 创建用户密码时的密码规则,OpenLDAP pwdChecker「check_password.so」库配置
├── ldap.conf # 此文件为 openldap-client rpm 包的配置文件,里面会配置 /etc/openldap/certs 密钥文件夹地址
├── schema # OpenLDAP 的 schema 存放的地方,可以理解为模板
│   ├── collective.ldif
│   ├── collective.schema
│   ├── corba.ldif
│   ├── corba.schema
│   ├── core.ldif
│   ├── core.schema
│   ├── cosine.ldif
│   ├── cosine.schema
│   ├── duaconf.ldif
│   ├── duaconf.schema
│   ├── dyngroup.ldif
│   ├── dyngroup.schema
│   ├── inetorgperson.ldif
│   ├── inetorgperson.schema
│   ├── java.ldif
│   ├── java.schema
│   ├── misc.ldif
│   ├── misc.schema
│   ├── nis.ldif
│   ├── nis.schema
│   ├── openldap.ldif
│   ├── openldap.schema
│   ├── pmi.ldif
│   ├── pmi.schema
│   ├── ppolicy.ldif
│   └── ppolicy.schema
└── slapd.d # 安装完 server 端后默认的 server 配置文件,后续新增的模块会增加在这个目录下
    ├── cn=config # 核心配置文件,可以配置域名(olcSuffix),管理员账号(olcRootDN)等
    │   ├── cn=schema # LDAP 导入的模板文件夹,导入模板后才会出现在这里
    │   │   └── cn={0}core.ldif # LDAP 安装后默认会有 core 模块
    │   ├── cn=schema.ldif 
    │   ├── olcDatabase={0}config.ldif # 文件名和字段名都有前缀"olc"(OpenLDAP Configuration)
    │   ├── olcDatabase={-1}frontend.ldif
    │   ├── olcDatabase={1}monitor.ldif
    │   └── olcDatabase={2}hdb.ldif # 后端数据库配置文件
    └── cn=config.ldif

5 directories, 39 files

开始配置

第一步

直接启动 slapd 服务,是的,启动后再进行配置,也不要按照网上去拷贝数据库什么的,直接启动即可

# 启动 ldap
systemctl start slapd
# 开机使能 ldap
systemctl enable slapd
# 查看 ldap 服务状态
systemctl status slapd

开始进行配置

默认安装完 LDAP Server 后启动的是默认配置,依照官方说法,我们需要使用 ldapmodify 来修改默认配置来满足我们生产环境需求

  1. 建议首先修改 rootDN,rootDN 是 DN 的根,是后续一切的基础。
vim stan.ldif

dn: olcDatabase={2}hdb,cn=config # 数据库类型文件要按照自己的数据库版本修改
changetype: modify # 操作类型是修改
replace: olcRootDN # 操作目标为重置 RootDN
olcRootDN: cn=admin,dc=expwd,dc=com # 替换为自己的根域
-
replace: olcSuffix # 操作目标为重置 Suffix
olcSuffix: dc=expwd,dc=com # 替换为自己的根域

这边 olcDatabase={2}hdb 文件是 LDAP 数据库配置文件,不同发型版本用的数据库可能不同,这里需要修改 olcDatabase={2}hdb 为实际的文件,文件路径为 /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif ,这里实际文件可能是 bdb,也可能是 mdb,详细可见附录「关于 mdb hdb bdb 后端数据库」部分解释。

  1. 使用 ldapmodify 来配置文件生效
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f stan.ldif
  1. 同理给 RootDN 的 admin 用户重设密码

设置完密码后就可以通过 LDAP 管理软件使用 admin 的 dn 和密码登陆。 参考链接,文章内讲的比较详细,包括如何找到 RootDN 信息等。 https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server#changing-the-rootdn-password

vim stan-pwd.ldif

dn: olcDatabase={2}hdb,cn=config
#olcRootDN: cn=admin,dc=expwd,dc=com
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}AOvsPeLZYEpxBA8sdY2r9DSeZkuxlxxg
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f stan-pwd.ldif

注:其实只要把修改 RootDN 那一步的配置文件改成如下即可,一次性就能改完

vim stan.ldif

dn: olcDatabase={2}hdb,cn=config # 数据库类型文件要按照自己的数据库版本修改
changetype: modify # 操作类型是修改
replace: olcRootDN # 操作目标为重置 RootDN
olcRootDN: cn=admin,dc=expwd,dc=com # 替换为自己的根域
-
replace: olcSuffix # 操作目标为重置 Suffix
olcSuffix: dc=expwd,dc=com # 替换为自己的根域
-
replace: olcRootPW
olcRootPW: {SSHA}AOvsPeLZYEpxBA8sdY2r9DSeZkuxlxxg

到这一步建议安装先一下 phpldapadmin,也可以跳过后去再装,因为后期的命令行操作可以直观地在网页上看到目前 LDAP 的状态

导入自带 Schema

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

为什么要先导入这几个模块呢?因为下面的 memberOf 模块要用 🤪

初始化基础目录结构

vim stan-user.ldif

dn: dc=expwd,dc=com
objectClass: dcObject
objectClass: organization
o: expwd.com
dc: expwd

dn: ou=users,dc=expwd,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users

dn: ou=groups,dc=expwd,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
ldapadd -x -W -D "cn=admin,dc=expwd,dc=com" -f stan-user.ldif

导入完成后目录结构是这样的 截屏2022-03-30 23.32.00

安装完毕

🎉 至此,基础的 LDAP 服务已全部安装完毕,建议继续添加一些模块并且设计好整一个 LDAP 的目录结构,避免后期因为设计不合理的大规模迁移调整。

添加 memberOf 模块

目前有很多第三方应用、云平台的 LDAP 配置需要检查这个属性,memberOf 模块的作用是,当你建一个组的时候,把一些用户添加到这个组里去,它会自动给这些用户添加一个 memberOf 属性。

  • add-memberof.ldif
[root@ldap-server memberof]# cat add-memberof.ldif
# 开启 memberof 支持
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

# 新增用户支持 memberof 配置
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf
  • refint1.ldif
[root@ldap-server memberof]# cat refint1.ldif
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
  • refint2.ldif
[root@ldap-server memberof]# cat refint2.ldif
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner
  • 使用命令将模块导入 LDAP
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
  • 检查模块是否生效
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn

一些管理工具

安装 phpldapadmin

简介

phpldapadmin 是使用 php 语言开发的 web 端管理 ldap 的应用。 不同操作系统建议先看下官方安装方式后进行安装。 http://phpldapadmin.sourceforge.net/wiki/index.php/Download https://sourceforge.net/projects/phpldapadmin/files/

安装「CentOS 7 环境」

这里采用 httpd + php + phpldapadmin 的安装方案,当然也可以使用 nginx 作为 Web 容器。

yum install -y httpd
yum install -y epel-release # CentOS 7
yum install -y phpldapadmin
# yum install -y php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
# 不需要装 php,在安装 phpldapadmin 的时候会自行解决依赖

===============================================================================================
 Package                  架构               版本                       源                大小
===============================================================================================
正在安装:
 phpldapadmin             noarch             1.2.5-1.el7                epel             797 k
为依赖而安装:
 libzip                   x86_64             0.10.1-8.el7               base              48 k
 php                      x86_64             5.4.16-48.el7              base             1.4 M
 php-cli                  x86_64             5.4.16-48.el7              base             2.7 M
 php-common               x86_64             5.4.16-48.el7              base             565 k
 php-ldap                 x86_64             5.4.16-48.el7              base              53 k

事务概要
===============================================================================================
安装  1 软件包 (+5 依赖软件包)

需要修改的配置文件

[root@ldap-client ~]# rpm -qc phpldapadmin-1.2.5-1.el7.noarch
/etc/httpd/conf.d/phpldapadmin.conf
/etc/phpldapadmin/config.php
  • /etc/httpd/conf.d/phpldapadmin.conf
# cat /etc/httpd/conf.d/phpldapadmin.conf
#
#  Web-based tool for managing LDAP servers
#
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
 <IfModule mod_authz_core.c>
   # Apache 2.4
   Require local
   Require all granted # 加这一行
 </IfModule>
 <IfModule !mod_authz_core.c>
   # Apache 2.2
   Order Deny,Allow
   Deny from all
   Allow from 127.0.0.1
   Allow from ::1
 </IfModule>
</Directory>
  • /etc/phpldapadmin/config.php
# 其实不需要这么配置,只就是能使用
# 下方参数只是把登陆的用户名从 uid 改为使用 dn 方式登陆了

$servers->setValue('login','attr','dn');
//$servers->setValue('login','attr','uid');

把$servers->setValue('login','anon_bind',false);改成false,因为我们不想让人匿名访问;
把$servers->setValue('login','allowed_dns',array('cn=admin,dc=qiban,dc=com'));,我们只允许管理员访问,其他任何人不得访问。

启动

systemctl restart httpd

安装 Self Service Password

简介

Self Service Password 是一个 Web 应用,可以让用户自行更新、修改和重置 LDAP 中的用户密码。支持标准的 LDAPv3 目录服务,包括:OpenLDAP,Active Directory,OpenDS,ApacheDS等。 https://github.com/ltb-project/self-service-password https://self-service-password.readthedocs.io/en/latest/installation.html

安装「CentOS 7 环境」

  • 配置 yum 源
vi /etc/yum.repos.d/ltb-project.repo

[ltb-project-noarch]
name=LTB project packages (noarch)
baseurl=https://ltb-project.org/rpm/$releasever/noarch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LTB-project
  • 使用 yum 进行安装
# yum update # 可省略
rpm --import https://ltb-project.org/wiki/lib/RPM-GPG-KEY-LTB-project
yum install self-service-password

=======================================================================
 Package               架构   版本            源                  大小
=======================================================================
正在安装:
 self-service-password noarch 1.4.3-1.el7     ltb-project-noarch 2.3 M
为依赖而安装:
 libX11                x86_64 1.6.7-4.el7_9   updates            607 k
 libX11-common         noarch 1.6.7-4.el7_9   updates            164 k
 libXau                x86_64 1.0.8-2.1.el7   base                29 k
 libXpm                x86_64 3.5.12-1.el7    base                55 k
 libjpeg-turbo         x86_64 1.2.90-8.el7    base               135 k
 libxcb                x86_64 1.13-1.el7      base               214 k
 php-Smarty            noarch 3.1.33-1.el7    epel               238 k
 php-gd                x86_64 5.4.16-48.el7   base               128 k
 php-mbstring          x86_64 5.4.16-48.el7   base               506 k
 t1lib                 x86_64 5.1.2-14.el7    base               166 k

事务概要
=======================================================================
安装  1 软件包 (+10 依赖软件包)

修改需要的配置文件

rpm -qc self-service-password.noarch 0:1.4.3-1.el7
/etc/httpd/conf.d/self-service-password.conf
/usr/share/self-service-password/conf/config.inc.php
  1. /usr/share/self-service-password/conf/config.inc.php
# LDAP
$ldap_url = "ldaps://localhost:636";
$ldap_starttls = false;
$ldap_binddn = "cn=admin,dc=expwd,dc=com";
$ldap_bindpw = "12345678900";
$ldap_base = "dc=expwd,dc=com";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn"; # 此处配置要和上面 LDAP 登陆配置一致,我这边上面是 dn
$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";


## Mail # 必须要配置成功 Mail 才能访问到网页
## Mail
# LDAP mail attribute
$mail_attribute = "mail";
# Get mail address directly from LDAP (only first mail entry)
# and hide mail input field
# default = false
$mail_address_use_ldap = false;
# Who the email should come from
$mail_from = "admin@expwd.com";
$mail_from_name = "Self Service Password";
$mail_signature = "";
# Notify users anytime their password is changed
$notify_on_change = false;
# PHPMailer configuration (see https://github.com/PHPMailer/PHPMailer)
$mail_sendmailpath = '/usr/sbin/sendmail';
$mail_protocol = 'smtp';
$mail_smtp_debug = 0;
$mail_debug_format = 'error_log';
$mail_smtp_host = 'localhost';
$mail_smtp_auth = false;
$mail_smtp_user = 'admin@expwd.com';
$mail_smtp_pass = '12121212';
$mail_smtp_port = 25;
$mail_smtp_timeout = 30;
$mail_smtp_keepalive = false;
$mail_smtp_secure = 'tls';
$mail_smtp_autotls = true;
$mail_smtp_options = array();
$mail_contenttype = 'text/plain';
$mail_wordwrap = 0;
$mail_charset = 'utf-8';
$mail_priority = 3;
  1. /etc/httpd/conf.d/self-service-password.conf
无需修改

启动

必须要配置成功 Mail 才能访问到网页

systemctl start httpd

macOS 安装 ApacheDirectoryStudio

简介

Apache Directory Studio 是一个 LDAP 的工具平台,用来连接到任何 LDAP 服务器并进行管理和开发工作。 主要功能:LDAP浏览器、LDIF编辑器、嵌入式 ApacheDS、ACI编辑器。

macOS version 10.10 (Yosemite) or later. Java 11 or later, we recommend AdoptOpenJDK.

https://directory.apache.org/studio/ https://directory.apache.org/studio/downloads.html

安装

建议使用 brew 安装 temurin「jdk17」,如果已经在使用 Eclipse 的用户,直接加载 Eclipse 插件就可以了

brew install --cask temurin
brew install apache-directory-studio

之后就是图形化的一些操作了

ldapscripts 辅助脚本

https://github.com/martymac/ldapscripts

用于脚本快速创建 Unix 用户,看一眼就会用

LDAP TOOL BOX

https://ltb-project.org/download.html#self_service_password

附录

导入基本 scheme

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

关于 mdb hdb bdb 后端数据库

hdb 后端已取代 bdb 后端,同时两者很快也会弃用,取而代之的是新的 mdb 后端,原因是 Oracle 更改了许可,删除了 BDB 6 及更高版本与 OpenLDAP 软件的兼容性。

升级到 mdb - Upgrade-from-BDB-HDB-to-MDB

https://www.openldap.org/faq/data/cache/756.html

back-mdb is the "primary" storage database backend. This backend manages directory objects in an embedded database and is more fully featured than other backends. back-mdb is superior to the deprecated back-hdb and back-bdb backends.
back-bdb and back-hdb are deprecated backends based on BerkeleyDB.

https://www.openldap.org/doc/admin24/backends.html

The hdb backend has superseded the bdb backend, and both will soon be deprecated in favor of the new mdb backend. See below.

关于 scheme 与操作系统用户之间的映射

可搜索「RFC4519 rfc2307bis.ldif」相关标准解释,相关标准已在操作系统中默认做好用户与组的映射关系匹配。

相关常用操作

由于此篇文章已经很长了,操作及使用相关的命令后期再写文章细说

slapd

ldapmodify

ldapadd

ldapsearch

参考资料

「Openldap 安装使用」 https://www.cnblogs.com/fan-yi/p/14915041.html 「我花了一个五一终于搞懂了OpenLDAP」 https://segmentfault.com/a/1190000014683418 「内部ldap实践」这篇文章里面手动修改配置文件了,不可取,只做参考 https://1661691223.github.io/2019/11/15/ldap-train/ 「OpenLDAP安装与配置」这篇文章里面手动修改配置文件了,不可取,只做参考 https://www.cnblogs.com/js1314/p/12887893.html 「How To Change Account Passwords on an OpenLDAP Server」 https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server#changing-the-rootdn-password 「LDAP(一)之概念原理介绍」 https://www.jianshu.com/p/27ab7a5d56a4 「Centos7 搭建openldap完整详细教程(真实可用)」 https://www.cnblogs.com/jiligalaer/p/13300371.html https://blog.csdn.net/weixin_41004350/article/details/89521170 https://blog.csdn.net/weixin_41004350?type=blog 「如何在OpenLDAP启用MemberOf」 https://blog.csdn.net/qq_23191379/article/details/106867730 「LDAP添加 memberOf 模块」 https://blog.csdn.net/u011607971/article/details/119037796 https://cloud.tencent.com/developer/article/1349459 「Server:server:tls」 http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls 「Lightweight Directory Access Protocol (LDAP):Schema for User Applications」里面详细描述了一个 rfc4519 标准 RDN 各个字段的含义 https://www.ietf.org/rfc/rfc4519.txt 「LDAP学习笔记总结」 https://www.cnblogs.com/kevingrace/p/5773974.html 「# Chapter 6. LDAP Configuration」 https://www.zytrax.com/books/ldap/ch6/#list 「# Chapter 6.1.1: OpenLDAP using OLC (cn=config)」 https://www.zytrax.com/books/ldap/ch6/slapd-config.html#use