运行WebSphere MQ Server v7.1的Linux服务器盒:
我创建了一个用户'mq-user',它属于Linux中的'mq-users'组。然后我创建了一个队列管理器QM_TEST
,并使用MQSC发出以下命令来创建队列并设置安全性:
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('mq-user') AUTHADD(ALL)
SET AUTHREC PROFILE(SYSTEM.MQEXPLORER.REPLY.MODEL) OBJTYPE(QUEUE) PRINCIPAL('mq-user') AUTHADD(INQ,DSP,GET)
SET SET AUTHREC PROFILE(SYSTEM.ADMIN.COMMAND.QUEUE) OBJTYPE(QUEUE) PRINCIPAL('mq-user') AUTHADD(INQ,DSP,PUT)
DEFINE CHANNEL (TEST_CHANNEL) CHLTYPE (SVRCONN) TRPTYPE (TCP) MCAUSER('mq-user')
SET CHLAUTH(TEST_CHANNEL) TYPE(ADDRESSMAP) ADDRESS(*) MCAUSER('mq-user')
DEFINE QLOCAL (TEST_QUEUE)
SET AUTHREC PROFILE(TEST_QUEUE) OBJTYPE(QUEUE) PRINCIPAL('mq-user') AUTHADD(ALL)
DEFINE LISTENER (TEST_LISTENER) TRPTYPE (TCP) CONTROL (QMGR) PORT (1414)
START LISTENER (TEST_LISTENER)
运行WebSphere MQ Client v7.1和WebSphere MQ Explorer的Linux客户端框:
我以我的用户名(arrehman)登录,该用户名不属于mq-users组。但是,我可以通过Java应用程序和MQ Explorer客户端访问我在上面创建的队列,而无需传递任何用户凭据。如果安全有效,为什么会这样呢?
需要进一步的详细信息,请告知我们。感谢。
答案 0 :(得分:6)
这一行:
SET CHLAUTH(TEST_CHANNEL) TYPE(ADDRESSMAP) ADDRESS(*) MCAUSER('mq-user')
说以下内容:
TEST_CHANNEL
... mq-user
换句话说,启用频道,使得任何连接都会继承mq-user
的权限,无论它们来自何处以及它们呈现的身份。因此,您看到的行为是基于上述CHLAUTH
规则的预期行为。
列出的规则存在一些其他问题:
PRINCIPAL
而不是GROUP
。在非Windows服务器上,如果指定PRINCIPAL
,QMgr会查找该ID,查询其主要组,然后根据该组设置授权。因此,如果mq-users
的主要群组staff
或users
获得授权而非mq-users
,则可能不是您的意图。始终使用group
,以便获得您想要的结果setmqaut
或AUTHREC
。ALL
会使ID /组受管理。 QMgr级别的一个权限是SET
,具有SET
权限的组中的任何用户都可以设置授权控制列表。因此,即使您只授予AUTHADD(INQ,DSP,PUT)
mq-users
ID,也可以提交PCF命令以授予对所有对象的所有访问权限。如果您需要,只需在QMgr上授予CONNECT
和INQUIRE
。 USERSRC(CHANNEL)
,那么您的ID将被使用并且很可能被拒绝。但拒绝可能是因为它位于mqm
组(被默认的CHLAUTH
规则阻止),或者因为它所在的组没有AUTHREC
条记录。 有关加强WMQ的更多信息,收集了大量资源here。 强化WebSphere MQ 演示文稿来自v7.0。尽管v7.1具有新控件,但主体保持不变:
MCAUSER
规则动态设置CHLAUTH
值