MQ 9.3 SDR/RCVR通道AUTHINFO配置问题及权限管控咨询
IBM MQ 9.3 通道权限配置问题解答
问题场景
局域网内部署2台Linux虚拟机与1台Win10主机,已搭建双向分布式队列架构的QM-A(VM1)与QM-B(VM2),均连接Win10上的MQ Explorer,MQ版本为9.3,整体运行正常。
希望为SDR和RCVR通道添加安全层,仅允许已拥有队列管理器访问权限的特定用户查看通道消息。已尝试创建AUTHINFO对象并配置队列管理器使用该对象,但部署后未达到预期效果——非指定用户jackson执行./amqsget仍能获取测试消息。
示例配置MQSC命令如下:
DEFINE AUTHINFO('LDAP_AUTHINFO') AUTHTYPE(IDPWLDAP) USRFIELD('uid') SHORTUSR('cn') BASEDNU('ou=users, o=bob, c=ireland') CLASSUSR('inetOrgPerson') LDAPPWD('bob1234') LDAPUSER('cn=jason,ou=users,o=bob,c=ireland') ALTER QMGR CONNAUTH('LDAP_AUTHINFO') REFRESH SECURITY TYPE(CONNAUTH) ALTER QMGR CHLAUTH(ENABLED) SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(ADD) SET CHLAUTH('RCVR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(ADD) SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') ACTION(ADD) SET CHLAUTH('RCVR') TYPE(BLOCKUSER) USERLIST('*') ACTION(ADD) DEFINE CHANNEL(SOMESENDER) CHLTYPE(SDR) CONNAUTH('localhost(1800)') TRPTYPE(TCP) XMITQ(ALREADYDEFINED) START CHANNEL(SOMESENDER)
1. 如何正确配置以允许LDAP用户仅查看SDR/RCVR通道消息?
原配置存在两个核心问题:
USERMAP规则中MCAUSER参数错误:MCAUSER需要映射到操作系统本地用户或LDAP同步到本地的账号,而非AUTHINFO对象名;BLOCKUSER('*')规则优先级导致合法用户被拦截:MQ的CHLAUTH规则按匹配精度执行,全匹配的BLOCK规则会覆盖之前的USERMAP规则。
正确配置步骤
步骤1:确保LDAP AUTHINFO配置有效
DEFINE AUTHINFO('LDAP_AUTHINFO') AUTHTYPE(IDPWLDAP) USRFIELD('uid') SHORTUSR('cn') BASEDNU('ou=users, o=bob, c=ireland') CLASSUSR('inetOrgPerson') LDAPPWD('bob1234') LDAPUSER('cn=jason,ou=users,o=bob,c=ireland') ALTER QMGR CONNAUTH('LDAP_AUTHINFO') REFRESH SECURITY TYPE(CONNAUTH)
步骤2:为通道启用LDAP认证
修改SDR/RCVR通道,指定使用LDAP_AUTHINFO做连接认证:
ALTER CHANNEL('SDR') CHLTYPE(SDR) CONNAUTH('LDAP_AUTHINFO') ALTER CHANNEL('RCVR') CHLTYPE(RCVR) CONNAUTH('LDAP_AUTHINFO')
步骤3:删除原错误CHLAUTH规则
SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(DELETE) SET CHLAUTH('RCVR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(DELETE) SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') ACTION(DELETE) SET CHLAUTH('RCVR') TYPE(BLOCKUSER) USERLIST('*') ACTION(DELETE)
步骤4:添加精准的CHLAUTH规则
先允许指定用户jason映射到合法MCA用户(例如本地mqm账号),再阻止其他未匹配用户:
-- 允许jason通过SDR/RCVR通道,并映射到mqm用户 SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('mqm') ADDRESS('*') ACTION(ADD) SET CHLAUTH('RCVR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('mqm') ADDRESS('*') ACTION(ADD) -- 阻止除jason外的所有用户 SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') EXCLUDEUSER('jason') ACTION(ADD) SET CHLAUTH('RCVR') TYPE(BLOCKUSER) USERLIST('*') EXCLUDEUSER('jason') ACTION(ADD)
步骤5:配置队列访问权限
限制只有mqm用户(即jason映射后的账号)能浏览/获取队列消息:
-- 替换TEST.Q为实际目标队列名 SET AUTHREC PROFILE('TEST.Q') OBJTYPE(QUEUE) PRINCIPAL('mqm') AUTHADD(BROWSE,GET) SET AUTHREC PROFILE('TEST.Q') OBJTYPE(QUEUE) PRINCIPAL('*') AUTHREMOVE(BROWSE,GET)
步骤6:刷新安全设置
REFRESH SECURITY TYPE(CONNAUTH) REFRESH SECURITY TYPE(CHLAUTH)
2. 是否可创建基于指定用户列表的账号密码认证AUTHINFO对象?
IBM MQ 9.3不支持直接创建仅包含指定用户列表的AUTHINFO对象,但可以通过以下两种方式实现类似效果:
方式1:使用操作系统本地用户认证(IDPWOS)
创建基于操作系统用户数据库的AUTHINFO,再通过CHLAUTH规则限制允许的用户:
-- 创建操作系统用户认证的AUTHINFO DEFINE AUTHINFO('LOCAL_AUTHINFO') AUTHTYPE(IDPWOS) ADOPTCTX(YES) ALTER QMGR CONNAUTH('LOCAL_AUTHINFO') REFRESH SECURITY TYPE(CONNAUTH) -- 仅允许jason通过通道 SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('mqm') ADDRESS('*') ACTION(ADD) SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') EXCLUDEUSER('jason') ACTION(ADD)
方式2:结合SSL证书DN映射(复杂场景)
如果需要完全脱离LDAP/OS用户体系,可以为指定用户颁发SSL证书,通过通道的SSLCAUTH属性强制证书认证,再用CHLAUTH规则映射证书DN到合法MCA用户。但这种配置复杂度较高,仅推荐在特殊场景使用。
内容的提问来源于stack exchange,提问作者scaleTillDust
相关产品推荐
相关产品推荐

