unvdb开启ldap认证方式

概述

unvdb使用LDAP认证,简单说就是将用户名和密码存储在LDAP服务器上,unvdb数据库必须有相同的用户(用户名称相同,密码可以不同),当数据库客户端登录数据库时,数据库服务器不使用本地的密码校验机制而是去请求LDAP服务器验证用户名密码是否正确,正确则登录成功,失败则登录失败。

LDAP是运行于unvdb数据库之外的独立的服务,可以与unvdb数据库运行于同一主机上,也可以单独运行于其他地方,unvdb通过网络访问LDAP服务器。

搭建LDAP服务

使用docker搭建LDAP服务

由于docker源不可用的问题,我这里直接使用下载好的镜像

导入镜像

docker load -i openldap-x86_64.tar
docker load -i phpldapadmin-x86_64.tar

[root@x98 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
phpldapadmin        x86_64              dbb580facde3        3 years ago         309MB
openldap            x86_64              31d1d6e16394        3 years ago         257MB

导入完毕后创建容器

创建openldap容器
docker run \
    -d \
    -p 389:389 \
    -p 636:636 \
    -v /data/openldap/local:/usr/local/ldap \
    -v /data/openldap/lib:/var/lib/ldap \
    -v /data/openldap/slapd.d:/etc/ldap/slapd.d \
    --env LDAP_ORGANISATION="Manager" \
    --env LDAP_DOMAIN="example.com" \
    --env LDAP_ADMIN_PASSWORD="123456" \
    --name openldap \
    --hostname openldap-host\
    --network bridge \
    openldap:x86_64

#p 389:389 TCP/IP访问端口 
#p 636:636  SSL连接端口
#name openldap  容器名称为openldap  
#network bridge 连接默认的bridge网络 
#hostname openldap-host 设置容器主机名称为 openldap-host 
#env LDAP_ORGANISATION=“Manager” 配置LDAP组织名称 
#env LDAP_DOMAIN=“example.com” 配置LDAP域名 
#env LDAP_ADMIN_PASSWORD=“123456” 配置LDAP密码
docker run \
    -p 10001:80 \
    --privileged \
    --name phpldapadmin \
    --env PHPLDAPADMIN_HTTPS=false \
    --env PHPLDAPADMIN_LDAP_HOSTS=192.168.4.98  \
    --detach phpldapadmin:x86_64
 
#privileged 特权模式启动(使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。) 
#env PHPLDAPADMIN_HTTPS=false 禁用HTTPS 
#env PHPLDAPADMIN_LDAP_HOSTS =192.168.0.160 安装和运行docker的电脑IP地址,这里需要修改为你的IP

现在ldap和phpladpadmin已经运行起来了,查看运行情况

 docker ps -a
 CONTAINER ID        IMAGE                 COMMAND                 CREATED             STATUS              PORTS                                        NAMES
277c8f7de6b8        phpldapadmin:x86_64   "/container/tool/run"   21 minutes ago      Up 21 minutes       443/tcp, 0.0.0.0:10001->80/tcp               phpldapadmin
060d8fa3a696        openldap:x86_64       "/container/tool/run"   21 minutes ago      Up 21 minutes       0.0.0.0:389->389/tcp, 0.0.0.0:636->636/tcp   openldap

在浏览器中输入 http://192.168.4.98:10001

可以看到以下内容

1

配置LDAP

登录LDAP管理系统,依次创建管理组织->用户组->用户:

2

3

4

5

6

7

8

9

10

11

12

到这里就以经配置完毕了,如果你想多增加几个用户,在ou=users 下继续新增Generic: User Account。

配置unvdb

vim ../data/ud_hba.conf

host    all        all            0.0.0.0/0       ldap ldapserver=192.168.44.98 ldapport=389 ldapbasedn="dc=example,dc=com" ldapbinddn="cn=admin,dc=example,dc=com" ldapbindpasswd=123456

systemctl restart unvdb

验证登录

#我之前设置密码的是1
[root@x98 ~]# ud_sql -U unvdb -h 192.168.4.98 -p 5679 
Password for user unvdb: 输入之前设置的密码
ud_sql (24.2)
Type "help" for help.

unvdb=# unvdb=# alter user unvdb password '123';
ALTER ROLE
unvdb=# \q

#使用修改后的123密码测试登录
[root@x98 ~]# ud_sql -U unvdb -h 192.168.4.98 -p 5679 
Password for user unvdb: 
ud_sql: error: connection to server at "192.168.4.98", port 5679 failed: FATAL:  LDAP authentication failed for user "unvdb"
#登录失败
#使用原始密码测试登录
[root@x98 ~]# ud_sql -U unvdb -h 192.168.4.98 -p 5679
Password for user unvdb:
ud_sql (24.2)
Type "help" for help.

unvdb=#