• 金仓数据库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) $
    todd@localhost.localdomain:/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的步骤全部导入。

  • 相关阅读:
    html+css+javascript+jquery+bootstarp响应式旅行社旅游平台网站模板(14页)
    【题解】同济线代习题一.6.5
    工业自动化控制通信协议Profinet系列-3、CoDeSys软PLC方案介绍
    华为审核被拒提示: 您的应用存在(最近任务列表隐藏风险活动)的行为,不符合华为应用市场审核标准
    ABB机器人如何在自动运行中修改目标点位的坐标数据?
    前端代码格式化规范总结
    Redis
    你用 Excel 做的最酷的事情是什么?
    Vscode配置C#编程环境(win10)
    linux 性能分析perf
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126096448