上一节:

  DB2 - LDAP

  • 介绍

    LDAP 是轻量级目录访问协议。LDAP 是一种全球目录服务、行业标准协议,它基于客户端-服务器模型,运行在 TCP/IP 堆栈之上的一层。LDAP 提供了连接、访问、修改和搜索 Internet 目录的工具。
    LDAP 服务器包含以目录树形式组织的信息。客户端要求服务器提供信息或对特定信息执行某些操作。服务器通过提供所需信息(如果有)来回答客户端,或者将客户端引至另一台服务器以对所需信息采取行动。然后客户端从另一个服务器获取所需的信息。
    目录的树结构在所有参与的服务器上保持相同。这是 LDAP 目录服务的一个突出特点。因此,无论客户端引用哪个服务器,客户端总是以无错误的方式获取所需的信息。在这里,我们使用 LDAP 来验证 IBM DB2 作为操作系统验证的替代品。
    LDAP 有两种类型:
    1. Transparent
    2. Plug-in
    让我们看看如何配置一个Transparent的 LDAP。
  • 配置Transparent LDAP

    要开始配置Transparent LDAP,您需要配置 LDAP 服务器。

    LDAP 服务器配置

    创建一个 SLAPD.conf 文件,其中包含有关 LDAP 中用户和组对象的所有信息。当您安装 LDAP 服务器时,默认情况下它在您的机器上配置有基本的 LDAP 目录树。
    下表为修改后的文件配置。
    代码框以黄色突出显示的文本表示以下含义:
    DBA 用户 ID = “db2my1”,组 = “db1my1adm”,密码 = “db2my1” 管理员用户 ID = “my1adm”,组 = “dbmy1ctl”。
    
    # base dn: example.com 
    dn: dc=example,dc=com 
    dc: example 
    o: example 
    objectClass: organization 
    objectClass: dcObject 
    # pc box db 
    dn: dc=db697,dc=example,dc=com 
    dc: db697 
    o: db697 
    objectClass: organization 
    objectClass: dcObject 
    # 
    # Group: dbadm 
    # 
    dn: cn=dbmy1adm,dc=db697,dc=example,dc=com 
    cn: dbmy1adm 
    objectClass: top 
    objectClass: posixGroup 
    gidNumber: 400 
    objectClass: groupOfNames 
    member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com 
    memberUid: db2my1 
    # 
    # User: db2 
    # 
    dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com 
    cn: db2my1 
    sn: db2my1 
    uid: db2my1 
    objectClass: top 
    objectClass: inetOrgPerson 
    objectClass: posixAccount 
    uidNumber: 400 
    gidNumber: 400 
    loginShell: /bin/csh 
    homeDirectory: /db2/db2my1 
    # 
    # Group: dbctl 
    # 
    dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com 
    cn: dbmy1ctl 
    objectClass: top 
    objectClass: posixGroup 
    gidNumber: 404 
    objectClass: groupOfNames 
    member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com 
    memberUid: my1adm 
    # 
    # User: adm 
    # 
    dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com 
    cn: my1adm 
    sn: my1adm 
    uid: my1adm 
    objectClass: top 
    objectClass: inetOrgPerson 
    objectClass: posixAccount 
    uidNumber: 404 
    gidNumber: 404 
    loginShell: /bin/csh 
    homeDirectory: /home/my1adm 
    
    将上述文件保存为“/var/lib/slapd.conf”,然后通过以下命令执行此文件,将这些值添加到 LDAP 服务器中。这是一个linux命令;不是 db2 命令。
    
    ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f 
    /var/lib/slapd.conf 
    
    在 LDAP 服务器上注册 DB2 用户和 DB2 组之后,登录到您已安装实例和数据库的特定用户。您需要配置 LDAP 客户端以向客户端确认您的服务器所在的位置,无论是远程还是本地。

    LDAP 客户端配置

    LDAP 客户端配置保存在文件“ldap.conf”中。配置参数有两个文件,一个是通用的,一个是特定的。您应该在“/etc/ldap.conf”找到第一个,而后者位于“/etc/openldap/ldap.conf”。
    以下数据在通用 LDAP 客户端配置文件中可用
    
    # File: /etc/ldap.conf  
    # The file contains lots of more entries and many of them  
    # are comments. You show only the interesting values for now  
    host localhost  
    base dc=example,dc=com  
    ldap_version 3  
    pam_password crypt  
    pam_filter objectclass=posixAccount  
    nss_map_attribute uniqueMember member 
    nss_base_passwd dc=example,dc=com  
    nss_base_shadow dc=example,dc=com  
    nss_base_group dc=example,dc=com 
    
    您需要根据 DB2 配置更改服务器位置和域信息。如果我们在同一系统中使用服务器,则在“主机”和“基地”将其称为“本地主机”,您可以配置 LDAP 服务器的“SLAPD.conf”文件中提到的内容。
    Pluggable Authentication Model (PAM) 是一种用于身份验证服务的 API。这是使用加密密码和 posixAccount 类型的特殊 LDAP 对象进行 LDAP 身份验证的通用接口。此类型的所有 LDAP 对象都表示具有可移植操作系统接口 (POSIX) 属性的帐户的抽象。
    网络安全服务 (NSS) 是一组库,用于支持启用安全的客户端和服务器应用程序的跨平台开发。这包括 SSL、TLS、PKCS S/MIME 和其他安全标准等库。
    您需要为此接口指定基本 DN 和两个附加映射属性。OpenLDAP 客户端配置文件包含以下条目:
    
    host localhost  
    base dc=example,dc=com
    
    至此,您只需定义 LDAP 服务的主机和基本 DN。
  • 验证 OpenLDAP 环境

    配置 LDAP 服务器和 LDAP 客户端后,验证两者的通信。
    Step1:检查您的本地 LDAP 服务器是否正在运行。使用以下命令:
    
    ps -ef | grep -i ldap
    
    此命令应列出代表您的 LDAP 服务器的 LDAP 守护程序:
    
    /usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on
    
    这表明您的 LDAP 服务器正在运行并正在等待来自客户端的请求。如果之前的命令没有这样的过程,您可以使用“rcldap”命令启动 LDAP 服务器。
    
    rcldap start 
    
    当服务器启动时,您可以通过发出以下命令在文件 '/var/log/messages/ 中监视它。
    
    tail –f /var/log/messages 
    
  • 使用 ldapsearch 测试与 LDAP 服务器的连接

    ldapsearch 命令打开到 LDAP 服务器的连接,绑定到它并执行搜索查询,可以使用特殊参数“-x”指定使用 -x 参数而不是使用简单的身份验证机制连接到您的 LDAP 服务器更复杂的机制,如简单身份验证和安全层 (SASL)
    
    ldapsearch –x  
    
    LDAP 服务器应回复下面给出的响应,其中包含 LDAP 数据交换格式 (LDIF) 中的所有 LDAP 条目。
    
    # extended LDIF  
    #  
    # LDAPv3  
    # base <> with scope subtree  
    # filter: (objectclass=*) 
    # requesting: ALL  
    # example.com  
    dn: dc=example,
    dc=com  dc: example  
    o: example  
    objectClass: organization  
    objectClass: dcObject  
    # search result  
    search: 2  
    result: 0 Success  
    # numResponses: 2  
    # numEntries: 1  
    
  • 配置 DB2

    在使用 LDAP 服务器和客户端之后,您需要配置我们的 DB2 数据库以与 LDAP 一起使用。让我们讨论一下如何安装和配置数据库以使用我们的 LDAP 环境进行 DB2 用户身份验证过程。
  • 配置 DB2 和 LDAP 交互插件

    IBM 为 DB2 提供了一个带有 LDAP 插件的免费包。DB2 包包括三个 DB2 安全插件,分别用于以下各项:
    • 服务器端认证
    • 客户端身份验证
    • 组查找
    根据您的要求,您可以使用三个插件中的任何一个或全部使用它们。此插件不支持在 LDAP 中定义某些用户而在操作系统中定义其他用户的环境。如果您决定使用 LDAP 插件,则需要在 LDAP 服务器中定义与数据库关联的所有用户。同样的原则也适用于组插件。
    您必须决定哪些插件对我们的系统是强制性的。在客户端系统上发生 CONNECT 或 ATTACH 语句中提供的用户 ID 和密码验证的场景中使用的客户端身份验证插件。所以需要将数据库管理器配置参数 SRVCON_AUTH 或 AUTHENTICATION 设置为值 CLIENT。客户端身份验证难以保护,通常不推荐使用。通常推荐使用服务器插件,因为它执行用户 ID 和密码的服务器端验证,如果客户端执行 CONNECT 或 ATTACH 语句,这是安全的方式。服务器插件还提供了一种映射 LDAP 用户 ID DB2 授权 ID 的方法。
    现在您可以开始安装和配置 DB2 安全插件,您需要考虑 DB2 所需的目录信息树。DB2 使用间接授权,这意味着用户属于一个组,并且该组被授予较少的权限。您需要在 LDAP 目录中定义所有 DB2 用户和 DB2 组。
  • 图片

    LDIF 文件 openldap.ldif 应包含以下代码:
    
    #  
    # LDAP root object  
    # example.com  
    #  
    dn: dc=example,
    dc=com  
    dc: example  
    o: example  
    objectClass: organization  
    objectClass: dcObject 
     #  
     # db2 groups  
     #  
     dn: cn=dasadm1,dc=example,dc=com  
     cn: dasadm1  
     objectClass: top  
     objectClass: posixGroup  
     gidNumber: 300  
     objectClass: groupOfNames 
     member: uid=dasusr1,cn=dasadm1,dc=example,dc=com  
     memberUid: dasusr1  
     dn: cn=db2grp1,dc=example,dc=com  
     cn: db2grp1  
     objectClass: top  
     objectClass: posixGroup  
     gidNumber: 301  
     objectClass: groupOfNames  
     member: uid=db2inst2,cn=db2grp1,dc=example,dc=com  memberUid: db2inst2  
     dn: cn=db2fgrp1,dc=example,dc=com  
     cn: db2fgrp1  
     objectClass: top 
     objectClass: posixGroup  
     gidNumber: 302  
     objectClass: groupOfNames 
     member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com  
     memberUid: db2fenc1  
     #  
     # db2 users  
     #  
     dn: uid=dasusr1,
     cn=dasadm1,
     dc=example,dc=com  
     cn: dasusr1  
     sn: dasusr1  
     uid: dasusr1  
     objectClass: top  
     objectClass: inetOrgPerson 
     objectClass: posixAccount 
     uidNumber: 300  
     gidNumber: 300  
     loginShell: /bin/bash 
     homeDirectory: /home/dasusr1  
     dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com  
     cn: db2inst2  
     sn: db2inst2  
     uid: db2inst2  
     objectClass: top  
     objectClass: inetOrgPerson  
     objectClass: posixAccount  
     uidNumber: 301  
     gidNumber: 301  
     loginShell: /bin/bash  
     homeDirectory: /home/db2inst2  
     dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com  
     cn: db2fenc1  
     sn: db2fenc1  
     uid: db2fenc1  
     objectClass: top  
     objectClass: inetOrgPerson  
     objectClass: posixAccount  
     uidNumber: 303  
     gidNumber: 303  
     loginShell: /bin/bash  
     homeDirectory: /home/db2fenc1 
     
    创建一个名为“db2.ldif”的文件并将上面的示例粘贴到其中。使用此文件,将定义的结构添加到您的 LDAP 目录。
    要将 DB2 用户和 DB2 组添加到 LDAP 目录,您需要将用户作为“rootdn”绑定到 LDAP 服务器,以获得确切的权限。
    执行以下语法以使用 LDIF 文件“db2.ldif”中定义的所有对象填充 LDAP 信息目录
    
    ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif 
    
    使用更多参数执行搜索结果
    
    ldapsearch –x |more 
    
  • 为 DB2 使用准备文件系统

    为我们的 LDAP 用户 db2inst2 创建实例。该用户需要在主目录中有两个空文件的主目录。在创建新实例之前,您需要创建一个将成为实例所有者的用户。
    创建实例用户后,您应该必须在用户主目录中创建文件“.profile”和“.login”,DB2 将对其进行修改。要在目录中创建此文件,请执行以下命令:
    
    mkdir /home/db2inst2  
    mkdir /home/db2inst2/.login 
    mkdir /home/db2inst2/.profile  
    
    您已经在 LDAP 目录中注册了与 DB2 相关的所有用户和组,现在您可以创建一个名为“db2inst2”的实例,实例所有者 ID 为“db2inst2”,并使用运行用户所需的受保护用户 ID“db2fenc1”定义函数 (UDF) 或存储过程。
    
    /opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2  
    DBI1070I Program db2icrt completed successfully.  
    
    现在检查实例主目录。您可以看到名为“sqllib”的新子目录以及为 DB2 使用定制的 .profile 和 .login 文件。
  • 为 DB2 中的 LDAP 支持配置认证公共插件

    将所需的 LDAP 插件复制到适当的 DB2 目录:
    
    cp            ///v10/IBMLDAPauthserver.so  
    /home/db2inst2/sqllib/security/plugin/server/. 
     
    cp             ///v10/IBMLDAPgroups.so 
    /home/db2inst2/sqllib/security/plugin/group/. 
    
    一旦将插件复制到指定目录,您就可以登录到 DB2 实例所有者并更改数据库管理器配置以使用这些插件。
    
    Su – db2inst2  
    db2inst2> db2 update dbm cfg using svrcon_pw_plugin 
    IBMLDAPauthserver 
    db2inst2> db2 update dbm cfg using group_plugin 
    IBMLDAPgroups 
    db2inst2> db2 update dbm cfg using authentication 
    SERVER_ENCRYPT 
    db2inst2> db2stop 
    db2inst2> db2start  
    
    此修改在您启动 DB2 实例后生效。重新启动实例后,您需要安装和配置名为“IBMLDAPSecurity.ini”的主 DB2 LDAP 配置文件,以使 DB2 插件与当前的 LDAP 配置一起工作。
    IBMLDAPSecurity.ini 文件包含
    
    ;-----------------------------------------------------------  
    ; SERVER RELATED VALUES  
    ;-----------------------------------------------------------  
    ; Name of your LDAP server(s).  
    ; This is a space separated list of LDAP server addresses,  
    ; with an optional port number for each one:  
    ; host1[:port] [host2:[port2] ... ]  
    ; The default port number is 389, or 636 if SSL is enabled.  
    LDAP_HOST = my.ldap.server  
    ;-----------------------------------------------------------  
    ; USER RELATED VALUES  
    ;-----------------------------------------------------------  
    rs  
    ; LDAP object class used for use USER_OBJECTCLASS = posixAccount  
    ; LDAP user attribute that represents the "userid"  
    ; This attribute is combined with the USER_OBJECTCLASS and  
    ; USER_BASEDN (if specified) to construct an LDAP search  
    ; filter when a user issues a DB2 CONNECT statement with an  
    ; unqualified userid. For example, using the default values 
    ; in this configuration file, (db2 connect to MYDB user bob  
    ; using bobpass) results in the following search filter:  
    OrgPerson)(uid=bob)  
    ; &(objectClass=inet USERID_ATTRIBUTE = uid  
    representing the DB2 authorization ID  
    ; LDAP user attribute, AUTHID_ATTRIBUTE = uid  
    ;-----------------------------------------------------------  
    ; GROUP RELATED VALUES  
    ;-----------------------------------------------------------  
    ps  
    ; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames  
    at represents the name of the group  
    ; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn  
    ; Determines the method used to find the group memberships  
    ; for a user. Possible values are:  
    ; SEARCH_BY_DN - Search for groups that list the user as  
    ; a member. Membership is indicated by the  
    ; group attribute defined as  
    ; GROUP_LOOKUP_ATTRIBUTE. 
    ; USER_ATTRIBUTE - A user's groups are listed as attributes  
    ; of the user object itself. Search for the  
    ; user attribute defined as  
    TRIBUTE to get the groups.  
    ; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN  
    ; GROUP_LOOKUP_ATTRIBUTE  
    ; Name of the attribute used to determine group membership,  
    ; as described above.  
    llGroups  
    ; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member 
    
    现在在当前实例目录中找到文件 IBMLDAPSecurity.ini 文件。将上面的示例内容复制到相同的内容中。
    
    Cp 
    //db2_ldap_pkg/IBMLDAPSecurity.ini  
    /home/db2inst2/sqllib/cfg/ 
    
    现在您需要使用下面给出的两种语法重新启动您的 DB2 实例:
    
    db2inst2> db2stop 
    Db2inst2> db2start 
    
    此时,如果您尝试“db2start”命令,您将收到安全错误消息。因为,尚未为您的 LDAP 环境正确配置 DB2 安全配置。
  • 自定义两种配置

    保持 LDAP_HOST 名称方便,该名称在 slapd.conf 文件中配置。
    现在编辑 IMBLDAPSecurity.ini 文件并输入 LDAP_HOST 名称。这两个文件中的 LDAP_HOST 名称必须相同。
    文件内容如下图所示:
    
          ;-----------------------------------------------------------  
          ; SERVER RELATED VALUES  
          ;-----------------------------------------------------------  
          LDAP_HOST = localhost  
          ;-----------------------------------------------------------  
          ; USER RELATED VALUES  
          ----------------------------  
          ;-------------------------------  
          USER_OBJECTCLASS = posixAccount  
          USER_BASEDN = dc=example,dc=com  
          USERID_ATTRIBUTE = uid  
          AUTHID_ATTRIBUTE = uid  
          ;-----------------------------------------------------------  
          ; GROUP RELATED VALUES  
          ;-----------------------------------------------------------  
          GROUP_OBJECTCLASS = groupOfNames 
          GROUP_BASEDN = dc=example,dc=com  
          GROUPNAME_ATTRIBUTE = cn  
          GROUP_LOOKUP_METHOD = SEARCH_BY_DN  
          GROUP_LOOKUP_ATTRIBUTE = member 
    
    更改这些值后,LDAP 立即生效,您的带有 LDAP 的 DB2 环境可以完美运行。
    您可以注销并再次登录到“db2inst2”用户。
    现在您的实例正在使用 LDAP 目录。
上一节: