一、知识点

1.什么是OpenLDAP?
  OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。
2.简单区分LDAP、AD、OA作用?
  LDAP用来登录linux机器或者应用管理网站;AD域用来登录工作的电脑;OA自研的账号系统用来登录应用管理网站。

服务

简称

管理方向

节点类型

常见应用环境

安装软件

适配系统

LADP

LADP账号

机器登录/应用登录

主服务 + 客户端

Linux系统下

OpenLDAP

Linux/window

AD

AD域账号

机器登录/应用登录

主服务 + 客户端

window系统下

AD

Linux/window

OA

OA账号

针对应用网站登录(例如: 管理网站,办公网站等等)

主服务

根据开发语种选择linux或window

自研程序

Linux/window

二、部署环境

(注:如果是新装系统记得把selinux以及firewalld关闭)

openldap创建组 openldap 编译安装_sql

三、安装包

(注:用的都是当前最新版)
1.OpenLDAP-2.6.1.tgz【r7q1】
2.OpenSSL-3.0.2.tar.gz【r7q1】

四、配置环境

1.安装IPC/Cmd.pm模块(openssl-3.0编译需要)

[root@node-4 ~]#  yum install -y perl-CPAN
[root@node-4 ~]#  perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> install IPC/Cmd.pm
cpan[1]> quit
Terminal does not support GetHistory.
Lockfile removed.
[root@node-4 ~]#

2.安装openssl-3.0.2

[root@node-4 ~]# tar -xvf openssl-3.0.2.tar.gz
[root@node-4 soft]# ls
openldap  openldap-2.6.1.tgz  openssl-3.0.2  openssl-3.0.2.tar.gz
[root@node-4 soft]# cd openssl-3.0.2
[root@node-4 openssl-3.0.2]# ./config --prefix=/usr/local/openssl
[root@node-4 openssl-3.0.2]# make 
[root@node-4 openssl-3.0.2]# make install
[root@node-4 openssl-3.0.2]# mv /usr/bin/openssl /usr/bin/openssl.old
[root@node-4 openssl-3.0.2]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
[root@node-4 openssl-3.0.2]# ln -s /usr/local/openssl/include/openssl /usr/include/openssl
[root@node-4 openssl-3.0.2]# echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf
[root@node-4 openssl-3.0.2]# ldconfig -v 
#检车是否缺少库(如果不缺少可以省略)
#可以看到有两个so文件找不到
[root@node-4 openssl-3.0.2]# ldd /usr/local/openssl/bin/openssl
        linux-vdso.so.1 =>  (0x00007ffdf47c8000)
        libssl.so.3 => not found
        libcrypto.so.3 => not found
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f6015e42000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6015c26000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6015857000)
        /lib64/ld-linux-x86-64.so.2 (0x00005571e39e5000)
#刚刚新安装的路径里有,做成软链接即可
[root@node-4 openssl-3.0.2]# ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib/libssl.so.3
[root@node-4 openssl-3.0.2]# ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3
[root@node-4 openssl-3.0.2]# openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

五、源码编译OpenLDAP

1.yum下载依赖

yum install  make gcc mysql-devel unixODBC-devel groff -y

2.源码编译
(注:博主使用的外部数据库mysql,所以源码编译时取消了默认自带库)

[root@node-4 soft]# tar -xvf  openldap-2.6.1.tgz 
[root@node-4 soft]# mv openldap-2.6.1  openldap
[root@node-4 soft]# cd openldap
[root@node-4 openldap]# ./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 来编译您的代码"报错
[root@node-4 openldap]# 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) {
        int i;
        for (i = 0; i < array_size; ++i) {
                if(strcmp(array[i], value) == 0) {
                        return i;
                }
        }
        return -1;
}
...
:wq
[root@node-4 openldap]# make depend
[root@node-4 openldap]# make
[root@node-4 openldap]# make install

2.Mysql配置
1)创建相关用户以及数据库(注:我用的另一台服务器的Mysql-5.7.36)

#安装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;

2)安装odbc

[root@node-4 ~]# yum install unixODBC mysql-connector-odbc
[root@node-4 ~]# vim /etc/odbc.ini
#添加如下内容
[ldap]
Description = LdapToMysql
Driver = MySQL
Database = ldap
Server = 192.168.200.152
User = ldap
Password = Ldap@123
Port = 3307
:wq
#链接测试
[root@node-4 ~]# isql -v ldap
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-----------------------------------------------------------------+
| Database                                                        |
+-----------------------------------------------------------------+
| information_schema                                              |
| ldap                                                            |
+-----------------------------------------------------------------+
SQLRowCount returns 2
2 rows fet
[root@node-4 ~]#

3)导入sql文件

