金仓数据库KingbaseES安全指南--6.5. LDAP身份验证

6.5.1. 关于LDAP身份验证

Lightweight Directory Access Protocol (LDAP)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。 LDAP服务可视为一种特殊的数据库服务,就像文件系统的目录一样以树形结构组织数据信息,通常存储的信息不会被频繁修改,侧重于快速检索,提供统一的访问方法。由于这种特性,LDAP常被用于用户认证的场景中。 这种认证方法操作起来类似于password,只不过它使用 LDAP作为密码验证方法。LDAP被用于验证用户名/口令。因此,在使用LDAP进行认证之前,用户必须已经存在于数据库中。

6.5.2. RADIUS身份验证原理

LDAP 认证可以在两种模式下操作。在第一种模式中(我们将称之为简单绑定模式),服务器将绑定到构造成``prefix`` ``username`` ``suffix``的可区分名称。通常,``prefix``参数被用于指定 cn=或者一个活动目录环境中的``DOMAIN``\``suffix``被用来指定非活动目录环境中的DN的剩余部分。

在第二种模式中(我们将称之为搜索与绑定模式),服务器首先用一个固定的用户名和密码(用``ldapbinddn````ldapbindpasswd``指定)绑定到 LDAP 目录 ,并为试图登入该数据库的用户执行一次搜索。如果没有配置用户名和密码,将尝试一次匿名绑定到目录。搜索将在位于``ldapbasedn``的子树上被执行,并将尝试做一次``ldapsearchattribute``中指定属性的精确匹配。一旦在这次搜索中找到用户,服务器断开并且作为这个用户重新绑定到目录,使用由客户端指定的口令来验证登录是正确的。这种模式与在其他软件中的 LDAP 认证所使用的相同,例如 Apache mod_authnz_ldap 和 pam_ldap。这种方法允许位于目录中用户对象的更大灵活性,但是会导致建立两个到 LDAP 服务器的独立连接。

下列配置选项被用于两种模式:

ldapserver

要连接的LDAP服务器的名称或IP地址。可以指定多个服务器,用空格分隔。

ldapport

要连接的LDAP服务器的端口号。如果没有指定端口,LDAP库的默认端口设置将被使用。

ldapscheme

设置为ldaps可以使用LDAPS。这是一种非标准的在SSL之上使用LDAP的方法,在有一些LDAP服务器实现上可以支持。其他选择还可以参考ldaptls选项。

ldaptls

设置为1以使KingbaseES和LDAP服务器之间的连接使用TLS加密。这会按照RFC 4513使用StartTLS操作。其他选择还可以参考ldapscheme选项。

注意使用ldapschemeldaptls仅会加密KingbaseES服务器和LDAP服务器之间的通信。KingbaseES服务器和KingbaseES客户端之间的连接仍是未加密的,除非也在其上使用SSL。

下列选项只被用于简单绑定模式:

ldapprefix

当做简单绑定认证时,前置到用户名形成要用于绑定的DN的字符串。

ldapsuffix

当做简单绑定认证时,前置到用户名形成要用于绑定的DN的字符串。

下列选项只被用于搜索与绑定模式:

ldapbasedn

当做搜索与绑定认证时,开始搜索用户的根DN。

ldapbinddn

当做搜索与绑定认证时,用户要绑定到目录开始执行搜索的DN。

ldapbindpasswd

当做搜索与绑定认证时,用户用于绑定到目录开始执行搜索的口令。

ldapsearchattribute

当做搜索与绑定认证时,在搜索中用来与用户名匹配的属性。如果没有指定属性,将会使用uid属性。

ldapsearchfilter

在做search+bind认证时使用的搜索过滤器。$username的出现将被替换为用户名。这允许比ldapsearchattribute更加灵活的搜索过滤器。

ldapurl

一个RFC 4516 LDAP URL。这是一种用更紧凑和标准的形式书写某些其他LDAP选项的可选方法。格式是:

