IBM MQ 安全性 - 队列管理器连接认证和授权

本文详细介绍了IBM MQ的连接认证和授权机制,包括本地绑定和客户端绑定的差异,以及MQCSP用户ID和登录用户名的使用。重点讲解了CONNAUTH和CHLAUTH的配置,阐述了连接认证和授权的过程,同时提供了不同场景下的连接示例,帮助理解MQ安全设置的重要性。
摘要由CSDN通过智能技术生成

有两种类型的 MQ 绑定可以使用 MQ 应用程序连接到 MQ 服务器队列管理器 (QMGR):
 

  • 本地绑定
  • 客户端绑定

本地绑定

通过本地绑定,MQ 应用程序在运行 MQ 服务器的同一台机器上运行。在本地绑定中,应用程序使用共享内存和管道,因此我们不需要任何通道来访问 QMGR 及其对象。因此,通道认证 (CHLAUTH) 配置不适用于此处,但连接认证 (CONNAUTH) 配置适用。

客户端绑定

通过客户端绑定,MQ 客户端应用程序和 QMGR 之间的通信使用网络连接来连接到队列管理器并访问其对象这意味着它需要一个侦听器和一个服务器连接 (SVRCONN) MQ 通道来连接到 QMGR 及其对象。CONNAUTH 和 CHLAUTH 配置都适用于此处。当客户端应用程序连接时,有两种类型的用户 ID 可以传递给队列管理器:

  • 登录用户名
  • MQCSP 用户标识

登录用户名

这是运行 MQ 应用程序的系统登录用户标识。需要在队列管理器的系统上将相同的用户 ID 定义为用于授权的操作系统用户。例如,如果应用程序在用户下运行,即“user1”,则必须在 MQ 服务器计算机上定义“user1”。
 

MQCSP 用户 ID

MQ 应用程序可以将此用户 ID 提供给队列管理器以进行身份​​验证。提供了用户 ID 和密码。在这里,MQ 应用程序可以选择在 MQCONNX 调用队列管理器的 MQCSP 结构中提供用户 ID 和密码。
 

安全

MQ 提供两种类型的用户 ID 安全性来访问队列管理器及其对象:

  • 连接认证
  • 授权

连接认证

这种可选的身份验证方法允许 MQ 客户端应用程序提供用户 ID 和密码以进行身份​​验证以访问 MQ 队列管理器。您可以通过 MQCSP 结构向 MQ 应用程序提供用户 ID 和密码。

在 MQ 客户端应用程序中调用 MQCONNX API

您需要创建一个 MQCSP 结构以在 CSPUserIdPtr 和 CSPPasswordPtr 字段中传递用户 ID 和密码,并在 MQCNO 结构的 SecurityParmsPtr 中传递该结构。

例如:

MQCSP csp = {MQCSP_DEFAULT}; 
csp.AuthenticationType = MQCSP_AUTH_USER_ID_AND_PWD; 
csp.CSPUserIdPtr = "user2"; 
csp.CSPUserIdLength = strlen("user2"); /* 最大:MQ_CLIENT_USER_ID_LENGTH */ 
csp.CSPPasswordPtr = "password"; 
csp.CSPPasswordLength = strlen("password");/* 最大:MQ_CSP_PASSWORD_LENGTH*/ 
MQCNO cno = {MQCNO_DEFAULT}; 
cno.Version = MQCNO_VERSION_5; 
cno.SecurityParmsPtr = &csp; 
MQCONNX(QMName, &cno, &hConn, &CompCode, &Reason);

将环境变量用于样本应用程序:“MQSAMP_USER_ID”环境变量用于一些 IBM 提供的样本,
例如 amqsputc。
$export MQSAMP_USER_ID=user2(Unix)
C:\> set MQSAMP_USER_ID=user2(Windows)
注意:当您运行 MQ 示例应用程序时,它会要求输入密码以访问 stdout 中的队列管理器。

授权

IBM MQ 中提供的授权服务组件称为对象权限管理器 (OAM)。OAM 默认为每个队列管理器自动激活。OAM 为其控制访问的每个 IBM MQ 对象维护一个访问控制列表 (ACL)
在 Windows 系统上,用户 ID 和组 ID 都可以出现在 ACL 中。这意味着可以将权限授予单个用户和组。在 UNIX 系统上,默认情况下只有组 ID 可以出现在 ACL 中。但是,您可以将队列管理器配置为接受用户标识。MQ 系统管理员可以使用setmqaut来设置权限。setmqaut -m QMGR -t qmgr -p user1 +connect setmqaut -m QMGR -t queue -n localq -p user1 +get +put