#LDAP虽然可以使用除BDB之外的数据库,但必须要使用它定义的表结构。
#对应的表结构在/srv/soft/openldap/servers/slapd/back-sql/rdbms_depend/目录下
#该目录下有多种数据库的表结构,包括MySQL、Oracle和PGSQL等,进入mysql目录下,有如下几个sql文件
[root@node-4 soft]# cd openldap/servers/slapd/back-sql/rdbms_depend/mysql/
[root@node-4 mysql]# ll
-rw-r--r-- 1 1001 1001 1399 1月  20 02:32 backsql_create.sql	\\是基础的表结构
-rw-r--r-- 1 1001 1001  162 1月  20 02:32 backsql_drop.sql
-rw-r--r-- 1 1001 1001 1008 1月  20 02:32 slapd.conf
-rw-r--r-- 1 1001 1001 1376 1月  20 02:32 testdb_create.sql		\\是测试的表结构,包含几个像person表之类的表结构
-rw-r--r-- 1 1001 1001 2697 1月  20 02:32 testdb_data.sql		\\是测试表中的数据
-rw-r--r-- 1 1001 1001  159 1月  20 02:32 testdb_drop.sql
-rw-r--r-- 1 1001 1001 8336 1月  20 02:32 testdb_metadata.sql	\\是基础表中的数据
#由于我的数据库在152上所以需要把sql文件传输过去
[root@node-4 mysql]# scp -P6122 {backsql_create.sql,testdb_create.sql,testdb_data.sql,testdb_metadata.sql} root@192.168.200.152:/srv/soft/sql/
root@192.168.200.152's password: 
backsql_create.sql                                                                100% 1399     1.3MB/s   00:00    
testdb_create.sql                                                                 100% 1376     1.7MB/s   00:00    
testdb_data.sql                                                                   100% 2697     3.2MB/s   00:00    
testdb_metadata.sql                                                               100% 8336     7.5MB/s   00:00 
#在152数据库执行
mysql> use ldap
mysql> source /srv/soft/sql/backsql_create.sql
mysql> source /srv/soft/sql/testdb_create.sql
mysql> source /srv/soft/sql/testdb_data.sql
mysql> source /srv/soft/sql/testdb_metadata.sql
mysql> show tables;
mysql> quit

3.LDAP配置
1)首先生成自己的LDAP密码

[root@node-4 mysql]# slappasswd -s Csdn@123
#输入密码之后它会返回给一个加密的密码
{SSHA}OL1linSXp6hETIj6qBU6ON29bllgKZ8a

2)修改sladp.conf配置文件

[root@node-4 mysql]# vim /etc/openldap/slapd.conf
 #在第5行下面添加如下内容
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/collective.schema

moduleload      back_sql
...
database sql	#修改第数据类型
#这里最好设置为example,因为后面要用ldap的数据库数据,如果这里使用别的值,那么对应的要把数据库中的所有dn都改掉
suffix "dc=example,dc=com"
rootdn "cn=root,dc=example,dc=com"
#rootpw的值,就是之前获取到的加密密码
rootpw {SSHA}XDEtT6s3MTzrSbHeJl7OlRoqk0w1By1X
#注释掉以下俩行的内容
#directory /var/openldap-data
#index objectClass eq
#在第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 (?,?,?,?)"
:wq
[root@node-4 mysql]# cd /etc/openldap/
[root@node-4 openldap]# rm -rf slapd.d/*		\\清空默认配置
[root@node-4 openldap]# slaptest -f slapd.conf -F slapd.d/		\\生成新配置
[root@node-4 openldap]# chown ldap. slapd.d/ -R		\\赋予权限
[root@node-4 openldap]#

3)测试OpenLDAP与MySQL连接性

[root@node-4 openldap]# cd /srv/soft/openldap/servers/slapd/
[root@node-4 slapd]# ./slapd -d 1
#启动后注意观察报错,如果出现如下的状态,则表示OK:
<==backsql_load_schema_map()
==>backsql_free_db_conn()
==>backsql_close_db_handle(0x1602840)
<==backsql_close_db_handle(0x1602840)
<==backsql_free_db_conn()
<==backsql_db_open(): test succeeded, schema map loaded
#这个时候,打开另外一个窗口,执行
[root@node-4 mysql]# ldapsearch -x -D cn=root,dc=example,dc=com -w Csdn@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

# numResponses: 8
# numEntries: 6
# numReferences: 1

(注:回到slapd启动的窗口ctrl + c结束运行 )

4.)后台运行LDAP服务

[root@node-4 slapd]# ./slapd -d 5 -h 'ldap:/// ldapi:///' -f /etc/openldap/slapd.conf &
[root@node-4 slapd]# netstat -ntlupa |grep slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      27514/./slapd       
tcp6       0      0 :::389                  :::*                    LISTEN      27514/./slapd       
[root@node-4 slapd]#

六、安装和配置LDAP管理工具PHPldapadmin

1)安装依赖和phpldapadmin

yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin

2)修改配置

[root@node-4 slapd]# vim /etc/phpldapadmin/config.php
#397行取消注释,398行添加注释
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
:wq
[root@node-4 slapd]# vim /etc/httpd/conf.d/phpldapadmin.conf
<IfModule mod_authz_core.c>
	# Apache 2.4
	Require local
	#添加一行内容,指定可访问的ip段
	Require ip 192.168.200.154
</IfModule>
:wq

3)启动并设置开机自启

systemctl enable --now httpd

4)账户密码

账号:cn=root,dc=example,dc=com

密码:Csdn@123

平台:http://localhost:80/phpldapadmin/

openldap创建组 openldap 编译安装_openldap创建组_02


openldap创建组 openldap 编译安装_sql_03


openldap创建组 openldap 编译安装_sql_04


5)查看其它账户

#用户名密码可以在数据库ldap的表persons中查找。
mysql> select * from ldap.persons;
+----+------------+-------------+----------+
| id | name       | surname     | password |
+----+------------+-------------+----------+
|  1 | Mitya      | Kovalev     | mit      |
|  2 | Torvlobnor | Puzdoy      | NULL     |
|  3 | Akakiy     | Zinberstein | NULL     |
+----+------------+-------------+----------+
3 rows in set (0.00 sec)

到此OpenLDAP+MySQL+PhpLdapAdmin搭建完毕,使用方法看大家需要后期推出!

七、结束语

  感谢大家的支持与热爱,喜欢博主文章的可以点点赞关注一波,后期会不定期为大家带来不同程度的服务搭建及部署。