ldap[s]://host[:port]/basedn[?[attribute][?[scope][?[filter]]]]

``scope``必须是baseonesub之一,通常是最后一个(默认是base,但它在这个应用中通常没意义)。``attribute``可以指定一个属性,在这种情况中它被用作ldapsearchattribute的一个值。如果``attribute``为空,那么``filter``可以被用作ldapsearchfilter的一个值。

URL模式ldaps选择LDAPS方法来在SSL上建立LDAP连接,等效于使用ldapscheme=ldaps。要使用StartTLS操作加密LDAP连接,可以用普通的URL模式ldap并且在ldapurl之外指定ldaptls选项。

对于非匿名绑定,ldapbinddnldapbindpasswd必须被指定为独立选项。

LDAP URL 当前只支持 OpenLDAP,而不支持 Windows。

注意

不允许将简单绑定的选项中混合用于搜索与绑定的选项。

在使用search+bind模式时,可以用ldapsearchattribute指定的单个属性执行搜索,或者使用ldapsearchfilter指定的自定义搜索过滤器执行搜索。指定ldapsearchattribute=foo等效于指定ldapsearchfilter="(foo=$username)"。如果两个选项都没有被指定,则默认为ldapsearchattribute=uid

如果KingbaseES是用OpenLDAP作为LDAP客户端库编译的,则ldapserver设置可以省略。在这种情况下,主机名和端口列表通过RFC 2782 DNS SRV记录查找。 _ldap._tcp.DOMAIN的名称被查出,当DOMAIN被从ldapbasedn中提取出来时。

例如,一个简单绑定 LDAP 配置的例子:

host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"

当请求一个作为数据库用户someuser到数据库服务器的连接时,KingbaseES 将尝试使用cn=someuser, dc=example, dc=net和客户端提供的口令来绑定到 LDAP 服务器。如果那个连接成功,将被授予数据库访问。

例如,一个搜索与绑定配置的例子:

host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid

当请求一个作为数据库用户someuser到数据库服务器的连接时,KingbaseES 将尝试匿名绑定(因为没有指定ldapbinddn)到 LDAP 服务器,在指定的基础 DN 下执行一次对于(uid=someuser)的搜索。如果找到一个项,则它将尝试使用找到的信息和客户端提供的口令进行绑定。如果第二个连接成功,将被授予数据库访问。

例如,一个 URL 的相同搜索与绑定配置:

host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"

一些支持根据 LDAP 认证的其他软件使用相同的 URL 格式,因此很容易共享该配置。

例如,一个search+bind配置的例子,它使用ldapsearchfilter而不是ldapsearchattribute来允许用用户ID或电子邮件地址进行认证:

host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"

例如,一个search+bind配置的例子,它使用DNS SRV程序来查找域名example.net的LDAP服务的主机名和端口:

host ... ldap ldapbasedn="dc=example,dc=net"

提示

如例子中所示,由于 LDAP 通常使用逗号和空格来分割一个 DN 的不同部分,在配置 LDAP选项时通常有必要使用双引号包围的参数值。

6.5.3. 配置LDAP身份验证

6.5.3.1. 安装

1. KingbaseES数据库安装 无特殊要求,常用方式安装即可。安装完后initdb初始化数据目录。

  1. Openldap安装

本文示例使用openldap进行LDAP身份验证配置,项目官方只发布源代码,不对外发布安装包。

提示

项目官方网站为: OpenLDAP, Main Page。

可通过两种方式安装:

  • Yum 安装

直接通过yum 安装打包好的版本。安装需要root用户权限。

#yum -y install openldap openldap-clients openldap-servers

拷贝配置文件,并修改文件owner 为ldap ,ldap用户在安装时会自动创建。

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown -R ldap /var/lib/ldap/DB_CONFIG

启动服务和查看服务状态验证安装是否成功

# systemctl start slapd
# systemctl status slapd

如需配置ldap服务开机自动启动,可以执行:

# systemctl enable slapd

