4

现在我用c#使用websphere MQ客户端连接远程MQ服务器(7.0版本),出现权限问题,即运行MQ客户端应用的用户没有足够的权限访问qmgr。然后我使用'setmqaut'命令授予用户足够的权限并且它可以工作。

我认为这不是很方便,必须是更好的方法。可以通过在 MQ 服务器中添加用户的 IP 吗?但我不知道该怎么做。

任何建议将不胜感激。谢谢

4

1 回答 1

5

WebSphere MQ 不执行任何认证。本地应用程序由操作系统进行身份验证,因此可以信任它们的 ID。(根据定义,如果您不能信任本地操作系统身份验证,那么整个服务器就会受到威胁。)就像本地连接一样,WMQ 相信远程连接的 ID 是真实的。由 WMQ 管理员决定采用何种级别的身份验证。在 WMQ v7 中有两种选择 - 使用 SSL/TLS 通道进行身份验证,或者使用通道出口进行身份验证。

无论哪种情况,通道的 MCAUSER 值决定了使用什么 ID 进行授权。如果 MCAUSER 留空,则通道将使用客户端发送的用户 ID。在您的情况下,您收到 2035 错误,因为客户端发送的 ID 不在管理 (mqm) 组中。如果您的客户端发送了 ID“mqm”(或在 Windows 上的“MUSR_MQADMIN”),连接就会成功。如果您的程序是 Java 或 JMS,那么选择提供的 ID 的能力是 API 的一部分。只需告诉 QMgr 你想成为谁。

如果您愿意允许远程连接在服务器上执行操作系统命令,那么只需将管理 ID 放在通道的 MCAUSER 中。(例如,UNIX/Linux 上的 MCAUSER('mqm') 或 Windows 上的典型 MCAUSER('MUSR_MQADMIN')。)但是,请注意,具有管理员权限的远程用户可以使用 QMgr 远程执行任意操作系统命令行代码。这是 WMQ 的一个特性,而不是一个错误,因此我们从不推荐在生产环境中这样做。事实上,我个人建议开发环境启用安全性。等到生产阶段才弄清楚如何验证连接以及需要哪些授权通常会导致不必要的部署延迟。

如果您想使用 IP 过滤来减轻该威胁,您可以迁移到原生包含此功能的 WMQ v7.1,或者使用BlockIP2等出口。这些解决方案中的任何一个都允许您创建通过 IP 地址、用户 ID 等过滤传入连接请求的规则。

请注意,在 v7.0 QMgr 上,默认情况下所有通道都不受保护。因此,即使您在一个通道上过滤传入请求,如果其他通道保持默认状态,任何人仍然可以以管理员身份连接和执行命令。要全面了解这一切,请查看t-rob.net上的 Hardening WebSphere MQ 演示文稿。向下滚动到 v7.0 演示文稿。

于 2012-04-27T15:50:36.287 回答