您可以使用控制命令dspmqaut来显示权限和dmpmqaut转储权限。例如:

[mqm@goya bin]$ ./dspmqaut -m QMEMBFE -t qmgr -g mqm
Entity mqm has the following authorizations for object QMEMBFE:
        inq
        set
        connect
        altusr
        crt
        dlt
        chg
        dsp
        setid
        setall
        ctrl
        system
[mqm@goya bin]$ ./dspmqaut -m QMEMBFE -t qmgr -p mqm
Entity mqm has the following authorizations for object QMEMBFE:
        inq
        set
        connect
        altusr
        crt
        dlt
        chg
        dsp
        setid
        setall
        ctrl
        system

配置CONNAUTH

使用 CONNAUTH,可以将队列管理器配置为使用提供的用户 ID 和密码来检查应用程序是否有权访问资源。

Using CONNAUTH, a queue manager can be configured to use a supplied user ID and password to check whether an application has authority to access resources. By default CONNAUTH is set to SYSTEM.DEFAULT.AUTHINFO.IDPWOS in the Queue manager property. CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)

这个SYSTEM.DEFAULT.AUTHINFO.IDPWOS是 QMGR 中定义的身份验证信息对象。您可以使用此对象创建身份验证策略。或者,您可以创建自己的 AUTHINFO 对象并更新队列管理器中的 CONNAUTH 属性。

$runmqsc <QMGR> display
authinfo(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
AUTHTYPE(IDPWOS) ADOPTCTX(YES) DESCR( )
CHCKCLNT(
OPTIONAL) CHCKLOCL(OPTIONAL) FAILDLAY(1) AUTHENMD (OS)
ALTDATE(2018-05-17) ALTTIME(16.26.22)


要验证客户端连接,请使用 AUTHINFO 属性 CHCKCLNT,并使用属性 CHCKLOCL 验证本地绑定连接。CHCKCLNT 属性有四个值:

  • NONE:关闭验证。
  • OPTIONAL:提供用户 ID 和密码不是强制性的,但如果提供了用户 ID 和密码,那么它将确保它们是有效的一对。
  • REQUIRED:每个 MQ 应用程序都必须提供用户 ID 和密码。
  • REQDADM:这意味着特权用户必须提供有效的用户 ID 和密码,但非特权用户被视为可选设置。

注意:MQ 应用程序和 MQ 队列管理器系统之间的操作系统用户 ID 和密码应该是一对有效的。

CHLAUTH

通道认证记录用于保护用于连接到队列管理器的 MQ 通道。通道认证记录允许用户设置规则以允许或阻止到访问队列管理器的入站连接。

场景

让我们讨论几个场景,这些场景将展示外部客户端如何连接到 MQ。

注意:假设在队列管理器中启用了 CONNAUTH。

场景 1

MQ 客户端应用程序使用 SVRCONN 通道进行连接,并使用有效的登录用户作为“user1”发送消息,而不使用 MQCSP。”

以下是显示 MQ 如何验证连接的步骤:

  • MQ 客户端调用 MQCONNX 连接到队列管理器。在内部,客户端将登录用户 ID“user1”传递给 MQ 服务器 QMGR。
  • 然后,队列管理器从 OS 存储库中获取用户“user1”的组成员详细信息,并将其提供给 OAM。

注意:您必须在运行 QM 的系统中创建用户名“user1”作为操作系统用户。

  • MQ OAM 检查“user1”是否有特权,它需要密码,由于您没有发送正确的密码,它失败并返回 2035。
  • MQ OAM 检查“user1”是否被授权连接到队列管理器及其对象以执行由 MQ 应用程序调用的相应操作。如果'user1'的特定授权不在OAM中,MQ将返回2035给应用程序,否则连接将成功。

注意:您必须使用 setmqaut 授权“user1”连接到队列管理器并访问其对象。

示例:如果 MQ 应用程序要将消息放在 MQ 队列管理器系统中队列管理器 QMGR1 的队列 Q1 上,请运行:

setmqaut -m QMGR1 -t qmgr -p user1 +connect

setmqaut -m QMGR1 -t queue -n Q1 -p user1 +put +get

场景 2

验证 MQ 客户端应用程序以通过 SVRCONN 通道连接到队列管理器,并通过使用 MQCSP 结构仅发送有效的 MQCSP 用户标识“user2”和密码来放置消息

  • MQ 客户端应用程序在“user1”下运行,它是登录用户 ID。MQ 客户端应用程序在调用 MQCONNX API 时在 MQCSP 结构中传递用户 ID“user2”和密码“xxxxx”。
  • MQ 检查 CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IPDWOS) 对象以进行下一次验证。
  • 如果 CHCKCLNT 设置为 REQUIRED/OPTIONAL/REQDADM,它会检查操作系统用户存储库中是否存在“user2”,其密码是否与 MQ 应用程序提供的密码相同。
  • 如果操作系统用户“user2”及其密码不是有效对,即如果“user2”不是操作系统用户或 MQ 队列管理器系统上的“user2”密码与提供的密码不匹配,则它返回 MQRC 2035。
  • 如果用户 ID“user2”及其密码是有效对,它会检查 ADOPTCTX 值。
  • 如果 ADOPTCTX 设置为 YES 并且 CHLAUTH 规则设置一些其他用户 ID。然后,队列管理器不检查客户端登录用户 ID“user1”,而是检查“user2”或 CHLAUTH 规则指定的用户。
  • 如果 ADOPTCTX 设置为 NO 并且 CHLAUTH 规则未设置为某个其他用户 ID,则队列管理器将使用 MQ 应用程序登录用户“user1”进行检查。
  • 一旦队列管理器知道要检查哪个用户,它就会验证它是否存在于 OS 用户存储库中。
  • MQ 队列管理器检查用户是否存在于 MQ OAM 中。如果用户是 mqm 组的一部分,如果不是,则 MQ 向客户端应用程序返回 2035,否则继续下一步。
  • MQ 客户端应用程序将成功连接 MQ QMGR。

