Skip to content

Src Install OpenLDAP

编译安装 OpenLDAP

一. 安装说明

安装openldap后,会有三个命令用于修改配置文件,分别为ldapadd,ldapmodify,ldapdelete,顾名思义就是添加,修改和删除。而需要修改或增加配置时,则需要先写一个ldif后缀的配置文件,然后通过命令将写的配置更新到slapd.d目录下的配置文件中去,完整的配置过程如下

网上的部署方法大多数是直接 Yum 安装,版本都不可控,教程虽正确可用,但版本的差异点会导致配置后无法使用;

注:此演示过程是分为 MySQL 服务器和 OpenLDAP 服务器的

二. 安装 OpenSSL

默认系统已自带了 OpenSSL,但新版本的 OpenLDAP 需要支持更高版本的 OpenSSL

# 默认版本是提示版本过低,无法编译OpenLDAP
$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

# 安装IPC/cmd.pm模块,openssl-3.0编译需要
$ yum install perl-IPC-Cmd perl-Data-Dumper perl-Test-Taint
$ tar -xf openssl-3.0.3.tar.gz && cd openssl-3.0.3

# 编译并安装
$ ./config
$ make && make install
# 编译安装完后,检查是否缺少库
$ ldd /usr/local/bin/openssl 
        linux-vdso.so.1 =>  (0x00007ffeca3f7000)
        libssl.so.3 => not found
        libcrypto.so.3 => not found
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f3f1fe9c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3f1fc80000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3f1f8b3000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3f200a0000)

# 将安装的库引入
$ echo "/usr/local/lib64/" > /etc/ld.so.conf.d/openssl3.0.3.conf
$ ldconfig -v

# 创建备份并链接新版本
$ mkdir -p /usr/bakup/usr/bin
$ mv /usr/bin/openssl /usr/bakup/usr/bin/
$ ln -s /usr/local/bin/openssl /usr/bin/openssl

# 再次检查版本
$ openssl version

三. 安装 OpenLDAP

  1. 下载安装依赖
$ yum install make gcc mysql-devel unixODBC-devel groff mariadb-server -y
  1. 下载安装包并编译安装
$ tar -xf openldap-2.6.2.tgz && cd openldap-2.6.2

$ ./configure \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--datadir=/usr/share \
--localstatedir=/var \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--enable-sql --disable-bdb \
--disable-ndb --disable-hdb

注意:make 前需要修改一下编译模式,解决"for.c:3:2: 附注:使用 -std=c99 或 -std=gnu99 来编译您的代码"报错

$ vim servers/slapd/back-sql/add.c
...
static int indexOf(const char *array[], int array_size, const char * value) {
        for (int i = 0; i < array_size; ++i) {
                if(strcmp(array[i], value) == 0) {
                        return i;
                }
        }
        return -1;
}

static int indexOf(const char *array[], int array_size, const char * value) {
        # 增加项,改for的设置
        int i;
        for (i = 0; i < array_size; ++i) {
                if(strcmp(array[i], value) == 0) {
                        return i;
                }
        }
        return -1;
}

$ make depend
$ make && make install

四. 配置 MySQL

此为另一台服务器 188.188.4.140 的 MySQL-5.7.36

  1. 创建相关用户以及数据库
1
2
3
4
5
6
$ vim /etc/my.cnf
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
  1. 添加 ldap 用户,设置密码,添加权限给 ldap 用户并新建数据库 ldap
#安装mysql创建ldap库表
#添加ldap用户,设置密码为ldap,添加权限给ldap用户并新建数据库ldap:
mysql> create database ldap character set utf8mb4; 
mysql> CREATE USER 'ldap'@'%' IDENTIFIED BY 'Ldap@123';
mysql> GRANT ALL PRIVILEGES ON ldap.* TO 'ldap'@'%';
mysql> CREATE USER 'ldap'@'localhost' IDENTIFIED BY 'Ldap@123';
mysql> GRANT ALL PRIVILEGES ON ldap.* TO 'ldap'@'localhost';

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ldap               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
  1. 回到 OpenLDAP 服务器进行安装 odbc
$ yum install unixODBC mysql-connector-odbc
$ vim /etc/odbc.ini
[ldap]
Description = LdapToMysql
Driver = MySQL
Database = ldap
Server = 188.188.4.140
User = ldap
Password = Ldap@123
Port = 3306

$ isql -v ldap
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-----------------------------------------------------------------+
| Database                                                        |
+-----------------------------------------------------------------+
| information_schema                                              |
| ldap                                                            |
+-----------------------------------------------------------------+
SQLRowCount returns 2
2 rows fetched
  1. 导入 sql 文件

LDAP 虽然可以使用除 BDB 之外的数据库,但必须要使用它定义的表结构。 对应的表结构在 openldap/servers/slapd/back-sql/rdbms_depend/目录下 该目录下有多种数据库的表结构,包括MySQL、Oracle和PGSQL等,进入mysql目录下,有如下几个sql文件

