项目背景

默认情况下,DB2 数据库通过操作系统进行安全认证,这样造成的问题是访问 DB2 的账号和密码必须以本地方式保存在每台数据库服务器上。大型企业中拥有众多的数据库服务器和用户账户,利用轻量级目录访问协议(LDAP)进行账号统一管理才是目前主流的数据库安全认证解决方案。

随着 Red Hat 等各类 linux 操作系统的流行,许多的 DB2 数据库需要部署在 Linux 上面。由于微软的 windows Active Directory(AD)是业界广泛使用的企业级 LDAP,很多企业的 LDAP 服务器采用的是 AD,如何将 Linux/Unix DB2 系统与 Windows AD 目录管理进行整合就成了摆在我们面前的难题。理论上 DB2 支持在各种 Unix/Linux 平台通过 AD 进行认证,但是如何进行具体配置并一步一步的实现,目前此类解决方案还比较少。

解决方案介绍

DB2 数据库服务器支持通过 LDAP 服务器实现安全认证,客户机与数据库连接后,就可以从 LDAP 目录检索服务器的目录信息,不再要求每个客户机将目录信息以本地方式存储在每台计算机上,实现了企业级账户目录的集中管理和认证。本文以 Red Hat Enterprise Linux 为例讲解了如何通过 DB2 LDAP 安全插件配置方式与 Windows AD 进行集成和认证。

图 1. DB2 LDAP 安全插件认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
运行环境:

操作系统: Red Hat Enterprise Linux 6(RHEL 6)

DB2 版本: DB2 Enterprise Server Edition 9.5 及更高版本

Windows 服务器:Windows Server 2008 及更高版本

AD 服务器: Microsoft Active Directory (MSAD) V2008 及更高版本

Samba 和 Winbind 集成 RHEL 和 Windows AD

Winbind 是 Samba 套件的功能之一。它允许 Unix/Linux 系统利用 Windows NT 的用户帐号信息。为了实现对 Linux 操作系统上的所有用户通过 AD 进行身份认证,必须在 Red Hat Enterprise Linux 上面安装对应的 Samba,Kerberos 和 Winbind 程序包,并且在 AD 服务器上创建对应的账户(包括 db2 实例和受保护账户)。

清单 1. 用 yum 安装 Samba,Kerberos 和相应 Winbind 程序包 [[email protected] etc]#yum -y install pam_krb5* krb5-libs* krbafs krb5-workstation* krb5-devel* krb5-auth samba samba-winbind* samba-client* samba-swat*

使用 AD 进行 Linux 身份认证比较推荐的方式是配置可插入认证模块(PAM)和服务交互模块 NSS(Name Service Switch)去调用 Linux Winbind 守护进程。使用 AD 用户账户登录 Red Hat Enterprise Linux 通过认证 (Authentication) 来实现。pam_winbind 提供 LDAP 统一认证和密码更新等服务。服务交互模块(NSS)允许 AD 目录服务器用作用户和组信息的主源。

图 2.使用 Winbind 通过微软 AD 进行身份认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证

接下来在 Windows AD 目录服务器上创建 db2 实例用户 db2inst1,受防护的用户 db2fenc1,普通用户 db2usr1,以及对应的组 db2iadm1,db2fadm1,db2grp1。在进行 DB2 LDAP 测试之前,要确保所有建立在 AD 上面的账户都可以成功登录到 Linux.

图 3. 在 AD 服务器上创建 db2 用户
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
清单 2. AD 服务器的主要配置信息如下: LDAP server: 16.187.145.2 LDAP server name: dc01.falcon.com Realm: FALCON.COM Bind Path: dc=FALCON,dc=COM LDAP port: 389 Server time: Mon, 09 May 2016 16:50:58 PDT KDC server: 16.187.145.2 Server time offset: 0

设置 Linux 系统以通过 LDAP 执行组查询。在 /etc/nsswitch.conf 文件中找到 group, passwd 和 shadow 条目,并确保输入 winbind 作为查询方法。

清单 3. group,passwd 和 shadow 条目的示例: passwd: files winbind #shadow: files winbind group: files winbind shadow: files winbind DB2 LDAP 插件配置

目前 DB2 实现 LDAP 身份认证主要有两种方式,一种是透明的 LDAP,另外一种是使用 DB2 LDAP 插件. 由于/etc/nsswitch.conf 中采用了 winbind 查询方法,本文采用的是 DB2 LDAP 安全插件配置方式。LDAP 安全插件模块允许 DB2 数据库管理器去认证定义在 LDAP 目录中的用户。

从 DB2 V9.5 开始,DB2 LDAP 插件已经被包含在默认的安装目录下,在 DB2 实例目录中可以找到已编译的二进制 LDAP 插件模块。

