运行 Linux/MQSC 来自 mq 客户端的命令

Run Linux/MQSC commands from mq client

好的,我想检查一下我是否可以在 MQ 服务器中远程 运行 某些 OS 或 MQSC 命令。据我所知,这可以用 SYSTEM.ADMIN.SVRCONN 完成。为此,我向我的 WebSphere MQ 客户端添加了一个远程队列管理器。我将队列管理器名称放在具有正确 IP 的服务器上,但是当我使用 SYSTEM.ADMIN.SVRCONN 作为通道名称时,出现:Channel name not recognized (AMQ4871) 错误。

此外,如果我有一个像 MY.CHANNEL.NAME 这样的频道名称,并且它是一个服务器连接频道,mqm 作为它的 MCAUSER,我可以 运行 一些命令吗(MQSC 或 OS)通过服务器上的此通道?

谢谢。

编辑1


我正在使用 WebSphere MQ v.7.0

"I add a remote Queue Manager to my WebSphere MQ client" 我的意思是我向 MQ Explorer 添加了一个远程队列管理器。

编辑2


我想在此编辑中更准确地解释我的问题。我想通过 MQ Explorer 连接到远程 Qmanager。我当然知道 Qmanager 名称及其 IP。此外,远程 Qmanager 同时具有 SYSTEM.ADMIN.SVRCONNSYSTEM.AUTO.SVRCONN 通道可用。当我检查这些频道的 CHLAUTH 时,我得到:

AMQ8878: Display channel authentication record details.
   CHLAUTH(SYSTEM.ADMIN.SVRCONN)           TYPE(ADDRESSMAP)
   ADDRESS(*)                              USERSRC(CHANNEL)
AMQ8878: Display channel authentication record details.
   CHLAUTH(SYSTEM.*)                       TYPE(ADDRESSMAP)
   ADDRESS(*)                              USERSRC(NOACCESS)
dis chl(SYSTEM.ADMIN.SVRCONN) MCAUSER
     5 : dis chl(SYSTEM.ADMIN.SVRCONN) MCAUSER
AMQ8147: WebSphere MQ object SYSTEM.ADMIN.SVRCONN not found.
dis chl(SYSTEM.AUTO.SVRCONN) MCAUSER
     6 : dis chl(SYSTEM.AUTO.SVRCONN) MCAUSER
AMQ8414: Display Channel details.
   CHANNEL(SYSTEM.AUTO.SVRCONN)            CHLTYPE(SVRCONN)
   MCAUSER( )

如您所见,我应该可以通过这两个通道和 运行 一些命令进行连接。但是当我在远程配置中选择 SYSTEM.ADMIN.SVRCONN 作为通道名称时,我得到:Channel name not recognized (AMQ4871) 当我选择 SYSTEM.AUTO.SVRCONN 作为通道名称时,我得到:You are not authorized to perform this operation (AMQ4036).

有什么想法吗?

when I use SYSTEM.ADMIN.SVRCONN as channel name, I have got: Channel name not recognized (AMQ4871) error.

您是否在远程队列管理器上定义了通道?

if I have a channel name like MY.CHANNEL.NAME and it is a server-connection channel with mqm as its MCAUSER, can I run some commands (MQSC or OS) through this channel on the server?

当然可以。其他人也可以。您应该阅读 MQ 安全性,不要将您的队列管理器暴露给黑客。

I add a remote Queue Manager to my WebSphere MQ client.

我完全不确定这到底是什么意思。 MQ Explorer 保留一个队列管理器定义列表。 MQ 客户端只是一个用于建立连接的库。

如果您的意思是向 MQ Explorer 添加了一个远程队列管理器,那么这是有道理的。除了在 Explorer 中定义连接之外,您还必须在队列管理器中配置连接。这意味着定义 SYSTEM.ADMIN.SVRCONN 频道或使用您选择的名称的频道,定义并启动侦听器。如果您使用的是 7.1 或更高版本的队列管理器(在询问 MQ 时最好列出版本),那么您还需要创建一个 CHLAUTH 规则以允许连接,以及另一个 CHLAUTH 规则以允许具有管理权限的连接。要么完全禁用 CHLAUTH 规则,但不推荐这样做。

If I have a channel name like MY.CHANNEL.NAME and it is a server-connection channel with mqm as its MCAUSER, can I run some commands (MQSC or OS) through this channel on the server?

也许吧。

开箱即用,MQ 拒绝所有客户端连接。有 CHLAUTH 规则拒绝管理连接,其他 CHLAUTH 规则拒绝除 SYSTEM.ADMIN.SVRCONN 以外的任何 SYSTEM.* 频道的连接。由于管理连接被拒绝,non-admin 用户必须先使用 SET AUTHRECsetmqaut 命令配置访问权限,然后才能使用 SYSTEM.ADMIN.SVRCONN,因此 MQ 被称为 "secure by default."

当您创建 MY.CHANNEL.NAME 并以管理员身份连接时,如果启用了 CHLAUTH,连接将被拒绝。您必须添加一个新的 CHLAUTH 规则,例如...

SET CHLAUTH('MY.CHANNEL.NAME') TYPE(BLOCKUSER) USERLIST('*NOBODY') WARN(NO) ACTION(ADD) 

...为了允许管理员连接。