$ cd openldap/servers/slapd/back-sql/rdbms_depend/mysql/
$ ll
total 36
-rw-r--r-- 1 ldapuser1 ldapgroup1 1399 May  4 22:55 backsql_create.sql      \\是基础的表结构
-rw-r--r-- 1 ldapuser1 ldapgroup1  162 May  4 22:55 backsql_drop.sql
-rw-r--r-- 1 ldapuser1 ldapgroup1 1008 May  4 22:55 slapd.conf
-rw-r--r-- 1 ldapuser1 ldapgroup1 1376 May  4 22:55 testdb_create.sql       \\是测试的表结构,包含几个像person表之类的表结构
-rw-r--r-- 1 ldapuser1 ldapgroup1 2697 May  4 22:55 testdb_data.sql         \\是测试表中的数据
-rw-r--r-- 1 ldapuser1 ldapgroup1  159 May  4 22:55 testdb_drop.sql
-rw-r--r-- 1 ldapuser1 ldapgroup1 8336 May  4 22:55 testdb_metadata.sql     \\是基础表中的数据
  1. 数据库在 140 上,需要把 sql 文件传输过去
$ scp -r {backsql_create.sql,testdb_create.sql,testdb_data.sql,testdb_metadata.sql} admin@188.188.4.140:/home/admin/
1
2
3
4
5
6
7
8
#140数据库执行
mysql> use ldap;
mysql> source /home/admin/backsql_create.sql    
mysql> source /home/admin/testdb_create.sql
mysql> source /home/admin/testdb_data.sql
mysql> source /home/admin/testdb_metadata.sql
mysql> show tables;
mysql> quit

五. 配置 LDAP

  1. 生成管理员的 LDAP 密码
$ slappasswd -s Abc@123
{SSHA}zX5TIoMC1GFRcxpfbww89h/iUvpmWnfE
  1. 修改 sladp.conf 配置文件
# config database definitions
#######################################################################
database config
# Uncomment the rootpw line to allow binding as the cn=config
# rootdn so that temporary modifications to the configuration can be made
# while slapd is running. They will not persist across a restart.
# rootpw secret

#######################################################################
# MDB database definitions
#######################################################################
# 修改数据类型
database        sql
maxsize                1073741824
# 此处设置成example,因后面ldap数据为此值,换值需要将数据库中所有进行替换
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          {SSHA}mqxgAKNxxbXkEWX8k/Mla5uUmGEzGK7G
# 在rootpw下添加如下内容
dbname ldap
dbuser ldap
dbpasswd Ldap@123
has_ldapinfo_dn_ru no
subtree_cond "ldap_entries.dn LIKE CONCAT('%',?)"
insentry_stmt "INSERT INTO ldap_entries (dn,oc_map_id,parent,keyval) VALUES (?,?,?,?)"
# 注释掉以下俩行的内容
#directory /var/openldap-data
#index objectClass eq
  1. 初始化配置
1
2
3
4
$ cd /etc/openldap/
$ rm -rf slapd.d/*
$ slaptest -uf slapd.conf -F slapd.d/
$ chown ldap. slapd.d/ -R
  1. 测试 OpenLDAP 与 MySQL 连接性
$ cd /opt/openldap/servers/slapd/

# 启动后如下结果即表示成功
$ ./slapd -d 1
...
<==backsql_db_open(): test succeeded, schema map loaded

$ ldapsearch -x -D cn=Manager,dc=example,dc=com -w Abc@123 -s sub -b "dc=example,dc=com" "(objectClass=*)"
#如果获得如下的返回结果,则表示正常:

# search reference
ref: ldap://localhost:9012/dc=example,dc=com??sub

# search result
search: 2
result: 0 Success
  1. 后台运行 LDAP 服务
$ /opt/openldap/servers/slapd/slapd -d 5 -h 'ldap:/// ldapi:///' -f /etc/openldap/slapd.conf &

六. 安装 PhpLDAPAdmin

  1. 安装 Apache 和 PHP
$ yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
  1. 安装 phpldapadmin
$ yum -y install epel-release
$ yum --enablerepo=epel -y install phpldapadmin
  1. 修改配置文件
$ vim /etc/phpldapadmin/config.php
#397行取消注释,398行添加注释
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');

$ vim /etc/httpd/conf.d/phpldapadmin.conf
// 修改配置
<IfModule mod_authz_core.c>
# Apache 2.4
# 注释掉 Require local
Require all granted
</IfModule>
  1. 启动并设置开机自启
$ systemctl enable --now httpd
  1. 浏览器打开测试 http://openldap-ip/phpldapadmin

  2. 账号:cn=Manager,dc=example,dc=com

  3. 密码:Abc@123