表 1. 各个 LDAP 插件模块在 DB2 实例中所处的位置。 对于 64 位 UNIX 和 Linux 系统 插件模块类型 位置 服务器 /sqllib/security64/plugin/IBM/server 客户机 /sqllib/security64/plugin/IBM/client 组 /sqllib/security64/plugin/IBM/group

DB2 LDAP 插件模式不支持一部分用户定义在 AD 目录服务器,一部分用户定义在本地操作系统。所有的用户都必须定义在 AD 目录服务器上。为了安全考量,我们不采用客户端插件,服务器插件才是推荐的安全方式。因为服务器插件方式,当客户端尝试连接数据库时,用户名和密码验证发生在服务器端。

DB2 数据库管理器和注册表变量设置

使用 D B 2 命令行 处理器 更新 数据库管理器 启用 LDAP 插 件模块 。

清单 4.服务器插件模块配置: UPDATE DBM CFG USING SRVCON_PW_PLUGIN IBMLDAPauthserver 清单 5. DB2 LDAP 注册表变量配置: DB2_ENABLE_LDAP=YES DB2LDAP_BASEDN=falcon.com DB2COMM=TCPIP 清单 6. 用以下命令更新数据库管理器配置参数: UPDATE DBM CFG USING SRVCON_PW_PLUGIN IBMLDAPAUTHSERVER UPDATE DBM CFG USING AUTHENTICATION SERVER_ENCRYPT UPDATE DBM CFG USING DIAGLEVEL 4

使用 db2 terminate 命令来终止所有正在运行的 DB2 命令行处理器后端进程,然后使用 db2stop 和 db2start 命令来停止并重新启动实例。

Red Hat Linux 操作系统,以实例用户身份,DB2 LDAP 插件配置文件。$HOME/sqllib/cfg/IBMLDAPSecurity.ini。 注意此配置文件中所有注释行已经被省略,只列出了关键配置参数。

清单 7. IBMLDAPSecurity.ini 配置 LDAP_HOST = dc01.falcon.com USER_OBJECTCLASS = user USER_BASEDN = DC=falcon,DC=com USERID_ATTRIBUTE = sAMAccountName AUTHID_ATTRIBUTE = sAMAccountName GROUP_OBJECTCLASS = group GROUP_BASEDN = DC=falcon,DC=com GROUPNAME_ATTRIBUTE = cn GROUP_LOOKUP_METHOD = USER_ATTRIBUTE GROUP_LOOKUP_ATTRIBUTE = memberOf SEARCH_DN = CN=db2inst1,CN=Users,DC=falcon,DC=com SEARCH_PW = db2inst1_AD_pwd DEBUG = true

为了防止其他用户读取到配置信息,必须将 IBMLDAPSecurity.ini 文件权限修改为 640。

清单 8. IBMLDAPSecurity.ini 权限 -rw-r----- 1 db2inst1 db2iadm1 7411 May 10 13:43 IBMLDAPSecurity.ini 为 LDAP 目录服务扩展 Active Directory 模式

在 DB2 数据库管理器可以将信息存储在 Active Directory 中之前,需要扩展目录模式以包括新的 DB2 数据库对象类和属性。向目录模式中添加新对象类和属性的过程称为模式扩展。

必须通过运行"DB2 模式安装"程序 db2schex 来扩展 Active Directory 的模式。应当在安装 DB2 产品并创建数据库之前运行此命令,否则必须手动注册节点和编目数据库。

注意此 db2schex 程序是 db2 Windows 版安装包。db2schex 程序位于产品 CD-ROM 上的以下位置:x:\db2\windows\utilities\,其中 x: 是 DVD 驱动器盘符,也可以从 IBM 官网下载。

要更新模式,必须是"模式管理员"组的成员,或已被授予更新模式的权限。

图 4. AD 服务器上运行 db2schex 扩展模式
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
DB2 数据库注册和编目

使用 Microsoft LDAP 客户机时,LDAP 用户与操作系统用户帐户相同。但是,使用 IBM LDAP 客户机时,在使用 DB2 数据库管理器之前,必须配置当前登录用户的 LDAP 用户专有名称 (DN) 和密码。

清单 9. Linux 操纵系统上执行 db2ldcfg 配置命令 [[email protected] ~]$ db2ldcfg -u "cn=db2inst1,cn=users,dc=falcon,dc=com" -w db2inst1_AD_pwd [[email protected] cfg]$ db2 register db2 server in ldap as ldapnode protocol tcpip DB20000I The REGISTER LDAP command completed successfully.

当 DB2 服务器注册成功后可以在活动目录服务界面(ADSI)上看到 CN=System,CN=IBM,CN=DB2 目录被成功注册。

图 5. Windows ADSI CN=System,CN=IBM,CN=DB2 目录
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
清单 10. 在 Linux 上查看 db2 节点信息: [[email protected] cfg]$ db2 list node directory Node Directory Number of entries in the directory = 1 Node 1 entry: Node name = LDAPNODE Comment = Directory entry type = LDAP Protocol = TCPIP Hostname = mobile.falcon.com Service name = 55001