(注意:MQ CHLAUTH 拦截规则使用黑名单方法。默认规则拦截 *MQADMIN 来自所有渠道。我上面列出的规则覆盖默认规则,因为频道名称更具体,它会阻止 *NOBODY - 这是一个用户 ID 列表 而不是 包括 mqm 或任何其他管理用户 ID。这很奇怪,但这就是它的工作方式。)

有关此主题的更多信息,请参见 http://t-rob.net/links,尤其是莫拉格 (Morag) 关于 CHLAUTH 规则的会议演示 must-read。

20150506更新
对原始问题中编辑 #1 和 #2 的回复如下:

第一个编辑说 QMgr 是 v7.0,第二个编辑显示 QMgr 定义了 CHLAUTH 记录。由于 CHLAUTH 在 v7.1 之前不可用,因此这两个陈述是相互排斥的——它们不能同时为真。在提供 MQ 服务器或客户端的版本时,最好粘贴在 dspmqver 的输出中。如果问题涉及 GSKit、Java 代码或基本代码以外的其他组件,那么 dspmqver -a 会更好。

问题更新中提供的 MQSC 输出完全解释了错误。

dis chl(SYSTEM.ADMIN.SVRCONN) MCAUSER
     5 : dis chl(SYSTEM.ADMIN.SVRCONN) MCAUSER
AMQ8147: WebSphere MQ object SYSTEM.ADMIN.SVRCONN not found.

正如 Morag 指出的那样,SYSTEM.ADMIN.SVRCONN 无法使用,因为它尚未定义。

AMQ8878: Display channel authentication record details.
   CHLAUTH(SYSTEM.*)                       TYPE(ADDRESSMAP)
   ADDRESS(*)                              USERSRC(NOACCESS)

auths 错误发生是因为 any 连接到 any SYSTEM.* SVRCONN 通道未明确覆盖被此阻塞规则。 SYSTEM.ADMIN.SVRCONN 的 CHLAUTH 规则优先,因为它更明确,并允许 non-admin 连接到该频道。 SYSTEM.AUTO.SVRCONN 缺少类似的覆盖规则意味着它被上面列出的 SYSTEM.* 个频道的现有规则拒绝。

如前所述,强烈 推荐访问链接网站并阅读 Morag 关于 MQ v7.1 的会议演示文稿安全和 CHLAUTH 规则。它解释了如何应用 CHLAUTH 规则、优先级如何工作,也许最重要的是,如何使用 MATCH(RUNCHECK) parameter.

验证它们

要正确执行 MQ 安全性,您需要至少以下内容:

  1. 定义一个名称不以SYSTEM.*开头的频道并设置MCAUSER('*NOBODY').
  2. 定义一个 CHLAUTH 规则以允许连接到该频道,根据需要映射 MCAUSER。
  3. 如果您希望使用 mqm 或管理员访问权限连接到频道,请定义 CHLAUTH 规则以 验证 频道,最好使用 TLS 和证书。

有几件事是您不想做的,原因在 Morag 和我的演示文稿中都有解释。这些包括...

  1. 使用 SYSTEM.AUTO.SVRCONN 进行任何合法连接。
  2. 就此而言,使用 SYSTEM.* 任何东西(SYSTEM.ADMIN.SVRCONNSYSTEM.BROKER.* 除外)进行合法连接。
  3. 允许未经身份验证的管理员连接。
  4. 正在禁用 CHLAUTH 规则。
  5. 正在禁用 OAM。

希望 人们学习 MQ 安全性,并且学得很好。但是,作为一名专门从事此工作的顾问,我必须告诉您,即使是聘请我提供 on-site 类 并帮助他们实施的客户也很难将其锁定。从这个事实中可以得出两个见解。

首先,如果您没有足够的时间快速了解 MQ 安全性,那么实施将不安全。要研究该主题以了解所有部分如何很好地组合在一起以设计出像样的安全模型,需要 hands-on 使用 QMgr 进行培训,您可以构建、锤击、拆除、重新构建等。数周 hands-on 的专注学习,或数月或数年的随意学习。我的建议是获取 MQ Advanced for Developers。它功能齐全、免费,并且具有您现在使用的 v7.1 或 v7.5 QMgr 上的控件的超集。

第二个见解是,学习 MQ(或任何其他 IT)安全性没有捷径。如果将其视为简单的配置问题,那么几乎可以保证在实施时不安全。如果将其视为学习可用于身份验证、授权和策略实施的所有不同控制,然后学习它们如何相互作用,并且如果将安全性作为一门实践学科来处理,那么就有可能实现一些有意义的安全性。

解决第二个问题需要对教育进行投资。通读演示文稿并在您管理的测试 QMgr 上实时试用各种控件。了解哪些错误进入哪些错误日志、哪些生成事件消息以及生成哪些类型的事件。在 SupportPacs, such as MS0P which is one of my favorites, and get familiar with them. Consider attending the MQ Tech Conference 中获取一些诊断工具(在这里您可以遇到许多在 SO 上做出回应的人)以获得更多 in-depth 培训。

如果您(或您的雇主)还没有准备好致力于 in-depth 技能培养,或者正试图在即将到来的项目截止日期前学习这一点,那么请考虑在 as-needed 基础,因为依赖 just-in-time on-the-job 本主题的培训是不安全网络的秘诀。