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
- 下载安装依赖
| $ yum install make gcc mysql-devel unixODBC-devel groff mariadb-server -y
|
- 下载安装包并编译安装
| $ 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
- 创建相关用户以及数据库
| $ vim /etc/my.cnf
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
|
- 添加 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)
|
- 回到 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
|
- 导入 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 \\是基础表中的数据
|
- 数据库在 140 上,需要把 sql 文件传输过去
| $ scp -r {backsql_create.sql,testdb_create.sql,testdb_data.sql,testdb_metadata.sql} admin@188.188.4.140:/home/admin/
|
| #在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
- 生成管理员的 LDAP 密码
| $ slappasswd -s Abc@123
{SSHA}zX5TIoMC1GFRcxpfbww89h/iUvpmWnfE
|
- 修改
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
|
- 初始化配置
| $ cd /etc/openldap/
$ rm -rf slapd.d/*
$ slaptest -uf slapd.conf -F slapd.d/
$ chown ldap. slapd.d/ -R
|
- 测试 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
|
- 后台运行 LDAP 服务
| $ /opt/openldap/servers/slapd/slapd -d 5 -h 'ldap:/// ldapi:///' -f /etc/openldap/slapd.conf &
|
六. 安装 PhpLDAPAdmin
- 安装 Apache 和 PHP
| $ yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
|
- 安装 phpldapadmin
| $ yum -y install epel-release
$ yum --enablerepo=epel -y install phpldapadmin
|
- 修改配置文件
| $ 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>
|
- 启动并设置开机自启
| $ systemctl enable --now httpd
|
-
浏览器打开测试 http://openldap-ip/phpldapadmin
-
账号:cn=Manager,dc=example,dc=com
- 密码:Abc@123