searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

TELEDBX-LDAP认证

2024-09-26 09:27:22
7
0

一、背景

LDAP介绍

  • LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现。
  • LDAP的信息是以树状的层次结构来存储数据,最顶层即根部称作“Root”。在根目录的下面有很多的文件和目录,为了把这些大量的数据从逻辑上分开,LDAP像其它的目录服务协议一样使用OU(Organization Unit,组织单元),可以用来表示公司内部机构,如部门等。同时OU还可以有子OU,用来表示更为细致的分类。OU下面还有CN(Common name,共同名字),用于更小级别的组织单元。一个CN下存储多个条目,该条目可以有很多属性,存储在LDAP数据库中。
    image.png
  • LDAP提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统。LDAP默认以Berkeley DB作为后端数据库,BerkeleyDB数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储。RDN(Relative Distinguished Name)是指条目的相对唯一名称,也可简称为DN。在LDAP中,每个条目都有一个RDN,它是该条目在其父级条目下的唯一名称。例如:一个RDN为:uid=mwaddams,cn=User,ou=people,dc=Initech,dc=com可以表示为一个用户名为mwaddams存储在Initech.com域下的User组织单元中。**

TeleDBX-LDAP认证

  • 在TeledbX中,支持使用LDAP进行用户的身份验证。这种认证方法操作起来类似于password,只不过它使用 LDAP 作为密码验证方法。用户可以使用他们在LDAP中存储的凭据(如用户名和密码)来连接到TeleDBX数据库。TeleDBX将会将用户的凭据发送到LDAP服务器进行验证,如果验证成功,用户将被授予对数据库的访问权限。通过将TeledbX与LDAP集成,可以实现统一的身份验证和授权管理,从而简化用户和权限的管理。
  • TeleDBX支持2种LDAP的认证模式,simple bind模式以及search bind模式,不同的模式对于pg_hba.conf配置不同。后续的测试均以simple bind模式为例。

二、TeleDBX开启LDAP认证步骤

在TeleDBX中,要启用LDAP认证,需要进行以下步骤:

1、configure阶段,添加--with-ldap。

2、编辑TeleDBX的配置文件 pg_hba.conf,添加允许LDAP认证的规则,指定允许哪些用户或组使用LDAP进行身份验证。

TeledbX分布式数据库具有多个节点,协调节点CN以及数据节点DN,且每个节点具有其各自的pg_hba.conf。目前TeleDBX仅支持单个节点的LDAP认证登录(详见附录多节点配置LDAP认证的bug)。修改支持LDAP登录认证节点对应的pg_hba.conf文件。pg_hba.conf的格式通常为以下几种:

local      database  user  auth-method  [auth-options]
host       database  user  address  auth-method  [auth-options]
hostssl    database  user  address  auth-method  [auth-options]
hostnossl  database  user  address  auth-method  [auth-options]
host       database  user  IP-address  IP-mask  auth-method  [auth-options]
hostssl    database  user  IP-address  IP-mask  auth-method  [auth-options]
hostnossl  database  user  IP-address  IP-mask  auth-method  [auth-options]

为了支持LDAP认证,设置 ldap 作为 authentication_method,并配置其他相关的LDAP连接参数,以simple bind模式为例:auth-options包括

  • ldapserver:要连接的LDAP服务器的名称或IP地址。可以指定多个服务器,用空格分隔。
  • ldapport:要连接的LDAP服务器的端口号。如果没有指定端口,LDAP库的默认端口设置将被使用。
  • ldapprefix:形成指定LDAP查询时用户条目的DN字符串前缀。
  • ldapsuffix:形成指定LDAP查询时用户条目的DN字符串后缀。

3、重启TeledbX服务器,生效pg_hba.conf配置。

配置成功后,数据库用户username请求到数据库服务器的连接时,TeleDBX将尝试使用ldapprefix+username+ldapsuffix和用户提供的登录密码来绑定到 LDAP 服务器ldapserver:ldapport。如果LDAP认证成功,将被授予数据库访问。

三、验证

验证环境:

1、物理机:10.129.180.87

2、TeleDBX:

节点 端口 数据目录
GTM 51475 /data4/luoxu/teledbX/my_teledbx/data/gtm
CN1 60444 /data4/luoxu/teledbX/my_teledbx/data/cn01
CN2 60555 /data4/luoxu/teledbX/my_teledbx/data/cn02
DN1 10444 /data4/luoxu/teledbX/my_teledbx/data/dn01
DN2 10555 /data4/luoxu/teledbX/my_teledbx/data/dn02
DN1 SLAVE 50344 /data4/luoxu/teledbX/my_teledbx/data/dn01_s
DN2 SLAVE 50355 /data4/luoxu/teledbX/my_teledbx/data/dn02_s

3、OpenaLDAP server:10.129.180.87:389(其部署步骤见附录)

验证步骤:

1、在使用 LDAP 进行认证之前,用户必须已经存在于数据库中。在TeledbX中创建用户ldap_test。

postgres=> create user ldap_test password '1235lx##';

该密码为md5认证使用,可以任意设置,甚至可以不设置密码。ldap认证的密码存储在ldap服务器中。

2、在LDAP服务器中,创建ldap_test用户,并生成TeledbX的登陆密码。

2.1 生成用户密码(该密码为TeleDBX数据库ldap_test用户的登陆密码,自定义)