DB2 服务器注册前创建的数据库如本文的 sample 需要重新使用别名 ADSAMPLE 编目在 LDAPNODE 节点下面,才会成功反映在 AD 目录中.新创建的数据库 (TESTAD) 会自动创建在 AD 目录服务器上, 无需重新编目。

清单 11. 在 Linux DB2 服务器编目和更新 AD 注册之前创建的数据库。 [[email protected] ~]$ db2 catalog ldap database sample as adsample at node ldapnode DB20000I The CATALOG LDAP DATABASE command completed successfully. [[email protected] ~]$ db2 list db directory System Database Directory Number of entries in the directory = 3 Database 1 entry: Database alias = TESTAD Database name = TESTAD Local database directory = /home/FALCON/db2inst1 Database release level = 10.00 Comment = Directory entry type = Indirect Catalog database partition number = 0 Alternate server hostname = Alternate server port number = Database 2 entry: Database alias = SAMPLE Database name = SAMPLE Local database directory = /home/FALCON/db2inst1 Database release level = 10.00 Comment = Directory entry type = Indirect Catalog database partition number = 0 Alternate server hostname = Alternate server port number = Database 3 entry: Database alias = ADSAMPLE Database name = SAMPLE Node name = LDAPNODE Database release level = 10.00 Comment = Directory entry type = LDAP Catalog database partition number = -1 Gateway node name = Alternate server node name = Alternate server gateway node name = [[email protected] ~]$ db2 update ldap node ldapnode DB20000I The UPDATE LDAP command completed successfully. [[email protected] ~]$ db2 refresh ldap immediate DB20000I The REFRESH LDAP IMMEDIATE command completed successfully. [[email protected] ~]$ db2 refresh ldap database directory DB20000I The REFRESH LDAP DATABASE DIRECTORY command completed successfully.

如下图所示,DB2 的节点和数据库编目名称已经成功反映在微软 AD 服务器中。

图 6. ADSI DB2 节点和数据库目录
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
DB2 LDAP 与 AD 服务器和组认证测试

在 Windows 上,DB2 数据库管理器支持使用"两部分"用户标识,并将"两部分"用户标识映射至"两部分"授权标识。

考虑由域和用户标识组成的 Windows 操作系统"两部分"用户标识,例如:FALCON\db2inst1。在本示例中,FALCON 是域,db2inst1 是用户名。在 DB2 数据库系统中,可以指定应将此"两部分"用户标识映射至"一部分"授权标识还是"两部分"授权标识。

将"两部分"用户标识映射至"一部分"用户标识这一缺省映射允许用户使用以下命令连接至数据库:

清单 12. “两部分”用户连接数据库测试 [[email protected] ~]$ db2 connect to adsample user 'falcon\db2inst1' using "db2inst1_AD_pwd" Database Connection Information Database server = DB2/LINUXX8664 10.5.5 SQL authorization ID = DB2INST1 Local database alias = ADSAMPLE

如果每次数据库连接时采用默认的域,不需要每次都输入域名,Winbind 默认域配置如下:

清单 13. 修改 winbind 默认域 [[email protected] ~]$ grep -i winbind /etc/samba/smb.conf winbind enum users = yes winbind enum groups = yes winbind use default domain = true winbind offline logon = false

通过输入用户名和密码,用户可以连接到数据库 sample,不需要输入域名。

清单 14. “一部分”用户连接数据库测试 [[email protected] ~]$ db2 connect to adsample user db2inst1 using db2inst1_AD_pwd Database Connection Information Database server = DB2/LINUXX8664 10.5.5 SQL authorization ID = DB2INST1 Local database alias = ADSAMPLE

查看 db2diag 诊断信息,我们也可以发现 db2 LDAP 正在通过指定的 AD 服务器进行认证。

图 7. db2diag 诊断信息判断 DB2 LDAP 是否生效
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
结束语

本文主要介绍了如何在 Red Hat Linux 操作系统上集成微软 AD 进行 DB2 LDAP 认证。需要说明的是从 DB2 V9.7 FP1 及更高版本开始,DB2 数据库服务器在 Linux 操作系统上以透明方式使用基于 LDAP 的认证。由于笔者采用的 Linux Winbind + Windows AD 认证方式,在/etc/nsswitch.conf 配置方法不同,所以透明方式不支持,但是 DB2 LDAP 插件模块完全支持此业务场景。

参考资源

Integrating Red Hat Enterprise Linux 6 with Active Directory

Database Security Guide

本文系统(windows)相关术语:三级网络技术 计算机三级网络技术 网络技术基础 计算机网络技术

分页:12
转载请注明
本文标题:在 Linux 操作系统上集成 DB2 和 Windows Active Directory 进行 LDAP 安全认证
本站链接:http://www.codesec.net/view/481800.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(windows) | 评论(0) | 阅读(39)