运行WebSphere MQ Server v7.1的Linux Server Box:
我创建了一个用户'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)
Run Code Online (Sandbox Code Playgroud)
运行WebSphere MQ Client v7.1和WebSphere MQ Explorer的Linux客户端Box:
我以我的用户名(arrehman)登录,该用户名不属于mq-users组.但是,我可以通过Java应用程序和MQ Explorer客户端访问我在上面创建的队列,而无需传递任何用户凭据.如果安全有效,为什么会这样?
如需更多详细信息,请告知我们.谢谢.
这一行:
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.ALLQMgr使ID /组管理.QMgr级别的权限之一是SET,具有SET权限的组中的任何用户都可以设置授权控制列表等.因此,即使您只授予AUTHADD(INQ,DSP,PUT)了mq-usersID,也可以提交PCF命令来授予对所有对象的所有访问权限.只有授予CONNECT和INQUIREQMgr,如果你需要的全部.USERSRC(CHANNEL)在映射上指定了,那么您的ID将被使用并且很可能被拒绝.但拒绝可能是因为它在mqm组中(被默认CHLAUTH规则阻止),或者因为AUTHREC它所在的组没有记录.有关加强WMQ的更多信息,此处收集了大量资源.该硬化的WebSphere MQ表现为V7.0.虽然v7.1有新的控件,但是主体保持不变:
MCAUSER通过在通道中对其进行硬编码或使用出口或CHLAUTH规则动态设置,将经过身份验证的标识映射到值