websphere MQ 7.0 - 接受任何用户

Posted

技术标签:

【中文标题】websphere MQ 7.0 - 接受任何用户【英文标题】:websphere MQ 7.0 - accept any user 【发布时间】:2018-04-19 08:50:58 【问题描述】:

连接到我们的 Websphere MQ 7.0 服务器的客户端收到错误代码 2035。

这是因为每个用户都使用自己的用户名进行连接。他们无法改变这种行为。将其修复为一种解决方法非常容易。我只需要将用户名添加到 mqm 组 (linux) 即可。

问题是,我无法将所有用户添加到 mqm 组。这一直在变化。

有没有办法让每个人都可以连接和发送数据?

【问题讨论】:

MQ 7.0 自 2015 年 9 月 30 日起停止支持。7.1 也停止支持,11 天后 7.5 停止支持。如果连接到 MQ 的用户不是 MQ 管理员,将他们添加到 mqm 组是一个很大的安全问题。这些用户是作为 MQ 客户端通过网络连接到 SVRCONN 通道还是以绑定模式在同一服务器上本地连接。 @JoshMc - 客户端确实通过网络作为 MQ 客户端连接到 SVRCONN 通道。那么这仍然是一个安全问题,将它们添加到 mqm 组吗?除了 SVRCONN 频道之外,他们无权访问服务器。 是的,这仍然是一个安全问题。 mqm 组中的任何用户都具有管理权限。用户可以远程定义、更改、删​​除队列管理器上的对象。 Roger 的回答提供了如何在无需将用户添加到 mqm 组的情况下为特定应用程序队列提供权限的示例。 【参考方案1】:

正如马克所说:

如果您忽略允许任何人访问的安全隐患 MQ 资源

我建议您学习如何正确执行 MQ 安全性,因为它真的很容易。您可以使用用户已经在其中的组或创建新组并将那些特定的 UserId 添加到其中。请不要将非 MQAdmin 用户 ID 放在“mqm”组中。安全性很差,安全性很差。

假设您有一堆以“ABC”开头的队列,支持团队需要完全访问权限。您可以创建一个名为“abc_rw”(允许读/写)的组,并放置所有需要完全权限的 UserId。因此,setmqaut 命令将是:

setmqaut -m QM_NAME -t qmgr -g abc_rw +connect +inq +dsp
setmqaut -m QM_NAME -n ABC.** -t queue -g abc_rw +allmqi +dsp

其中 QM_NAME 是您的队列管理器的名称。

第一行设置组“abc_rw”访问队列管理器的权限。 第二行让“abc_rw”组可以访问所有以“ABC”开头的队列。

就是这样。就是这么简单。发出任何 setmqaut 命令后,不要忘记发出 REFRESH SECURITY 命令。

现在,如果用户使用列出队列管理器的队列的工具,那么您需要授予他们这样做的权限。再次简单。

setmqaut -m QM_NAME -n SYSTEM.ADMIN.COMMAND.QUEUE -t queue -g abc_rw +put +inq +dsp
setmqaut -m QM_NAME -n SYSTEM.DEFAULT.MODEL.QUEUE -t queue -g abc_rw +get +inq +dsp

第一行授予组“abc_rw”将消息放入命令队列的权限,MQ 工具执行该命令队列来请求队列列表。 第 2 行授予“abc_rw”组访问权限以使用模型队列创建一个临时动态队列,MQ 工具将从该队列读取回复消息。

【讨论】:

请注意,“在您发出任何 setmqaut 命令后”不需要REFRESH SECURITY,只有在您已应用 OAM 的组中添加或删除以前访问过 MQ 的用户时才需要权限,并且您希望 MQ 了解此更改。刷新只是清除了用户组成员身份的缓存。在繁忙的系统上,如果底层操作系统用户存储库无法处理对用户组成员身份的新查询负载,发出REFRESH SECURITY 的行为可能会导致应用程序出现 2035 错误。 @JoshMc 90% 的用户在 RC 为 2035 的情况下失败,然后权限被更改/更新,大多数人不知道安全权限已被缓存,并在不发出 REFRESH SECURITY 命令的情况下重试,但失败了再次。 用户第一次访问队列管理器时,MQ 将缓存用户当时所属的组列表,任何进一步的 OAM 检查都将针对与用户关联的这个缓存组列表。每次重新启动队列管理器或发出 REFRESH SECURITY 命令时,都会清除此缓存。 可能需要运行REFRESH SECURITY的两种情况: 1.用户在成为您授予OAM权限的组成员之前尝试访问MQ,此时MQ将缓存他们不是该组的成员。 2. 您已经从组中删除了一个用户,但 MQ 仍然允许访问,因为它已经缓存了该用户是该组的成员。对于这两种情况,REFRESH SECURITY 将允许 MQ 重新查找组成员身份。【参考方案2】:

如果您忽略允许任何人访问 MQ 资源的安全隐患,则可以通过伪组“nobody”授予该权限。在 Unix 平台上,每个用户都被视为该组的成员,即使它并不真正存在。

所以

setmqaut -t qmgr -m QM1 -g nobody +connect

将授予所有用户连接的权限。类似的事情可以用通配符('**')来设置队列等的权限。

【讨论】:

以上是关于websphere MQ 7.0 - 接受任何用户的主要内容,如果未能解决你的问题,请参考以下文章

WebSphere MQ----通道

WebSphere MQ v7.1 安全用户凭证

IBM websphere MQ远程队列的简单配置

在 WebSphere MQ 中配置死信队列

提供对 IBM WebSphere MQ 的匿名访问

IBM Websphere MQ 基本实验操作