提供对 IBM WebSphere MQ 的匿名访问

Posted

技术标签:

【中文标题】提供对 IBM WebSphere MQ 的匿名访问【英文标题】:Provide anonymous access to IBM WebSphere MQ 【发布时间】:2017-02-21 16:46:25 【问题描述】:

我是IBM WebSphere MQ 的新手。我在docker 容器中运行它。用户“sampleuser”和“root”是容器内“mqm”组的一部分。我能够以“root”用户和“sampleuser”的身份从主机访问 MQ(我也在主机中创建了“sampleuser”)。

我想启用匿名身份验证,这样无论客户端用户 ID 是什么,他们都应该能够访问 MQ。我虽然MCAUSER('sampleuser') 会为我做这件事。但它不起作用。我从 eclipse IBM 资源管理器中收到错误 AMQ4036(未授权)。请指教。

ALTER QMGR PSNPRES(SAFE)
ALTER QMGR PSMODE (ENABLED)
DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('sampleuser') REPLACE

更新 #1 我更新了代码以允许特权用户。但还是失败了。

ALTER QMGR PSNPRES(SAFE)
ALTER QMGR PSMODE (ENABLED)

SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('*NOACCESS')

DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('sampleuser') REPLACE

这是我得到的日志。

EXPLANATION:
The user ID 'sampleuser' and its password were checked because the user ID is
privileged and the queue manager connection authority (CONNAUTH) configuration
refers to an authentication information (AUTHINFO) object named
'SYSTEM.DEFAULT.AUTHINFO.IDPWOS' with CHCKCLNT(REQDADM). 

This message accompanies a previous error to clarify the reason for the user ID
and password check.
ACTION:
Refer to the previous error for more information. 

Ensure that a password is specified by the client application and that the
password is correct for the user ID. The authentication configuration of the
queue manager connection determines the user ID repository. For example, the
local operating system user database or an LDAP server. 

To avoid the authentication check, you can either use an unprivileged user ID
or amend the authentication configuration of the queue manager. You can amend
the CHCKCLNT attribute in the CHLAUTH record, but you should generally not
allow unauthenticated remote access.

更新 #2 基于 JohnMC 的回答和对 Provide anonymous access to IBM WebSphere MQ 的引用,我终于成功了.. :)

ALTER QMGR PSNPRES(SAFE)
ALTER QMGR PSMODE (ENABLED)
ALTER QMGR CHLAUTH(DISABLED)
SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('*NOACCESS')
DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('sampleuser') REPLACE
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
REFRESH SECURITY TYPE(CONNAUTH)

【问题讨论】:

我建议检查队列管理器错误日志以找出失败的原因。 如果您查看队列管理器错误日志,它将准确地告诉您失败的原因,无论是“通道身份验证阻止您”、“未知用户”还是“用户没有具有正确的权限”,或者“当队列管理器配置为期望密码时,用户没有提供密码”等等。正如您所看到的,原因有很多,因此错误日志对帮助您很重要。 我已经添加了日志。 更新中的ALTER QMGR CHLAUTH(DISABLED)SET CHLAUTH(*)是互斥的。禁用CHLAUTH 或设置CHLAUTH 规则,不能同时设置。 (提示:不要不要禁用CHLAUTH!) 另外,如果您启用了密码验证,请参阅MQ Password/CHLAUTH research – Exec Summary 和后面的两个帖子。它已经严重损坏,至少要等到下一个 Fix Pack 左右才能修复,如果确实如此的话。 【参考方案1】:

我假设您使用的是受支持的 MQ 版本(7.1 或更高版本)。

对于 MQ 7.1 及更高版本,默认情况下,新的队列管理器将附带一些 CHLAUTH 规则,其中一个会禁用具有 MQ 管理权限的用户与 SVRCONN 通道的连接。在这种情况下,您已将用户 sampleuser 放置在频道的 MCAUSER 中。由于sampleuser 是 mqm 组的成员,因此默认情况下是不允许的。

根据您提供的设置,如果允许连接,您将允许任何可以通过网络连接到您的 MQ 侦听器端口的用户管理队列管理器、定义队列、删除队列、添加权限等。

查看 T.Rob 的这个答案,了解有关如何在不禁用安全性“Unable to connect to queue manager in WebSphere MQ 7.1”的情况下完成这项工作的更多详细信息。

我还有另一个帖子,里面有一些类似的信息“C# MQ Connect get Error 2035 but Java MQ Connect works well”


更新 #1

日志显示您遇到了连接身份验证错误。对于 MQ 8.0 及更高版本,队列管理器默认配置为要求为 MQ 管理用户指定有效密码,因为 sampleuser 是 mqm 组的一部分,它属于此类。

您可以将 MQ Explorer 配置为在连接到队列管理器时发送用户名和密码。

    右键单击队列管理器名称 选择连接详细信息 选择属性... 选择用户名 选中“启用用户标识”旁边的框 填写用户名字段 如果您将其保留为“提示输入密码”,则在您每次尝试连接到队列管理器时打开 MQ Explorer 时都会询问您输入密码。您可以选择“使用保存的密码”,然后提供密码。

我不建议您这样做,但如果您想禁用安全性并允许任何人在不提供有效密码的情况下以 MQ 管理员身份连接到您的队列管理器,您可以使用以下命令禁用此功能。

ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
REFRESH SECURITY TYPE(CONNAUTH)

【讨论】:

谢谢。我尝试相应地更改代码以允许未经授权的匿名用户。但仍然失败。有什么想法吗。?我已经用日志更新了问题。

以上是关于提供对 IBM WebSphere MQ 的匿名访问的主要内容,如果未能解决你的问题,请参考以下文章

IBM WebSphere MQ介绍安装以及配置服务详解

IBM websphere MQ 消息发送与获取

IBM WebSphere MQ安装集成

IBM WebSphere MQ安装集成

IBM Websphere MQ 基本实验操作

连接到 IBM Websphere MQ 时出现 NullPointerException