教程 > DB2 教程 > DB2 基础 阅读:22

DB2 LDAP

简介

LDAP 是轻量级目录访问协议。 LDAP 是一种全球目录服务、行业标准协议,它基于客户端-服务器模型并在 TCP/IP 堆栈之上的一层上运行。 LDAP 提供了一种连接、访问、修改和搜索 Internet 目录的工具。

LDAP 服务器包含以目录树形式组织的信息。 客户端要求服务器提供信息或对特定信息执行某些操作。 服务器通过提供所需信息(如果有)来回答客户端,或者将客户端引向另一台服务器以根据所需信息采取行动。 客户端然后从另一台服务器获取所需的信息。

目录的树结构在所有参与的服务器上保持相同。 这是 LDAP 目录服务的一个突出特点。 因此,无论客户端引用哪个服务器,客户端总是以无差错的方式获得所需的信息。 在这里,我们使用 LDAP 来验证 IBM DB2 作为操作系统验证的替代品。

有两种类型的 LDAP:

*. 透明的 *. 插件

让我们看看如何配置透明 LDAP。


配置透明 LDAP

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

LDAP 服务器配置

创建一个 SLAPD.conf 文件,其中包含有关 LDAP 中的用户和组对象的所有信息。 当您安装 LDAP 服务器时,默认情况下它会在您的机器上配置基本的 LDAP 目录树。

下表为修改后的文件配置。

代码框用黄色突出显示的文本表示以下含义:

DBA user-id = “db2my1”, group = “db1my1adm”, password= “db2my1” Admin user-id = “my1adm”, group = “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 配置更改服务器和域信息的位置。 如果我们在同一系统中使用服务器,则在“host”和“base”中将其称为“localhost”,我们可以配置在 LDAP 服务器的 SLAPD.conf 文件中提到的内容。

可插入身份验证模型 (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 客户端后,验证两者的通信。

第一步:检查您的本地 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 服务器中定义与数据库关联的所有用户。 同样的原则也适用于群组插件。

我们必须决定哪些插件对于我们的系统是必需的。 在 CONNECTATTACH 语句中提供的用户 ID 和密码验证发生在客户端系统上的情况下使用的客户端身份验证插件。 因此数据库管理器配置参数 SRVCON_AUTHAUTHENTICATION 需要设置为值 CLIENT。 客户端身份验证很难保证安全,通常不推荐使用。 通常建议使用服务器插件,因为如果客户端执行 CONNECTATTACH 语句,它会在服务器端验证用户 ID 和密码,这是一种安全的方式。 服务器插件还提供了一种映射 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 命令,我们将收到安全错误消息。 因为,DB2 安全配置还没有为我们的 LDAP 环境正确配置。


自定义两种配置

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 立即生效,我们的 DB2 环境与 LDAP 完美地工作。

我们可以注销并再次登录到 db2inst2 用户。

现在我们的实例正在使用 LDAP 目录。

查看笔记

扫码一下
查看教程更方便