配置文件路径为: /etc/openldap 数据文件路径为: /var/lib/ldap

  • 从源代码安装

如系统没有安装包,可选择从源码编译安装。

解压和编译源码包:

#tar xvf openldap-2.4.44.tgz
#cd openldap-2.4.44
# ./configure
# make depend
# make

安装需要root用户:

# su root -c 'make install'

默认安装路径为/usr/local 默认配置文件路径为: /usr/local/etc/openldap 默认可执行文件路径为: /usr/local/bin 默认数据库文件路径为: /usr/local/var/openldap-data

6.5.3.2. 配置LDAP服务器

通过yum安装和从源代码安装的openldap配置方式不一样。分开说明两种方式安装后的配置方法。

6.5.3.2.1. Yum安装后的配置方式

Yum安装后的配置文件默认路径为:/etc/openldap 下 ,请勿用编辑器直接编辑slapd.d目录下文件。使用ldapadd ldapdelete ldapmodify工具来编辑。

  1. 修改管理员密码

运行命令将明文密码“123456”转换成密文,修改密码是配置文件要用密文。

#slappasswd -s 123456
{SSHA}+lWgh5egDLskOg0dPAx5YWTFDExQ8lE6

编辑配置文件changepwd.ldif,配置文件为导入数据使用,请勿将直接在/etc/openldap/slapd.d目录下编辑。文件内容如下:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}+lWgh5egDLskOg0dPAx5YWTFDExQ8lE6

使用ldappad命令将修改的密码导入:

#ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
  1. 导入常用schema

常用schema文件位于/etc/openldap/schema/目录下,使用ldapadd命令导入:

# 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"

# 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"

 # 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"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=collective,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=corba,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=duaconf,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=dyngroup,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=java,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=misc,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=openldap,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=pmi,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=ppolicy,cn=schema,cn=config"
  1. 自定义域名

域名(domain name)可视为ldap以树形组织数据信息时的一个分支或者类别。同一个domain name下的数据在以domain name为树根的树内。下文中域管理员密码延用之前生成的密码,如需修改请重新以slappasswd命令生成新的密码密文。 自定义域名为kingbase.com,管理员账号为domainadmin,域名和管理员账号可根据需要修改内容红色部分,域名仅是组织数据的一个形式,不一定与所在主机域名一样。 编辑域名配置文件changedomain.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=domainadmin,dc=kingbase,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=kingbase,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=domainadmin,dc=kingbase,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}+lWgh5egDLskOg0dPAx5YWTFDExQ8lE6

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=domainadmin,dc=kingbase,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=domainadmin,dc=kingbase,dc=com" write by * read

将配置文件数据导入:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.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"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"
  1. 创建组织

创建名为kingbaseES的组织,并且根据数据库的角色分类,创建4类组织单元,DBA、SSO、SAO、USER。 编辑配置文件base.ldif,内容如下:

dn: dc=kingbase,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: kingbaseES
dc: kingbase

dn: cn=orgadmin,dc=kingbase,dc=com
objectClass: organizationalRole
cn: orgadmin
description: Directory Manager

dn: ou=DBA,dc=kingbase,dc=com
objectClass: organizationalRole
ou: DBA

导入数据,导入数据时需要输入domainadmin的密码,请参照1. 修改管理员密码处设置的密码。

# ldapadd -x -D cn=domainadmin,dc=kingbase,dc=com -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=kingbase,dc=com"

adding new entry "cn=orgadmin,dc=kingbase,dc=com"

adding new entry "ou=DBA,dc=kingbase,dc=com"

5. 增加用户 LDAP内用户数据与KingbaES数据库内的用户是独立的。LDAP只负责对用户名和密码的验证,因此数据库内必须有相同名字的用户才能登录。

生成新用户todd的登录密码todd123 密文:

# slappasswd  -s todd123
{SSHA}vqCJ1KnL1xddvu5JXHaAH8h33f72Vgga

编辑配置文件users.ldif ,内容如下:

dn: uid=todd,ou=DBA,dc=kingbase,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: todd
sn: database
userPassword: {SSHA}vqCJ1KnL1xddvu5JXHaAH8h33f72Vgga
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /home/todd

可在同一该文件内编辑多个用户,以空行分开多个用户的数据。

导入用户数据:

# ldapadd -x -D cn=domainadmin,dc=kingbase,dc=com -W -f user.ldif
Enter LDAP Password:
adding new entry "uid=todd,ou=DBA,dc=kingbase,dc=com"

6.5.3.2.2. 源码安装后的配置方式

  1. slapd.conf 配置文件

# vim /usr/local/etc/openldap/ slapd.conf

增加所有schema,并修改域名 内容如下:

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/collective.schema
include         /usr/local/etc/openldap/schema/corba.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/duaconf.schema
include         /usr/local/etc/openldap/schema/dyngroup.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/java.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema
include         /usr/local/etc/openldap/schema/pmi.schema
include         /usr/local/etc/openldap/schema/ppolicy.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

pidfile         /usr/local/var/run/slapd.pid
argsfile        /usr/local/var/run/slapd.args

# Load dynamic backend modules:
# modulepath    /usr/local/libexec/openldap
# moduleload    back_mdb.la
# moduleload    back_ldap.la

# Sample security restrictions
#       Require integrity protection (prevent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
#       Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
#       by self write
#       by users read
#       by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn.  (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!

#######################################################################
# MDB database definitions
#######################################################################

database        mdb
maxsize         1073741824
suffix          "dc=kingbase,dc=com"
rootdn          "cn=Manager,dc=kingbase,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          secret
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /usr/local/var/openldap-data
# Indices to maintain
index   objectClass     eq
  1. 启动服务器

以前端模式启动,输出调试信息:

# /usr/local/libexec/slapd -d 256
60a6bd0e @(#) $OpenLDAP: slapd 2.4.44 (May 18 2021 09:47:03) $
[email protected]:/home/todd/LDAP/openldap-2.4.44/servers/slapd
60a6bd0e mdb_monitor_db_open: monitoring disabled; configure monitor database to enable
60a6bd0e slapd starting

可通过以下命令检查服务器是否正常启动:

# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=kingbase,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
  1. 创建组织

编辑配置文件base.ldif,内容如下:

dn: dc=kingbase,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: kingbaseES
dc: kingbase

dn: cn=orgadmin,dc=kingbase,dc=com
objectClass: organizationalRole
cn: orgadmin
description: Directory Manager

dn: ou=DBA,dc=kingbase,dc=com
objectClass: organizationalRole
cn: DBA
ou: DBA

导入数据,LDAP 密码为字符串 secret:

# /usr/local/bin/ldapadd -x -D "cn=Manager,dc=kingbase,dc=com"  -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=kingbase,dc=com"

adding new entry "cn=orgadmin,dc=kingbase,dc=com"

adding new entry "ou=DBA,dc=kingbase,dc=com"
  1. 创建用户

LDAP内用户数据与KingbaES数据库内的用户是独立的。LDAP只负责对用户名和密码的验证,因此数据库内必须有相同名字的用户才能登录。

生成新用户todd的登录密码todd123 密文:

# slappasswd -s todd123
{SSHA}OoPRlB2dPrJIzTygJgWJrkLnqFgg6Ibu

编辑配置文件users.ldif ,内容如下:

dn: uid=todd,ou=DBA,dc=kingbase,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: todd
sn: database
userPassword: {SSHA}OoPRlB2dPrJIzTygJgWJrkLnqFgg6Ibu
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /home/todd

可在同一该文件内编辑多个用户,以空行分开多个用户的数据。

导入用户数据:

# ldapadd -x -D cn=Manager,dc=kingbase,dc=com -W -f user.ldif
Enter LDAP Password:
adding new entry "uid=todd,ou=DBA,dc=kingbase,dc=com"
  1. 可验证导入kingbase.com域的数据

# ldapsearch -x -b 'dc=kingbase,dc=com' '(objectClass=*)'
# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectClass=*)
# requesting: ALL
#

# kingbase.com
dn: dc=kingbase,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: kingbaseES
dc: kingbase

# orgadmin, kingbase.com
dn: cn=orgadmin,dc=kingbase,dc=com
objectClass: organizationalRole
cn: orgadmin
description: Directory Manager

# DBA, kingbase.com
dn: ou=DBA,dc=kingbase,dc=com
objectClass: organizationalRole
cn: DBA
ou: DBA

# todd, DBA, kingbase.com
dn: uid=todd,ou=DBA,dc=kingbase,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: todd
sn: database
userPassword:: e1NTSEF9T29QUmxCMmRQckpJelR5Z0pnV0pya0xucUZnZzZJYnU=
loginShell: /bin/bash
uidNumber: 503
gidNumber: 500
homeDirectory: /home/todd
uid: todd

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

6.5.3.3. 配置KingbaseES

6.5.3.3.1. 配置参数

安装的KingbaseES V8R6数据库版本需选择打开—with-ldap编译选项,否则无法支持LDAP认证方式。

6.5.3.3.2. 配置LDAP认证方式

1. 编辑数据目录下的sys_hba.conf配置文件 增加使用ldap认证的项。例如,要从本地登录的todd用户使用位于192.168.45.157上的LDAP服务器认证。则增加一条认证项:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             todd                                   ldap ldapserver=192.168.45.157 ldapprefix="uid=" ldapsuffix=",ou=DBA,dc=kingbase,dc=com"
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             0.0.0.0/0               scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
host    all             all             ::0/0                   scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

6.5.3.3.3. 创建数据库用户

如数据库内已存在用户忽略此步骤。

haoqinghe=# create user todd with password '123456';
CREATE ROLE

注意

上述示例中,数据库内用户todd使用密码123456,而LDAP内的todd用户使用密码todd123。当使用LDAP认证时使用密码todd123来登录而不是123456。

6.5.4. 通过LOAP身份验证连接KingbaseES

使用ksql本地登录数据库,会匹配sys_hba.conf中使用LDAP认证的项,触发LDAP认证过程。

输入正确口令时,登录成功。例如,输入LDAP内的todd用户的正确口令todd123:

$ ksql  -U todd -p 7777
用户 todd 的口令:
输入 "help" 来获取帮助信息.

WARNING:License file will expire in 23 days.

todd=>

输入其他口令时登录失败,并提示LDAP authentication failed:

$ ksql  -U todd -p 7777
用户 todd 的口令:
ksql: 错误: 无法连接到服务器:FATAL:  LDAP authentication failed for user "todd"

6.5.5. 配置LOAP身份验证的常见问题

  1. 服务器拒绝连接

LDAP服务器监听在tcp的 389端口,如服务正常无法访问服务的情况,请检查防火墙设置。设置防火墙允许访问:

# firewall-cmd --add-service=ldap –permanent
# firewall-cmd --reload

或者关闭防火墙

# systemctl stop firewalld

关闭SELinux

# setenforce 0
  1. 导入数据时报错

报错如下:

ldap_modify: Insufficient access (50)

可能是执行命令的用户权限不足,请尝试以root执行。

  1. ldif配置文件错误

报错如下:

ldapmodify: wrong attributeType at line xxx

可能对应的空行只有空格字符,删掉空格。属性名和值之间以空格分开,每行头部和尾部无多余空格。

  1. 数据库版本不支持ldap

数据库无法启动,并且log日志有:

invalid authentication method "ldap": not supported by this build

信息时,表示当前版本的数据库不支持LDAP认证方式,请重新安装支持的版本。

5 objectClass问题

导入用户数据时提示:

additional info: objectClass: value #0 invalid per syntax

可能是因为导入的schema不全引起的,请按照导入schema的步骤全部导入。

你可能感兴趣的:(KingbaseES产品手册,数据库,安全,服务器)