[luoxu@centos7-87 ldap]$ slappasswd
New password: z8dKViUlZYv2lw==
Re-enter new password: z8dKViUlZYv2lw==
{SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

ldap使用slappasswd进行哈希,哈希值存储在文件中,避免明文存储。

2.2 创建user01.ldif,创建用户,名为ldap_test

[luoxu@centos7-87 ldap]$ vim user01.ldif
​
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test
userPassword: {SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

ldap通过ldif文件的形式对存储的数据进行修改/增加操作。其中,uid为用户名称,userPassword为用户登陆密码的SSHA串,ou=People,dc=lxlx,dc=com为目录名称。该文件表示在lxlx.com域中,在People组织单元中insert了用户uid为ldap_test,密码为z8dKViUlZYv2lw==的数据。

2.3 应用user01.ldif

[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f user01.ldif
Enter LDAP Password: 
adding new entry "uid=ldap_test,ou=People,dc=lxlx,dc=com"

ldap服务通过ldapadd应用数据。

至此,LDAP新增用户ldap_test的dn(一个dn唯一表示一个目录条目)为:uid=ldap_test,ou=People,dc=lxlx,dc=com,TeledbX的ldpa认证配置使用该dn作为认证指纹。

3、修改pg_hba.conf文件。TeleDBX仅支持单节点的LDAP认证登录,这里以登录cn01为例。因此修改cn01的/data4/luoxu/teledbX/my_teledbx/data/cn01/pg_hba.conf

#认证位置添加
local   all              all                                     ldap ldapserver=127.0.0.1 ldapport=389 ldapprefix="uid=" ldapsuffix=",ou=People,dc=lxlx,dc=com"
host    all              all             0.0.0.0/0               ldap ldapserver=127.0.0.1 ldapport=389 ldapprefix="uid=" ldapsuffix=",ou=People,dc=lxlx,dc=com"

注意事项:使用ldap认证时,尽可能删除/注释掉md5认证方式,避免冲突。

4、重启TeleDBX

#停止所有节点
PGXC stop all
#启动所有节点
PGXC start all

5、ldap_test登录数据库

[luoxu@centos7-87 bin]$ ./psql -U ldap_test -d postgres -p 60444
Password for user ldap_test: z8dKViUlZYv2lw==
psql (PostgreSQL 10.0 TeleDBX V6)
Type "help" for help.
​
postgres=>

使用存储在LDAP的登陆密码登录,认证成功。

6、查看LDAP服务端日志:

[luoxu@centos7-87 ldap]$ sudo tail  /var/log/slapd.log
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 fd=11 ACCEPT from IP=127.0.0.1:58294 (IP=0.0.0.0:389)
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" method=128
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" mech=SIMPLE ssf=0
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 RESULT tag=97 err=0 text=
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=1 UNBIND
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 fd=11 closed

可以发现ldap_test认证成功。

7、当然,使用ldap_test在create user时候设置的密码1235lx##登陆不成功

[luoxu@centos7-87 bin]$ ./psql -U ldap_test -d postgres -p 60444
Password for user ldap_test: 1235lx##
psql: FATAL:  LDAP authentication failed for user "ldap_test"
​
##查看ldap日志  err=49报错
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 fd=11 ACCEPT from IP=127.0.0.1:40540 (IP=0.0.0.0:389)
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" method=128
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=0 RESULT tag=97 err=49 text=
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=1 UNBIND
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 fd=11 closed

附录

LDAP部署步骤

环境:物理机10.129.180.87。以下步骤若无权限,使用sudo。

1、yum安装ldap服务及其依赖

[luoxu@centos7-87 ldap]$ sudo yum install openldap openldap-clients openldap-servers

若为centos8:

会提示Error: Unable to find a match: openldap-servers,这是因为CentOS 8 的仓库中取消了对 openLDAP-servers 包的支持。

使用:

sudo dnf install openldap-servers

2、查看OpenLDAP版本

[luoxu@centos7-87 ldap]$ slapd -VV
@(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
        mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd

centos8:可能是

[luoxu@cantian-host78 openldap]$ slapd -VV
@(#) $OpenLDAP: slapd 2.4.59 (Jun  4 2021 16:58:00) $
     build@c8rpm:/home/build/git/rheldap8/RHEL8_x86_64/BUILD/symas-openldap-2.4.59/openldap-2.4.59/servers/slapd

3、检查OpenLDAP的重要配置文件

/etc/openldap/slapd.d/*:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等
/etc/openldap/schema/*:OpenLDAP的schema存放的地方
/var/lib/ldap/*:OpenLDAP的数据文件
/usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件

注意:/etc/openldap/目录一定要有以下四个文件(centos8可能多一个ldap.conf):

[luoxu@centos7-87 openldap]$ ll
total 8
drwxr-xr-x 2 root root   90 Dec  7 15:23 certs
-rw-r--r-- 1 root root  121 Feb 24  2022 check_password.conf
drwxr-xr-x 2 root root 4096 Dec  7 15:16 schema
drwxr-x--- 3 ldap ldap   45 Dec  7 15:16 slapd.d

若没有certs,通常是由于卸载后将certs一并卸载:需执行以下操作:

[luoxu@centos7-87 openldap]$ sudo mkdir -p /etc/openldap/certs
[luoxu@centos7-87 openldap]$ sudo bash /usr/libexec/openldap/create-certdb.sh
Creating certificate database in '/etc/openldap/certs'.
[luoxu@centos7-87 openldap]$ sudo bash /usr/libexec/openldap/generate-server-cert.sh
Creating new server certificate in '/etc/openldap/certs'.
[luoxu@centos7-87 openldap]$ ll /etc/openldap/certs
total 80
-rw-r--r-- 1 root root 65536 Dec  7 15:23 cert8.db
-rw-r--r-- 1 root root 16384 Dec  7 15:23 key3.db
-r--r----- 1 root ldap    45 Dec  7 15:23 password
-rw-r--r-- 1 root root 16384 Dec  7 15:23 secmod.db

4、启动ldap并查看其状态

[luoxu@centos7-87 openldap]$ sudo systemctl start slapd
[luoxu@centos7-87 openldap]$ sudo systemctl status slapd.service
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-12-07 15:27:08 CST; 7s ago
     Docs: man:slapd
           man:slapd-config
           man:slapd-hdb
           man:slapd-mdb
           file:///usr/share/doc/openldap-servers/guide.html
  Process: 196448 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
  Process: 196431 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
 Main PID: 196449 (slapd)
    Tasks: 2
   CGroup: /system.slice/slapd.service
           └─196449 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
​
Dec 07 15:27:08 centos7-87 systemd[1]: Starting OpenLDAP Server Daemon...
Dec 07 15:27:08 centos7-87 runuser[196434]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Dec 07 15:27:08 centos7-87 runuser[196434]: pam_unix(runuser:session): session closed for user ldap
Dec 07 15:27:08 centos7-87 slapcat[196438]: DIGEST-MD5 common mech free
Dec 07 15:27:08 centos7-87 slapd[196448]: @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
                                                  mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4....rs/slapd
Dec 07 15:27:08 centos7-87 slapd[196448]: tlsmc_get_pin: INFO: Please note the extracted key file will not be protected with a PIN any...issions.
Dec 07 15:27:08 centos7-87 slapd[196449]: slapd starting
Dec 07 15:27:08 centos7-87 systemd[1]: Started OpenLDAP Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[luoxu@centos7-87 openldap]$ sudo lsof -i :389
COMMAND    PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
slapd   196449 ldap    8u  IPv4 3325570019      0t0  TCP *:ldap (LISTEN)
slapd   196449 ldap    9u  IPv6 3325570020      0t0  TCP *:ldap (LISTEN)

5、配置OpenLDAP数据库

[luoxu@centos7-87 openldap]$ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[luoxu@centos7-87 openldap]$ sudo chown ldap:ldap -R /var/lib/ldap
[luoxu@centos7-87 openldap]$ sudo chmod 700 -R /var/lib/ldap
## 导入基本Schema
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
​
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
​
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

6、生成ldap管理员密码

[luoxu@centos7-87 ldap]$ slappasswd
New password: llxx1235##
Re-enter new password: 
{SSHA}GEy7cuwnclud3nT98tx3UkL8NMkhgxXW

输入的密码为ldap管理员密码,管理员用来创建用户等。原始输入的密码以及生成的对应SSHA串均需记住。

7、创建管理员ldif文件并应用(可在创建一个ldap目录,用于存放ldif文件)

[luoxu@centos7-87 ldap]$ vim add_admin_pw.ldif
​
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=lxlx,dc=com
​
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=lxlx,dc=com
​
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}GEy7cuwnclud3nT98tx3UkL8NMkhgxXW

1、在LDAP(轻型目录访问协议)中,DN(Distinguished Name)、CN(Common Name)和DC(Domain Component)是常见的术语,用于标识和组织目录中的条目和结构。

  • DN(Distinguished Name):DN是LDAP目录中条目的唯一标识符。它是条目在LDAP树中的完整路径,类似于文件系统中的绝对路径。例如,cn=user,ou=People,dc=example,dc=com是一个DN,它指定了一个名为"user"的条目,位于"ou=People,dc=example,dc=com"组织单元下。
  • CN(Common Name):CN通常用于表示条目的通用名称,例如用户、组或其他实体的名称。在DN中,CN通常用于表示条目的名称部分。例如,cn=user中的"cn"表示通用名称,后面的"user"是具体的名称。
  • DC(Domain Component):DC用于表示域组件,通常用于构建LDAP树的根结点。在LDAP中,域组件通常用于表示域名的一部分。例如,dc=example,dc=com表示一个域名为"example.com"的组件。

2、ldap修改/增加配置数据,用户数据等,均通过ldif文件实现。

注意:olcDatabase根据/etc/openldap/slapd.d/cn=config的目录来里面来,如果是'olcDatabase={2}mdb.ldif',则上面写olcDatabase={2}mdb.ldif。

centos8可能是:

[root@cantian-host78 cn=config]# ll
total 20
drwxr-x--- 2 ldap ldap 108 Dec 20 19:05 'cn=schema'
-rw------- 1 ldap ldap 378 Dec 20 19:00 'cn=schema.ldif'
-rw------- 1 ldap ldap 513 Dec 20 19:00 'olcDatabase={0}config.ldif'
-rw------- 1 ldap ldap 412 Dec 20 19:00 'olcDatabase={-1}frontend.ldif'
-rw------- 1 ldap ldap 604 Dec 20 19:15 'olcDatabase={1}monitor.ldif'
-rw------- 1 ldap ldap 710 Dec 20 19:12 'olcDatabase={2}mdb.ldif'

则dn: olcDatabase={2}hdb,cn=config改为dn: olcDatabase={2}mdb.ldif,cn=config

8、应用add_admin_pw.ldif

[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f add_admin_pw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
​
modifying entry "olcDatabase={2}hdb,cn=config"
​
modifying entry "olcDatabase={2}hdb,cn=config"

ldpa里面对配置信息的修改/添加均需要通过ldapmodify或者ldapadd命令。

9、创建monitor.ldif

[luoxu@centos7-87 ldap]$ vim monitor.ldif
​
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=lxlx,dc=com" read by * none

10、应用monitor.ldif

[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f monitor.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

11、验证config配置是否正确

[luoxu@centos7-87 ldap]$ sudo slaptest -u
config file testing succeeded

12、添加配置基本目录

[luoxu@centos7-87 ldap]$ vim base.ldif
##添加如下信息
dn: dc=lxlx,dc=com
dc: lxlx
objectClass: top
objectClass: dcObject
objectclass: organization
o: lxlxcom
​
dn: cn=ldapadm,dc=lxlx,dc=com
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
​
dn: ou=People,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: People
​
dn: ou=Group,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: Group

**一个dn唯一表示一个目录条目。上述配置表示:1、设置top域 dn: dc=lxlx,dc=com(相当于顶级树根) 2、在基本域lxlx.com设置一个管理员(organizationalRole),名字为ldapadm。3、在top域设置两个ou(组织单元)People和Group。**

13、应用base.ldif

[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f base.ldif
Enter LDAP Password: 
adding new entry "dc=lxlx,dc=com"
​
adding new entry "cn=ldapadm,dc=lxlx,dc=com"
​
adding new entry "ou=People,dc=lxlx,dc=com"
​
adding new entry "ou=Group,dc=lxlx,dc=com"

会提示你输入管理员密码,请输入真实密码,非SSHA。至此,ldap服务基本配置完成。

至此,ldpa端的配置完成,能够存储数据。以下步骤为验证TELEDBX支持LDAP认证,生成ldap_test用户以及密码。

14、生成ldap_test用户及其登录密码

14.1 生成用户密码(该密码为TeleDBX数据库ldap_test用户的登陆密码,自定义):

[luoxu@centos7-87 ldap]$ slappasswd
New password: z8dKViUlZYv2lw==
Re-enter new password: z8dKViUlZYv2lw==
{SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

14.2 创建user01.ldif,创建用户,名为ldap_test

[luoxu@centos7-87 ldap]$ vim user01.ldif
​
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test  
userPassword: {SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

1、其中,uid为用户名称,userPassword为slappasswd用户登陆密码的SSHA串,ou=People,dc=lxlx,dc=com为目录名称。该文件表示在lxlx.com域中,在People组织单元中insert了用户uid为ldap_test,密码为z8dKViUlZYv2lw==的数据。

2、homeDirectory自己创好。

14.3 应用user01.ldif

[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f user01.ldif
Enter LDAP Password: 
adding new entry "uid=ldap_test,ou=People,dc=lxlx,dc=com"

1、ldap服务通过ldapadd应用数据。

2、会提示你输入管理员密码,请输入真实密码,非SSHA。

3、ldap新增用户ldap_test的dn(一个dn唯一表示一个目录条目)为:uid=ldap_test,ou=People,dc=lxlx,dc=com,TeledbX的ldpa认证配置使用该dn作为认证指纹。

15、查看一下当前ldap的目录

[luoxu@centos7-87 ldap]$ ldapsearch -x -b "dc=lxlx,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=lxlx,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
​
# lxlx.com
dn: dc=lxlx,dc=com
dc: lxlx
objectClass: top
objectClass: dcObject
objectClass: organization
o: lxlxcom
​
# ldapadm, lxlx.com
dn: cn=ldapadm,dc=lxlx,dc=com
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
​
# People, lxlx.com
dn: ou=People,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: People
​
# Group, lxlx.com
dn: ou=Group,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: Group
​
# ldap_test, People, lxlx.com
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test
userPassword:: e1NTSEF9WXVGcEY0K1czVk5EMGt3SjZQSXZ2NlQxWS95Umk3UXY=
​
# search result
search: 2
result: 0 Success
​
# numResponses: 6
# numEntries: 5

16、开启OpenLDAP日志记录

OpenLDAP默认是没有启动日志记录功能,在实际使用中为了方便定位问题,我们需要查看日志。

cat > ./loglevel.ldif << EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f loglevel.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

修改rsyslog配置文件,并重启服务:

[luoxu@centos7-87 ldap]$ sudo vim /etc/rsyslog.conf
##在rsyslog.conf末尾添加:
local4.* /var/log/slapd.log
[luoxu@centos7-87 ldap]$ sudo systemctl restart rsyslog
[luoxu@centos7-87 ldap]$ sudo systemctl restart slapd

查看日志:

[luoxu@centos7-87 ldap]$ sudo tail  /var/log/slapd.log
Dec  7 16:47:50 centos7-87 slapd[96528]: daemon: shutdown requested and initiated.
Dec  7 16:47:50 centos7-87 slapd[96528]: slapd shutdown: waiting for 0 operations/tasks to finish
Dec  7 16:47:50 centos7-87 slapd[96528]: slapd stopped.
Dec  7 16:47:50 centos7-87 slapd[11682]: @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $#012#011mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
Dec  7 16:47:50 centos7-87 slapd[11783]: slapd starting

*上述步骤简单配置了ldpa的管理员以及管理员密码用于管理ldap条目。同时配置了top域,dc:lxlx,dc:com(lxlx.com)。此外设置了两个组织单元,用于存储信息,分别为ou:People,以及ou:Group。

最后设置了一个用户ldap_test,其唯一dn为uid=ldap_test,ou=People,dc=lxlx,dc=com。

附ldap的卸载步骤:

1、systemctl stop slapd

2、yum -y remove openldap-servers openldap-clients

3、rm -rf /var/lib/ldap

4、userdel ldap

5、rm -rf /etc/openldap

0条评论
0 / 1000
8****m
4文章数
0粉丝数
8****m
4 文章 | 0 粉丝
8****m
4文章数
0粉丝数
8****m
4 文章 | 0 粉丝
原创

TELEDBX-LDAP认证

2024-09-26 09:27:22
7
0

一、背景

LDAP介绍

  • LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现。
  • LDAP的信息是以树状的层次结构来存储数据,最顶层即根部称作“Root”。在根目录的下面有很多的文件和目录,为了把这些大量的数据从逻辑上分开,LDAP像其它的目录服务协议一样使用OU(Organization Unit,组织单元),可以用来表示公司内部机构,如部门等。同时OU还可以有子OU,用来表示更为细致的分类。OU下面还有CN(Common name,共同名字),用于更小级别的组织单元。一个CN下存储多个条目,该条目可以有很多属性,存储在LDAP数据库中。
    image.png
  • LDAP提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统。LDAP默认以Berkeley DB作为后端数据库,BerkeleyDB数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储。RDN(Relative Distinguished Name)是指条目的相对唯一名称,也可简称为DN。在LDAP中,每个条目都有一个RDN,它是该条目在其父级条目下的唯一名称。例如:一个RDN为:uid=mwaddams,cn=User,ou=people,dc=Initech,dc=com可以表示为一个用户名为mwaddams存储在Initech.com域下的User组织单元中。**

TeleDBX-LDAP认证

  • 在TeledbX中,支持使用LDAP进行用户的身份验证。这种认证方法操作起来类似于password,只不过它使用 LDAP 作为密码验证方法。用户可以使用他们在LDAP中存储的凭据(如用户名和密码)来连接到TeleDBX数据库。TeleDBX将会将用户的凭据发送到LDAP服务器进行验证,如果验证成功,用户将被授予对数据库的访问权限。通过将TeledbX与LDAP集成,可以实现统一的身份验证和授权管理,从而简化用户和权限的管理。
  • TeleDBX支持2种LDAP的认证模式,simple bind模式以及search bind模式,不同的模式对于pg_hba.conf配置不同。后续的测试均以simple bind模式为例。

二、TeleDBX开启LDAP认证步骤

在TeleDBX中,要启用LDAP认证,需要进行以下步骤:

1、configure阶段,添加--with-ldap。

2、编辑TeleDBX的配置文件 pg_hba.conf,添加允许LDAP认证的规则,指定允许哪些用户或组使用LDAP进行身份验证。

TeledbX分布式数据库具有多个节点,协调节点CN以及数据节点DN,且每个节点具有其各自的pg_hba.conf。目前TeleDBX仅支持单个节点的LDAP认证登录(详见附录多节点配置LDAP认证的bug)。修改支持LDAP登录认证节点对应的pg_hba.conf文件。pg_hba.conf的格式通常为以下几种:

local      database  user  auth-method  [auth-options]
host       database  user  address  auth-method  [auth-options]
hostssl    database  user  address  auth-method  [auth-options]
hostnossl  database  user  address  auth-method  [auth-options]
host       database  user  IP-address  IP-mask  auth-method  [auth-options]
hostssl    database  user  IP-address  IP-mask  auth-method  [auth-options]
hostnossl  database  user  IP-address  IP-mask  auth-method  [auth-options]

为了支持LDAP认证,设置 ldap 作为 authentication_method,并配置其他相关的LDAP连接参数,以simple bind模式为例:auth-options包括

  • ldapserver:要连接的LDAP服务器的名称或IP地址。可以指定多个服务器,用空格分隔。
  • ldapport:要连接的LDAP服务器的端口号。如果没有指定端口,LDAP库的默认端口设置将被使用。
  • ldapprefix:形成指定LDAP查询时用户条目的DN字符串前缀。
  • ldapsuffix:形成指定LDAP查询时用户条目的DN字符串后缀。

3、重启TeledbX服务器,生效pg_hba.conf配置。

配置成功后,数据库用户username请求到数据库服务器的连接时,TeleDBX将尝试使用ldapprefix+username+ldapsuffix和用户提供的登录密码来绑定到 LDAP 服务器ldapserver:ldapport。如果LDAP认证成功,将被授予数据库访问。

三、验证

验证环境:

1、物理机:10.129.180.87

2、TeleDBX:

节点 端口 数据目录
GTM 51475 /data4/luoxu/teledbX/my_teledbx/data/gtm
CN1 60444 /data4/luoxu/teledbX/my_teledbx/data/cn01
CN2 60555 /data4/luoxu/teledbX/my_teledbx/data/cn02
DN1 10444 /data4/luoxu/teledbX/my_teledbx/data/dn01
DN2 10555 /data4/luoxu/teledbX/my_teledbx/data/dn02
DN1 SLAVE 50344 /data4/luoxu/teledbX/my_teledbx/data/dn01_s
DN2 SLAVE 50355 /data4/luoxu/teledbX/my_teledbx/data/dn02_s

3、OpenaLDAP server:10.129.180.87:389(其部署步骤见附录)

验证步骤:

1、在使用 LDAP 进行认证之前,用户必须已经存在于数据库中。在TeledbX中创建用户ldap_test。

postgres=> create user ldap_test password '1235lx##';

该密码为md5认证使用,可以任意设置,甚至可以不设置密码。ldap认证的密码存储在ldap服务器中。

2、在LDAP服务器中,创建ldap_test用户,并生成TeledbX的登陆密码。

2.1 生成用户密码(该密码为TeleDBX数据库ldap_test用户的登陆密码,自定义)

[luoxu@centos7-87 ldap]$ slappasswd
New password: z8dKViUlZYv2lw==
Re-enter new password: z8dKViUlZYv2lw==
{SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

ldap使用slappasswd进行哈希,哈希值存储在文件中,避免明文存储。

2.2 创建user01.ldif,创建用户,名为ldap_test

[luoxu@centos7-87 ldap]$ vim user01.ldif
​
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test
userPassword: {SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

ldap通过ldif文件的形式对存储的数据进行修改/增加操作。其中,uid为用户名称,userPassword为用户登陆密码的SSHA串,ou=People,dc=lxlx,dc=com为目录名称。该文件表示在lxlx.com域中,在People组织单元中insert了用户uid为ldap_test,密码为z8dKViUlZYv2lw==的数据。

2.3 应用user01.ldif

[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f user01.ldif
Enter LDAP Password: 
adding new entry "uid=ldap_test,ou=People,dc=lxlx,dc=com"

ldap服务通过ldapadd应用数据。

至此,LDAP新增用户ldap_test的dn(一个dn唯一表示一个目录条目)为:uid=ldap_test,ou=People,dc=lxlx,dc=com,TeledbX的ldpa认证配置使用该dn作为认证指纹。

3、修改pg_hba.conf文件。TeleDBX仅支持单节点的LDAP认证登录,这里以登录cn01为例。因此修改cn01的/data4/luoxu/teledbX/my_teledbx/data/cn01/pg_hba.conf

#认证位置添加
local   all              all                                     ldap ldapserver=127.0.0.1 ldapport=389 ldapprefix="uid=" ldapsuffix=",ou=People,dc=lxlx,dc=com"
host    all              all             0.0.0.0/0               ldap ldapserver=127.0.0.1 ldapport=389 ldapprefix="uid=" ldapsuffix=",ou=People,dc=lxlx,dc=com"

注意事项:使用ldap认证时,尽可能删除/注释掉md5认证方式,避免冲突。

4、重启TeleDBX

#停止所有节点
PGXC stop all
#启动所有节点
PGXC start all

5、ldap_test登录数据库

[luoxu@centos7-87 bin]$ ./psql -U ldap_test -d postgres -p 60444
Password for user ldap_test: z8dKViUlZYv2lw==
psql (PostgreSQL 10.0 TeleDBX V6)
Type "help" for help.
​
postgres=>

使用存储在LDAP的登陆密码登录,认证成功。

6、查看LDAP服务端日志:

[luoxu@centos7-87 ldap]$ sudo tail  /var/log/slapd.log
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 fd=11 ACCEPT from IP=127.0.0.1:58294 (IP=0.0.0.0:389)
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" method=128
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" mech=SIMPLE ssf=0
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=0 RESULT tag=97 err=0 text=
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 op=1 UNBIND
Dec  8 14:34:58 centos7-87 slapd[102635]: conn=1017 fd=11 closed

可以发现ldap_test认证成功。

7、当然,使用ldap_test在create user时候设置的密码1235lx##登陆不成功

[luoxu@centos7-87 bin]$ ./psql -U ldap_test -d postgres -p 60444
Password for user ldap_test: 1235lx##
psql: FATAL:  LDAP authentication failed for user "ldap_test"
​
##查看ldap日志  err=49报错
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 fd=11 ACCEPT from IP=127.0.0.1:40540 (IP=0.0.0.0:389)
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=0 BIND dn="uid=ldap_test,ou=People,dc=lxlx,dc=com" method=128
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=0 RESULT tag=97 err=49 text=
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 op=1 UNBIND
Dec  8 14:37:47 centos7-87 slapd[102635]: conn=1018 fd=11 closed

附录

LDAP部署步骤

环境:物理机10.129.180.87。以下步骤若无权限,使用sudo。

1、yum安装ldap服务及其依赖

[luoxu@centos7-87 ldap]$ sudo yum install openldap openldap-clients openldap-servers

若为centos8:

会提示Error: Unable to find a match: openldap-servers,这是因为CentOS 8 的仓库中取消了对 openLDAP-servers 包的支持。

使用:

sudo dnf install openldap-servers

2、查看OpenLDAP版本

[luoxu@centos7-87 ldap]$ slapd -VV
@(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
        mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd

centos8:可能是

[luoxu@cantian-host78 openldap]$ slapd -VV
@(#) $OpenLDAP: slapd 2.4.59 (Jun  4 2021 16:58:00) $
     build@c8rpm:/home/build/git/rheldap8/RHEL8_x86_64/BUILD/symas-openldap-2.4.59/openldap-2.4.59/servers/slapd

3、检查OpenLDAP的重要配置文件

/etc/openldap/slapd.d/*:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等
/etc/openldap/schema/*:OpenLDAP的schema存放的地方
/var/lib/ldap/*:OpenLDAP的数据文件
/usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件

注意:/etc/openldap/目录一定要有以下四个文件(centos8可能多一个ldap.conf):

[luoxu@centos7-87 openldap]$ ll
total 8
drwxr-xr-x 2 root root   90 Dec  7 15:23 certs
-rw-r--r-- 1 root root  121 Feb 24  2022 check_password.conf
drwxr-xr-x 2 root root 4096 Dec  7 15:16 schema
drwxr-x--- 3 ldap ldap   45 Dec  7 15:16 slapd.d

若没有certs,通常是由于卸载后将certs一并卸载:需执行以下操作:

[luoxu@centos7-87 openldap]$ sudo mkdir -p /etc/openldap/certs
[luoxu@centos7-87 openldap]$ sudo bash /usr/libexec/openldap/create-certdb.sh
Creating certificate database in '/etc/openldap/certs'.
[luoxu@centos7-87 openldap]$ sudo bash /usr/libexec/openldap/generate-server-cert.sh
Creating new server certificate in '/etc/openldap/certs'.
[luoxu@centos7-87 openldap]$ ll /etc/openldap/certs
total 80
-rw-r--r-- 1 root root 65536 Dec  7 15:23 cert8.db
-rw-r--r-- 1 root root 16384 Dec  7 15:23 key3.db
-r--r----- 1 root ldap    45 Dec  7 15:23 password
-rw-r--r-- 1 root root 16384 Dec  7 15:23 secmod.db

4、启动ldap并查看其状态

[luoxu@centos7-87 openldap]$ sudo systemctl start slapd
[luoxu@centos7-87 openldap]$ sudo systemctl status slapd.service
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-12-07 15:27:08 CST; 7s ago
     Docs: man:slapd
           man:slapd-config
           man:slapd-hdb
           man:slapd-mdb
           file:///usr/share/doc/openldap-servers/guide.html
  Process: 196448 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
  Process: 196431 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
 Main PID: 196449 (slapd)
    Tasks: 2
   CGroup: /system.slice/slapd.service
           └─196449 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
​
Dec 07 15:27:08 centos7-87 systemd[1]: Starting OpenLDAP Server Daemon...
Dec 07 15:27:08 centos7-87 runuser[196434]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Dec 07 15:27:08 centos7-87 runuser[196434]: pam_unix(runuser:session): session closed for user ldap
Dec 07 15:27:08 centos7-87 slapcat[196438]: DIGEST-MD5 common mech free
Dec 07 15:27:08 centos7-87 slapd[196448]: @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
                                                  mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4....rs/slapd
Dec 07 15:27:08 centos7-87 slapd[196448]: tlsmc_get_pin: INFO: Please note the extracted key file will not be protected with a PIN any...issions.
Dec 07 15:27:08 centos7-87 slapd[196449]: slapd starting
Dec 07 15:27:08 centos7-87 systemd[1]: Started OpenLDAP Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[luoxu@centos7-87 openldap]$ sudo lsof -i :389
COMMAND    PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
slapd   196449 ldap    8u  IPv4 3325570019      0t0  TCP *:ldap (LISTEN)
slapd   196449 ldap    9u  IPv6 3325570020      0t0  TCP *:ldap (LISTEN)

5、配置OpenLDAP数据库

[luoxu@centos7-87 openldap]$ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[luoxu@centos7-87 openldap]$ sudo chown ldap:ldap -R /var/lib/ldap
[luoxu@centos7-87 openldap]$ sudo chmod 700 -R /var/lib/ldap
## 导入基本Schema
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
​
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
​
[luoxu@centos7-87 openldap]$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

6、生成ldap管理员密码

[luoxu@centos7-87 ldap]$ slappasswd
New password: llxx1235##
Re-enter new password: 
{SSHA}GEy7cuwnclud3nT98tx3UkL8NMkhgxXW

输入的密码为ldap管理员密码,管理员用来创建用户等。原始输入的密码以及生成的对应SSHA串均需记住。

7、创建管理员ldif文件并应用(可在创建一个ldap目录,用于存放ldif文件)

[luoxu@centos7-87 ldap]$ vim add_admin_pw.ldif
​
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=lxlx,dc=com
​
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=lxlx,dc=com
​
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}GEy7cuwnclud3nT98tx3UkL8NMkhgxXW

1、在LDAP(轻型目录访问协议)中,DN(Distinguished Name)、CN(Common Name)和DC(Domain Component)是常见的术语,用于标识和组织目录中的条目和结构。

  • DN(Distinguished Name):DN是LDAP目录中条目的唯一标识符。它是条目在LDAP树中的完整路径,类似于文件系统中的绝对路径。例如,cn=user,ou=People,dc=example,dc=com是一个DN,它指定了一个名为"user"的条目,位于"ou=People,dc=example,dc=com"组织单元下。
  • CN(Common Name):CN通常用于表示条目的通用名称,例如用户、组或其他实体的名称。在DN中,CN通常用于表示条目的名称部分。例如,cn=user中的"cn"表示通用名称,后面的"user"是具体的名称。
  • DC(Domain Component):DC用于表示域组件,通常用于构建LDAP树的根结点。在LDAP中,域组件通常用于表示域名的一部分。例如,dc=example,dc=com表示一个域名为"example.com"的组件。

2、ldap修改/增加配置数据,用户数据等,均通过ldif文件实现。

注意:olcDatabase根据/etc/openldap/slapd.d/cn=config的目录来里面来,如果是'olcDatabase={2}mdb.ldif',则上面写olcDatabase={2}mdb.ldif。

centos8可能是:

[root@cantian-host78 cn=config]# ll
total 20
drwxr-x--- 2 ldap ldap 108 Dec 20 19:05 'cn=schema'
-rw------- 1 ldap ldap 378 Dec 20 19:00 'cn=schema.ldif'
-rw------- 1 ldap ldap 513 Dec 20 19:00 'olcDatabase={0}config.ldif'
-rw------- 1 ldap ldap 412 Dec 20 19:00 'olcDatabase={-1}frontend.ldif'
-rw------- 1 ldap ldap 604 Dec 20 19:15 'olcDatabase={1}monitor.ldif'
-rw------- 1 ldap ldap 710 Dec 20 19:12 'olcDatabase={2}mdb.ldif'

则dn: olcDatabase={2}hdb,cn=config改为dn: olcDatabase={2}mdb.ldif,cn=config

8、应用add_admin_pw.ldif

[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f add_admin_pw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
​
modifying entry "olcDatabase={2}hdb,cn=config"
​
modifying entry "olcDatabase={2}hdb,cn=config"

ldpa里面对配置信息的修改/添加均需要通过ldapmodify或者ldapadd命令。

9、创建monitor.ldif

[luoxu@centos7-87 ldap]$ vim monitor.ldif
​
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=lxlx,dc=com" read by * none

10、应用monitor.ldif

[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f monitor.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

11、验证config配置是否正确

[luoxu@centos7-87 ldap]$ sudo slaptest -u
config file testing succeeded

12、添加配置基本目录

[luoxu@centos7-87 ldap]$ vim base.ldif
##添加如下信息
dn: dc=lxlx,dc=com
dc: lxlx
objectClass: top
objectClass: dcObject
objectclass: organization
o: lxlxcom
​
dn: cn=ldapadm,dc=lxlx,dc=com
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
​
dn: ou=People,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: People
​
dn: ou=Group,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: Group

**一个dn唯一表示一个目录条目。上述配置表示:1、设置top域 dn: dc=lxlx,dc=com(相当于顶级树根) 2、在基本域lxlx.com设置一个管理员(organizationalRole),名字为ldapadm。3、在top域设置两个ou(组织单元)People和Group。**

13、应用base.ldif

[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f base.ldif
Enter LDAP Password: 
adding new entry "dc=lxlx,dc=com"
​
adding new entry "cn=ldapadm,dc=lxlx,dc=com"
​
adding new entry "ou=People,dc=lxlx,dc=com"
​
adding new entry "ou=Group,dc=lxlx,dc=com"

会提示你输入管理员密码,请输入真实密码,非SSHA。至此,ldap服务基本配置完成。

至此,ldpa端的配置完成,能够存储数据。以下步骤为验证TELEDBX支持LDAP认证,生成ldap_test用户以及密码。

14、生成ldap_test用户及其登录密码

14.1 生成用户密码(该密码为TeleDBX数据库ldap_test用户的登陆密码,自定义):

[luoxu@centos7-87 ldap]$ slappasswd
New password: z8dKViUlZYv2lw==
Re-enter new password: z8dKViUlZYv2lw==
{SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

14.2 创建user01.ldif,创建用户,名为ldap_test

[luoxu@centos7-87 ldap]$ vim user01.ldif
​
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test  
userPassword: {SSHA}YuFpF4+W3VND0kwJ6PIvv6T1Y/yRi7Qv

1、其中,uid为用户名称,userPassword为slappasswd用户登陆密码的SSHA串,ou=People,dc=lxlx,dc=com为目录名称。该文件表示在lxlx.com域中,在People组织单元中insert了用户uid为ldap_test,密码为z8dKViUlZYv2lw==的数据。

2、homeDirectory自己创好。

14.3 应用user01.ldif

[luoxu@centos7-87 ldap]$ sudo ldapadd -x -W -D "cn=ldapadm,dc=lxlx,dc=com" -f user01.ldif
Enter LDAP Password: 
adding new entry "uid=ldap_test,ou=People,dc=lxlx,dc=com"

1、ldap服务通过ldapadd应用数据。

2、会提示你输入管理员密码,请输入真实密码,非SSHA。

3、ldap新增用户ldap_test的dn(一个dn唯一表示一个目录条目)为:uid=ldap_test,ou=People,dc=lxlx,dc=com,TeledbX的ldpa认证配置使用该dn作为认证指纹。

15、查看一下当前ldap的目录

[luoxu@centos7-87 ldap]$ ldapsearch -x -b "dc=lxlx,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=lxlx,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
​
# lxlx.com
dn: dc=lxlx,dc=com
dc: lxlx
objectClass: top
objectClass: dcObject
objectClass: organization
o: lxlxcom
​
# ldapadm, lxlx.com
dn: cn=ldapadm,dc=lxlx,dc=com
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
​
# People, lxlx.com
dn: ou=People,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: People
​
# Group, lxlx.com
dn: ou=Group,dc=lxlx,dc=com
objectClass: organizationalUnit
ou: Group
​
# ldap_test, People, lxlx.com
dn: uid=ldap_test,ou=People,dc=lxlx,dc=com
uid: ldap_test
cn: ldap_test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /data4/luoxu/teledbX/ldap/ldap_test
userPassword:: e1NTSEF9WXVGcEY0K1czVk5EMGt3SjZQSXZ2NlQxWS95Umk3UXY=
​
# search result
search: 2
result: 0 Success
​
# numResponses: 6
# numEntries: 5

16、开启OpenLDAP日志记录

OpenLDAP默认是没有启动日志记录功能,在实际使用中为了方便定位问题,我们需要查看日志。

cat > ./loglevel.ldif << EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
[luoxu@centos7-87 ldap]$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f loglevel.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

修改rsyslog配置文件,并重启服务:

[luoxu@centos7-87 ldap]$ sudo vim /etc/rsyslog.conf
##在rsyslog.conf末尾添加:
local4.* /var/log/slapd.log
[luoxu@centos7-87 ldap]$ sudo systemctl restart rsyslog
[luoxu@centos7-87 ldap]$ sudo systemctl restart slapd

查看日志:

[luoxu@centos7-87 ldap]$ sudo tail  /var/log/slapd.log
Dec  7 16:47:50 centos7-87 slapd[96528]: daemon: shutdown requested and initiated.
Dec  7 16:47:50 centos7-87 slapd[96528]: slapd shutdown: waiting for 0 operations/tasks to finish
Dec  7 16:47:50 centos7-87 slapd[96528]: slapd stopped.
Dec  7 16:47:50 centos7-87 slapd[11682]: @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $#012#011mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
Dec  7 16:47:50 centos7-87 slapd[11783]: slapd starting

*上述步骤简单配置了ldpa的管理员以及管理员密码用于管理ldap条目。同时配置了top域,dc:lxlx,dc:com(lxlx.com)。此外设置了两个组织单元,用于存储信息,分别为ou:People,以及ou:Group。

最后设置了一个用户ldap_test,其唯一dn为uid=ldap_test,ou=People,dc=lxlx,dc=com。

附ldap的卸载步骤:

1、systemctl stop slapd

2、yum -y remove openldap-servers openldap-clients

3、rm -rf /var/lib/ldap

4、userdel ldap

5、rm -rf /etc/openldap

文章来自个人专栏
PG数据库
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0