WebSphere MQ 7.1 帮助需求 - 访问或安全性

Posted

技术标签:

【中文标题】WebSphere MQ 7.1 帮助需求 - 访问或安全性【英文标题】:WebSphere MQ 7.1 Help Need - Access or Security 【发布时间】:2012-02-11 18:50:06 【问题描述】:

我想在 WebSphere MQ 服务器上创建一个队列管理器和一个队列,我想做两件事 1) 从客户端使用 WMQ Explorer 访问队列管理器和队列 2) 编写一个Java 独立应用程序,该应用程序在客户端机器上运行并从队列中放入和接收消息。

但是,我遇到了身份验证异常。请让我知道我做错了什么?

Linux 服务器盒:

我安装了 WebSphere MQ v7.1 队列管理器 QM_TEST 已创建(crtmqmstrmqm 命令) 本地队列 @9​​87654324@ 创建(runmqscdefine qlocal) 已定义 SVRCONN 通道 (DEFINE CHANNEL (TEST_CHANNEL) CHLTYPE (SVRCONN) TRPTYPE (TCP)) 启动了一个监听器 (runmqlsr -t tcp -m QM_TEST -p 1414)

Linux 客户端:

尝试使用主机名、IP 地址、队列管理器名称和通道名称来显示/隐藏队列管理器;但是我收到以下错误:

Access not permitted. You are not authorized to perform this operation. (AMQ4036)
Severity: 10 (Warning)
Explanation: The queue manager security mechanism has indicated that the userid associated with this request is not authorized to access the object.

尝试使用java代码访问队列管理器和队列,重点如下:

public void sendMail(Mail mail)  MQConnectionFactory cf = new
MQQueueConnectionFactory(); Connection conn = null; try  //config
cf.setHostName("hostname"); cf.setPort(1414);
cf.setQueueManager("QM_TEST"); cf.setChannel("TEST_CHANNEL");
cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);//WMQ_CM_DIRECT_TCPIP);
WMQ_CM_CLIENT

conn = cf.createConnection(); //fails here

但是我得到以下错误:

发生错误:JMSWMQ2013:安全认证无效 为具有连接模式的 QueueManager 'QM_TEST' 提供的 “客户端”和主机名“主机名(1414)”。

你能帮忙吗?如何传递安全认证信息?现在,如果我也可以禁用安全性就可以了。只需要让它工作吗?

如果我需要提供更多信息,请告诉我。


更新: 我创建了 'mq-user' linux 用户(mq-users 组)。启用 CHLAUTH(默认)。 创建队列管理器 QM_TEST(使用 sudo mqm)后,我再次使用 sudo mqm 执行了以下 mqsc 命令:

DEFINE QLOCAL(TEST_QUEUE)
SET AUTHREC PROFILE('TEST_QUEUE') OBJTYPE(QUEUE) PRINCIPAL('mq-user') AUTHADD(PUT,GET)
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('mq-user') AUTHADD(CONNECT)
DEFINE CHANNEL (TEST_CHANNEL) CHLTYPE (SVRCONN) TRPTYPE (TCP)
SET CHLAUTH(TEST_CHANNEL) TYPE(ADDRESSMAP) ADDRESS('xxx.xx.xxx.*') MCAUSER('mq-user')
DEFINE LISTENER (TEST_LISTENER) TRPTYPE (TCP) CONTROL (QMGR) PORT (1414)
START LISTENER (TEST_LISTENER)

我仍然收到 AMQ4036 access not allowed 错误。请注意,我从以第三用户身份登录的第三台远程计算机(客户端计算机)访问队列管理器和队列。但是我意识到我可以传递“mq-user”凭据。我希望某处有明确的分步说明,WebShere MQ 71。信息中心对我来说不够清楚。

这里还缺少什么?

【问题讨论】:

【参考方案1】:

在 WMQ v7.1 中,队列管理器默认不允许管理连接。因此,如果您使用的 ID 是 mqm 或者如果它在 MQ 服务器上的 mqm 组中,它将没有访问权限。解决此问题的简单(阅读:不安全)方法是删除包含规则的 CHLAUTH 记录。 IBM 已发布有关此here 的技术说明。

一个长期且更好的解决方案是保留不允许管理员访问的 CHLAUTH 记录,而是使用不同的用户 ID 进行连接。当然,该 ID 需要存在于 MQ 服务器中,并且需要在经过授权的组中。有关该主题的更多信息,请查看幻灯片和网络研讨会录制 here。

当您准备好重新启用安全性时,您可以在 t-rob.net 找到有关使用哪些 setmqaut 命令的大量信息,我在其中存档了 IMPACT 和欧洲 WSTC 会议的安全演示和实验室。

【讨论】:

非常感谢罗。我关闭了 CHLAUTH(暂时),我能够通过 MQ Explorer 访问队列管理器(和队列),还能够通过客户端机器上的 Java 应用程序将消息放入其中。 我希望按照建议保留 CHLAUTH ENABLE。我可以创建一个不同的用户 ID。我想这不应该是 mqm 组的一部分吗?被授权的组是什么意思?最佳做法是什么?创建一个“mq_user”用户并将该用户的权限分配给队列管理器和其中的相关队列对象?另外,如何使用 JMS 传递此 ID?您有这方面的文章或示例应用程序吗? 是的,mqm 组中的任何 ID 都将具有完全的管理员访问权限。 WMQ 按组授权,而不是按 ID(Windows 除外)。例如,您在 Linux 上使用 -p 选项发出 setmqaut。 WMQ 查找该 ID 的主要组并将访问控制附加到该 ,而不是 ID。这可能会导致意想不到的结果,所以我总是建议不要使用 -p 选项!要使用 JMS 传递 ID,只需在连接工厂 cf.createConnection("id", "passwd") 上指定它并注意未检查密码。请参阅 t-rob.net/links 上的强化 WebSphere MQ 安全演示 p#10 我创建了第二个 QM,我使用 ALTER QMGR CHLAUTH(DISABLED) 禁用了 CHLAUTH 但我遇到了同样的安全错误。我认为这就是我对第一个使其工作的队列所做的。 您是否在 WMQ Explorer 中启用了授权事件并安装了 SupportPac MS0P?如果是这样,您可以查看事件消息,它们会告诉您哪个 API 调用失败、正在使用的 ID、调用失败的对象等。我怀疑您正在使用低特权 ID 进行连接,并且您需要在新的 QMgr 上运行 setmqaut 命令来授权该组。【参考方案2】:

T。罗布是 100% 正确的。但是,请不要误读,因为您可以关闭安全性。 IBM 将 V7.1 设计为具有这种严格的安全性是有原因的。他们正在积极应对 PCI-DSS 的立法和行业指南。向 IBM 致敬。

【讨论】:

以上是关于WebSphere MQ 7.1 帮助需求 - 访问或安全性的主要内容,如果未能解决你的问题,请参考以下文章

查找有关已配置 WebSphere MQ 队列管理器的位置的服务器详细信息

数据传输王者之争:如何在IBM WebSphere MQ与TongLINK/Q间做选择?

IBM websphere MQ 消息发送与获取

WebSphere MQ 配置问题

IBM Websphere MQ 基本实验操作

从 WebSphere 8 运行 Java 8 MQ 应用程序时出错