注意:如果 CHCKCLNT 设置为 NONE,它将直接连接到 QMGR,而不进行任何用户 ID (user2) 和密码身份验证检查,但它会检查“user1”是否有权连接到队列管理器。
 

配置步骤

  1. ADOPTCTX 设置为 YES 并且 CHLAUTH 规则设置一些其他用户标识,那么队列管理器不会验证 MQ 应用程序登录用户标识“user1”。
  2. 如果 ADOPTCTX 设置为 NO 并且 CHLAUTH 规则设置用户 ID“user1”,那么您需要确保在登录用户下,正在运行的 MQ 客户端必须作为操作系统用户存在于 MQ 服务器中。例如'user1'是登录用户,在MQ服务器端使用如下命令设置MQ权限:
    setmqaut -m QMGR1 -t qmgr -p user1 +connect
    setmqaut -m QMGR1 -t queue -n Q1 -p user1 +put
  3. 在 MQ 队列管理器系统中创建操作系统用户“user2”。
  4. 在 MQ 客户端应用程序中创建 MQCSP 结构,将用户指定为 user2 和密码。
  5. 在 MQ CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IPDWOS) 对象中,指定 CHCKCLNT(REQUIRED) 以强制执行用户 ID 和密码身份验证。如果您想将 MQCSP 身份验证保留为可选,请将它们设置为可选或 REQDADM。
  6. 在 QMGR1 中创建 SVRCONN 通道 APP1.SVRCONN。
  7. 如果您不想使用“user2”来运行 SVRCONN 通道 APP1.SVRCONN,请更改 ADOPTCTX(NO)。
  8. 使用 amqsputc Q1 QMGR1 放置消息。在这种情况下,APP1.SVRCONN 通道将作为“user1”运行。
  9. 如果你想使用'user2'来运行服务器连接通道,并采用'user2'做进一步的授权,改变ADOPTCTX(YES)。SVR 通道将作为“user2”运行。
  10. 如果 ADOPTCTX 设置为 YES,则必须将“user2”添加到 QMGR1 的访问 OAM 控制列表中。
    setmqaut -m QMGR1 -t qmgr -p user2 +connect
    setmqaut -m QMGR1 -t queue -n Q1 -p user2 +put
  11. 导出 MQSERVER=APP1.SVRCONN/tcp/MQServer_IP(PORT)
  12. 您应该能够使用 MQ 客户端应用程序成功地将消息放入 Q1,使用以下命令:
    amqsputc Q1 QMGR1

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值