| 免费下载:IBM® WebSphere® MQ V7.0.1 试用版 |
|---|
| 下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。 |
在 z/OS 上,通常由 RACF 管理员定义 IBM® WebSphere® MQ 使用的安全配置文件。然而,他们的 WebSphere MQ 知识可能有限,因此不能完全理解他们定义的配置文件的作用。MQ 管理员也可能对安全设置缺乏充分理解,因为安全设置不是他们定义的。本文简要介绍 z/OS 上的 WebSphere MQ 的安全性。如果您以前并不了解该主题,也没有关系,本文将概述一些用于保护 WebSphere MQ 的设施,并指导您应用这些设施来保护您的队列管理器。本文旨在服务两类读者:熟悉 z/OS 但不熟悉 WebSphere MQ 的 RACF 管理员(和其他人);熟悉 WebSphere MQ 但不熟悉如何在 z/OS 上保护它的 MQ 管理员。
我此前撰写过两篇关于 WebSphere MQ 安全性的 developerWorks 文章,本文将引用它们,而不是重复它们包含的信息:
- WebSphere MQ for z/OS 安全性 向已经熟悉基础知识的读者建议如何在 z/OS 上设置 WebSphere MQ 的安全性。
- WebSphere MQ 在分布式平台和 z/OS 上的安全性比较 比较 z/OS 和分布式环境上的 WebSphere MQ 安全性。
本文描述使用 RACF 实现的安全性。如果您的系统使用不同的安全管理器,则安全设置的语法将有所不同,但基本信息应该仍然适用。
本节描述 WebSphere MQ 使用的、也是您想保护的资源的类型。本节针对拥有 z/OS 背景但不熟悉 WebSphere MQ 的读者。如果您已经熟悉 WebSphere MQ,那么您可能想跳到下一节 WebSphere MQ 资源和保护它们的 RACF 类。
- 连接
- 支持用户与队列管理器交互。要建立连接,单个用户有时连接到队列管理器,有时则连接到一个作业(比如一个 CICS 区域或通道启动器)。
- 命令
- 可以通过系统控制台、ISPE 界面、批处理实用程序或程序调用输入,以定义资源或控制队列管理器。
- 队列
- 包含消息。当然,路由和存储消息的能力是使用 WebSphere MQ 的原因所在。
- 队列上下文
- 在消息头中包含一些字段,比如 UserIdentifier。在 WebSphere MQ 中,消息头称为消息描述符。
- 替代 userid
- 代理 userid。访问队列或主题等资源时,代理 userid 允许一个 userid 获得授权,以使用另一个 userid 进行授权。
- 主题
- WebSphere MQ V7 中引入的一种新资源类型。主题支持 “发布/订阅”,这是一种消息传递模型,除支持队列实现的点对点(一对一)消息传递外,还支持 “一对多” 或 “多对一” 消息传递。
- 进程
- 定义可以被触发来使用一条或多条消息的作业或事务。触发机制提供了一种方法,允许批作业、CICS、IMS 事务或通道在达到某个队列时自动启动。
- 名称列表
- 提供 WebSphere MQ 使用的资源列表。
本文描述的 RACF 类直接控制对上述资源的访问。除上述资源外,还有两类 WebSphere MQ 资源需要了解:
- 队列管理器
- 在 z/OS 上作为两类启动任务执行:主地址空间和通道启动器。它向消息提供支持,并支持将消息路由到应用程序或其他队列管理器。
- 通道
- 定义队列管理器之间或从 WebSphere MQ 客户机到队列管理器的通信路径。
WebSphere MQ 的应用程序编程接口(API)称为消息队列接口(MQI)。
RACF 通过规则控制访问,规则称为配置文件,在类 中定义。RACF 类包含适用特定资源类型的配置文件。例如,MQQUEUE 类包含控制队列访问的配置文件。WebSphere MQ V7.0.0 添加了对能包含使用混合大小写的配置文件的类的支持。如果使用混合大小写配置文件,配置文件中只有表示资源本身的部分可以包含在混合大小写中。下面的 示例 8 展示了一个混合大小写配置文件示例。下表列举了为 WebSphere MQ 定义的类及其保护的资源类型。第 3 列和第 4 列是组合类。组合配置文件能保护其名称无法通过一个通用配置文件轻松保护的资源,这是因为组合配置文件包含一列资源(比如一列完全限定的队列名称),但将它们收集在单个配置文件之下,以便对该组合应用一个访问列表。 MQCMDS 和 MQCONN 类没有相关组合或混合大小写类,MXTOPIC 没有相关大写类。
表 1. 资源和保护它们的 RACF 类
| 受到保护的资源类型 | 大写类 | 大写组合类 | 混合大小写类(v7 和更高版本) | 混合大小写组合类(v7 和更高版本) |
|---|---|---|---|---|
| 管理 | MQADMIN | GMQADMIN | MXADMIN | GMXADMIN |
| 命令 | MQCMDS | |||
| 连接 | MQCONN | |||
| 名称列表 | MQNLIST | GMQNLIST | MXNLIST | GMXNLIST |
| 进程 | MQPROC | GMQPROC | MXPROC | GMXPROC |
| 队列 | MQQUEUE | GMQQUEUE | MXQUEUE | GMXQUEUE |
| 主题(v7 和更高版本) | MXTOPIC | GMXTOPIC |
在本文后半部分,如果提到非组合大写类,比如 MQQUEUE,则它代表表 1 中的同一行中的任何类。例如,当本文列示 MQQUEUE 时,则 GMQQUEUE、MXQUEUE 或 GMXQUEUE 中的配置文件也可以使用。
大多数资源都映射到一个特定的类集合;例如,MQQUEUE、GMQQUEUE、MXQUEUE 和 GMXQUEUE 类保护队列。MQADMIN 中的配置文件及其相关组合和混合大小写类适用几种不同的资源类型。这些是开关和 RESLEVEL 配置文件,以及针对 Alternate User 和 Context 的 MQI 安全性,最后还有命令资源安全性。本文后面部分将详细介绍它们。
WebSphere MQ V7.0.0 或更高版本拥有一个名为 SCYCASE 的新 QMGR 参数。可以将其设置为 UPPER(默认值)或 MIXED,控制队列管理器是使用大写还是混合大小写 RACF 类。如上表所示,有些类(比如 MQCMDS 和 MQCONN)只有大写形式,而另一些类(比如 MXTOPIC 和 GMXTOPIC)只有混合大小写形式。只有大写或混合大小写版本的类(比如 MQCMDS 或 MXTOPIC)只可用于 SCYCASE UPPER 或 MIXED。同时拥有大写和混合大小写版本的类(比如 MQQUEUE 和 MXQUEUE)只可用于一种形式或另一种形式,这取决于 SCYCASE 的设置。
WebSphere MQ 的所有配置文件都以一个 hlq 开始,这是队列管理器的名称,或者,如果队列管理器是一个队列共享组的成员,则它可能是队列共享组的名称。本文中的大部分示例使用队列管理器名称 CSQ1 作为样例配置文件中的 hlq。
如果您不熟悉 RACF,则配置文件包含一个通用访问设置。对于配置文件的访问列表中没有且没有被显式授予一个访问级别的用户或组,UACC 参数指定通用访问并定义默认访问级别。在分布式平台上使用的 OAM 实现配置文件的方式不同于 RACF 实现通用配置文件的方式,部分原因是 UACC 的效果。要了解关于 UACC、通用配置文件、RACF 使用的访问级别(NONE、READ、UPDATE、CONTROL 和 ALTER)的更多信息,请参阅文章 WebSphere MQ 在分布式平台和 z/OS 上的安全性比较。如果您熟悉 OAM 实现的分布式平台上的 WebSphere MQ 安全性,但不熟悉 z/OS 上的使用 RACF 的安全性,这篇文章将帮助您理解本文。
MQADMIN 类中有两种配置文件控制如何实现安全性:
- 开关配置文件
- 控制是启用还是禁用安全性;或者,如果队列管理器是队列共享组的一部分,则控制在队列管理器级别还是在队列共享组级别实现安全性。
- RESLEVEL 配置文件
- 控制允许通过连接访问的资源的授权所影响的 userids 数量。
开关是可选的 — 可以不定义开关。开关有两个用途:
- 开关可以禁用特定安全性检查,或者关闭整个队列管理器的全部安全性。
- 如果队列管理器是队列共享组的一部分,则开关可以控制是在队列管理器级别还是在队列共享组级别实现安全性。
下面是几个禁用安全性的开关示例。第一个开关将禁用队列管理器 CSQ1 的安全性:
示例 1. 禁用队列管理器的所有安全性的开关
CSQ1.NO.SUBSYS.SECURITY |
这个开关将禁用队列管理器 CSQ1 的命令资源安全性检查:
示例 2. 禁用资源安全性检查的开关
CSQ1.NO.CMD.RESC.CHECKS |
如果您正在使用或计划使用开关,一定要理解它们的用途。如果开关禁用某种安全类型,对队列管理器的总体安全性会产生什么影响?举例来说,如果命令没有受到保护,则队列就不可能安全,这是因为任何人都可以定义 QALIAS,然后使用 QALIAS 来绕过队列安全性。要了解别名队列如何用于绕过其他安全性控制,请参见下面的 关于别名队列的特殊考虑。
对于队列共享组(QSG)中的队列管理器,开关可用于控制是在队列管理器级别、QSG 级别还是同时在两个级别上实现安全性。(在 z/OS 上,队列共享组是一个队列管理器集,可以将消息存储在一个耦合设施而不是一些页面集中。(连接到 QSG 中的一个队列管理器的应用程序能将消息放置到共享队列上,然后,连接到 QSG 中的任何队列管理器的应用程序就能获取该消息。)如果 QSG 中的一组队列管理器被认为是各自的 “克隆”,那么在 QSG 级别配置安全性可能很有用,因为这种配置能使 QSG 中的所有队列管理器使用相同的配置文件集。
如果您正在使用开关且需要得到进一步指导,那么您可以查阅 WebSphere MQ V7 信息中心中的 开关配置文件 下的详细信息。
一个队列管理器只有一个 RESLEVEL 配置文件。连接到队列管理器的 userid(即发出 MQCONN 命令的 userid)对 RESLEVEL 拥有的访问级别决定通过该连接访问 MQI 需要检查多少 userids。例如,对于 CICS 来说,CICS 区域 userid 拥有的对 RESLEVEL 的访问级别决定访问资源时需要检查一个、两个还是不检查任何 userid。如果 CICS 区域拥有访问级别 NONE,则需要检查两个 userids:CICS 作业 userid 和 CICS 事务 userid。如果任一 userid 都没有打开资源所需的授权,则访问失败。如果 CICS 区域对 RESLEVEL 拥有访问级别 READ,则只需检查一个 userid:CICS 区域 userid。
对于连接到队列管理器的任何连接类型(下一节将讨论连接安全性)访问级别 CONTROL 或 ALTER 无需检查任何 userids, 即可对队列管理器资源(比如队列、主题等)进行 MQI 访问。因此,对 RESLEVEL 的访问可以归为两种方式:
- NONE、READ 或 UPDATE 访问意味着至少要检查一个(也可能是两个,取决于访问级别)userid 才能实现对 WebSphere MQ 对象的 MQI 访问。
- 另一方面,CONTROL 或 ALTER 访问意味着那个连接没有 MQI 安全性。这样的设置 — 免除连接的安全性 — 使用时要非常小心,或者根本不要使用。
要了解更多关于 RESLEVEL 的信息,请参阅文章 WebSphere MQ for z/OS 安全性 和 WebSphere MQ V7 信息中心 中的主题 “ Using the RESLEVEL security profile”,该主题包含一个表,展示各种连接类型(比如 CICS、IMS 和批连接)的不同 RESLEVEL 访问级别的效果。
MQCONN 类中的配置文件控制哪些 userids 有权连接队列管理器。用户必须连接到队列管理器才能获取或放置消息,发出定义或更改队列的命令,启动通道等。连接与登录类似,只是用户在连接时不必提供 userid 和密码,原因是 WebSphere MQ 通常使用已经建立的身份。 例 如,对于 CSQOREXX ISPF 接口,WebSphere MQ 使用用户在登录 TSO 时建立的身份。不同的配置文件控制来自 z/OS 上的不同环境的访问,比如 CICS、IMS、批作业、DB2 存储过程等。下面是 4 个可以在 MQCONN 类中定义的配置文件:
- hlq.BATCH:控制来自批作业、TSO 应用程序、DB2 存储过程和 Unix System Services (USS) 的访问。
- hlq.CHIN:适用通道启动器发起的访问。
- hlq.CICS:控制来自 CICS 地址空间的访问。
- hlq.IMS:控制来自 IMS 控件和应用程序处理区域的访问。
对于某些连接,比如通道启动器或 CICS,只有区域本身需要授权才能连接到队列管理器。例如,对于通道启动器,由通道启动器建立的连接供它自身和其他所有通道使用。对于一个 CICS 区域,由该 CICS 区域建立的连接可供该区域内运行的任何事务使用。
MQCMDS 类用于保护管理 WebSphere MQ 的 MQSC 命令。MQSC 命令分为三个基本类别:
- DISPLAY 命令。
- DEFINE、DELETE 和 ALTER 命令:这些命令创建、删除或修改队列、主题、通道等 WebSphere MQ 资源。
- 其他所有命令:这些命令用于启动和停止队列管理器、启动和停止通道、刷新安全性等。
有 100 多个不同命令,因此,您需要组织它们,以便保护它们的配置文件尽可能直观明了。首先确定您的网站上需要访问 WebSphere MQ 的命令,然后实现基于角色的安全性,从而对命令进行分组。 文章 WebSphere MQ for z/OS 安全性 详细讨论了 z/OS 上的可能角色,解释了如何定义通用配置文件、通过一个相对较小的配置文件集来保护命令。通常,很容易确定哪些角色需要访问 DISPLAY、DEFINE、DELETE 和 ALTER 命令,但可能需要更多计划才能确定哪些角色需要访问其他命令。
QALIAS 对象能定义队列的别名,或者在 WebSphere MQ V7.0 或更高版本中定义主题的别名。一旦定义 QALIAS,就不会对别名的目标进行任何资源安全性检查。例如,userid ROBERT1 发出以下命令定义别名队列 APP1.ALIAS:
示例 3. 定义别名队列的命令
DEFINE QALIAS('APP1.ALIAS') TARGQ('PAYROLL.QLOCAL') |
但是,不会检查 ROBERT1 是否能定义或访问别名的目标:队列 PAYROLL.QLOCAL。另外,当程序打开别名队列时,打开别名队列的 userid 无需拥有对 QALIAS 本身的访问权 ;如果目标是队列,则 userid 不需任何对别名的目标的访问权。因此,定义 QALIAS 的权限允许用户绕过安全性,只应该允许最可信的管理员定义或更改 QALIAS。如果 QALIAS 将一个主题(而不是一个队列)命名为其目标,则打开 QALIAS 的用户不仅需要拥有别名队列的访问权,还需要拥有对主题的访问权。
命令资源安全性为命令提供了一个辅助检查级别。首先,用户必须拥有通过 MQCMDS 类访问命令的权限。假定用户拥有发出命令的权限,那么命令资源安全性将受到检查,查看用户是否拥有针对命令命名的特定资源发出命令的权限。命令资源安全性配置文件在 MQADMIN 类中定义。配置文件从队列管理器名称(或 QSG 名称)开始,然后命名对象类型(比如 QUEUE 或 TOPIC),最后是一个完全限定的或通用的资源名称:
示例 4. 用于 APP1 队列的命令资源安全性配置文件
RDEFINE MQADMIN CSQ1.QUEUE.APP1.** UACC(NONE) |
示例中的命令为队列管理器 CSQ1 定义一个配置文件,保护以 APP1 开始的队列。因此,要定义一个以 APP1 开始的队列,用户需要拥有访问定义队列的命令的权限,以及对 MQADMIN 类 CSQ1.QUEUE.APP1.** 配置文件的 ALTER 访问权。
本节描述 WebSphere MQ 应用程序编程接口(称为 MQI)的安全性。这些配置文件决定什么是可以通过 MQI 完成的,什么是不可以通过 MQI 完成的。MQI 允许程序获取或发布消息以及查询和修改队列。MQI 还允许应用程序操作队列上下文、发布或订阅主题、以及查询进程和名称列表。
MQQUEUE 类中的配置文件控制队列访问。MQQUEUE 有 4 个访问级别:
- NONE:不允许任何访问。
- READ:允许用户浏览消息或 MQINQ(查询)队列的属性。
- UPDATE:允许用户获取或放置消息。它不允许彼此相互授予获取或放置权限。用户还能获取 READ 允许的访问权限。(QALIASes 可用于分隔获取或发布消息的授权 — 后面将详细介绍这个主题。)
- ALTER:允许用户 MQSET(修改)队列某些属性。用户还能获取 UPDATE 提供的访问权限。
如果您熟悉 OAM 和分布式 WebSphere MQ 的安全性,您可能会感到奇怪,RACF 为何定义 READ 和 UPDATE 这样的访问级别,而不是定义 INQUIRE、GET 和 PUT 这样的访问级别。RACF 使用 NONE、READ、UPDATE、CONTROL 和 ALTER 作为所有 类、而不仅仅是 WebSphere MQ 定义的那些类的访问级别。因此,对于 WebSphere MQ,RACF 中预定义的访问级别之一控制对特定 MQI 动作的访问。要了解关于 RACF 访问级别和 OAM 权限的更多信息,请参阅 WebSphere MQ 在分布式平台和 z/OS 上的安全性比较。
消息描述符(即消息头)位于每条 WebSphere MQ 消息的开始部分,包含一些称为 “消息上下文” 的字段。有两个上下文信息集:身份上下文 标识首先在队列上发布消息的用户,比如 UserIdentifier,而原始上下文 则显示在队列上发布消息的应用程序,消息当前存储在队列上,包含 PutDate 和 PutTime 等字段。MQADMIN 中的配置文件决定执行应用程序的用户能否传递或设置上下文。下面是一个命令示例,该命令定义的配置文件将保护针对队列管理器 CSQ1 定义的任何队列的上下文,CSQ1 以 MYAPP2 开始:
示例 5. 保护 MQAPP2. 队列的 CONTEXT 的配置文件
RDEFINE MQADMIN CSQ1.CONTEXT.MYAPP2.** UACC(NONE) |
如果 CONTROL 访问权授予一个组,比如 AP2USRS,那么它将允许该组中的用户设置原始和身份上下文:
示例 6. 授予一个 CONTEXT 配置文件的访问权的 PERMIT 命令
PERMIT CSQ1.CONTEXT.MYAPP2.** CLASS(MQADMIN) ID(AP2USRS) ACCESS(CONTROL) |
对于用于命令输入 SYSTEM.COMMAND.INPUT 和为其定义的任何别名来说,上下文安全性具有特殊意义。当一个命令被放置到 SYSTEM.COMMAND.INPUT 中时,队列管理器检查身份上下文中的 userid 以便授权。因此,任何有权在 SYSTEM.COMMAND.INPUT 或它的别名上传递或设置身份上下文的用户都有可能使用其他 userid 的权限发出命令。因此,大多数情况下,任何用户都不应该拥有传递和设置 SYSTEM.COMMAND.INPUT 以及为它定义别名的上下文权限。(一种例外情况是队列管理器位于 QSG 中。在这种情况下,IGQ 连接、通道或 MCAUSER 的 SND userid 可能需要 CONTROL 访问权。)
替代用户授权允许当前 userid 使用替代 userid 打开和使用 WebSphere MQ 对象。例如,服务器应用程序可能会浏览队列中的消息,复制消息描述符中的 userid,将其用作替代 userid,然后打开队列破坏性地获取那个替代 userid。当前任务或事务 userid 需要保护替代 userid 的替代用户配置文件的 UPDATE 访问权权限,以便获得使用它的授权。MQADMIN 类中的配置文件保护替代用户授权。以下示例定义一个配置文件,将 AP1USER 作为一个替代 useid 来保护,然后,PERMIT 命令授权 MQMON 将 AP1USER 用作一个替代 userid:
示例 7. 定义和授予替代用户安全性的访问权的命令
RDEFINE MQADMIN CSQ1.ALTERNATE.USER.AP1USER UACC(NONE) PERMIT CSQ1.ALTERNATE.USER.AP1USER CLASS(MQADMIN) ID(MQMON) ACCESS(UPDATE) |
主题支持 WebSphere MQ V7 中引入的发布/订阅功能,以主题树形式排列。主题树可以包含任意数量的节点,每个节点都关联到一些主题字符串。管理 TOPIC 对象可以定义为匹配一个特定主题字符串。对于匹配 TOPIC 对象的主题字符串,以及主题树中该主题字符串之下、没有定义与之匹配的 TOPIC 对象的各个主题,此 TOPIC 对象为它们提供默认设置。除提供默认设置外, TOPIC 对象还可以拥有一个 RACF 配置文件,该配置文件针对它们定义,以实现主题安全性。下面是一个小型主题树示例,该主题树代表几件乐器:
图 1. 几件乐器的主题树

这个主题树包含以下主题字符串:
表 2. 乐器主题树中的主题字符串
| 主题字符串 |
|---|
| Instruments |
| Instruments/Winds |
| Instruments/Winds/Flute |
| Instruments/Winds/Clarinet |
并非必须为主题字符串定义 TOPIC 对象,但假设您已经定义了以下 TOPIC 对象:Instruments、Winds 和 Winds.Flute。另外,当您定义 TOPIC 对象时,它们被映射到表 2 中显示的主题字符串。注意,Instruments/Winds/Clarinet 没有 TOPIC 对象。
表 3. TOPIC 对象及其主题字符串
| TOPIC 对象 | 主题字符串 |
|---|---|
| Instruments | Instruments |
| Winds | Instruments/Winds |
| Winds.Flute | Instruments/Winds/Flute |
| Instruments/Winds/Clarinet |
要实现安全性,可以在 MXTOPIC 类中定义配置文件来匹配 TOPIC 对象。TOPIC 对象的名称和主题本身之间的连接是 TOPIC 对象的 TOPICSTR 参数。TOPICSTR(例如表 2 中的 Instruments/Winds/Flute)可以扩展到 10,240 个字符,而 TOPIC 对象名称仅限于 48 个字符。因此,TOPIC 对象的名称是任意的;TOPICSTR Instruments/Winds/Flute 的 TOPIC 对象可以是以下任何一个:INSTRUMENTS.WINDS.FLUTE、Winds.Flute、Flute 等。对于您的站点而言,重要的是您可以选择有意义的 TOPIC 名称,这在您将要定义的主题树上下文中有重要意义。
要讨论主题安全性,主题字符串和 TOPIC 对象的相关背景知识是必需的,因为有一些特征使主题安全性不同于其他 WebSphere MQ 对象(比如队列)上的安全性。一个区别是 MXTOPIC 类中的配置文件包含一个 PUBLISH 或 SUBSCRIBE 限定符,以便分别授予发布到主题权限和订阅主题权限。(这不同于 z/OS 上的队列安全性,在那里,同一个配置文件同时保护获取和发布的能力,因此没有必要分别授予获取和发布权限,除非要使用 QALIAS)。主题安全性还拥有以下特征:如果用户拥有访问一个 TOPIC 对象的权限,那么对于主题树中该 TOPIC 对象对应的 TOPICSTR 下的所有主题,该用户也隐式拥有同样的权限。例如:
示例 8. 定义一个配置文件来订阅一个主题并授予对 RACF 组的访问权
RDEFINE MXTOPIC CSQ1.SUBSCRIBE.Winds UACC(NONE) PERMIT CSQ1.SUBSCRIBE.Winds CLASS(MXTOPIC) ID(WSUSERS) ACCESS(ALTER) |
PERMIT 命令允许 RACF 组 WSUSERS 中的用户订阅与 Winds TOPIC 对象关联的 TOPICSTR 还有主题树中该字符串下方的所有主题字符串。 WSUSERS 能订阅主题字符串 Instruments/Winds 下方的主题,即使已经为那些主题字符串定义了 TOPIC 对象和 RACF 配置文件且 WSUSERS 不拥有那些主题的必要访问级别。这个示例可能会导致这样一种情况:WSUSERS 拥有 MXTOPIC 配置文件 CSQ1.SUBSCRIBE.Winds 的 ALTER 访问权并拥有配置文件 CSQ1.SUBSCRIBE.Winds.Flute 的 NONE 访问级别,但 WSUSERS 仍然能订阅 Instruments/Winds/Flute。主题安全性的这种行为与 RACF 配置文件的正常行为相矛盾,后者采用最匹配的配置文件。最后,对于向主题树下方的主题字符串关联的一个 TOPIC 对象授予隐式访问权限,最好还是显式授予访问权,而不是允许隐式访问权得以应用。例如,在上面描述的示例中,授予对配置文件 CSQ1.SUBSCRIBE.Winds.Flute 的 WSUSERS ALTER 访问权,这将允许检查配置文件的访问列表的任何人清楚地看到 WSUSERS 拥有的访问权,还能避免由于 WAUSERS 组中的用户拥有隐式访问权、不拥有显式授予的访问权而导致的 RACF 消息。
不能仅通过检查配置文件本身就确定 MXTOPIC 配置文件对主题安全性的作用。也就是说,MXTOPIC 配置文件的作用必须在主题树的拓扑和已定义的 TOPIC 对象的上下文中理解。要了解更多信息,请参阅 WebSphere MQ V7 信息中心 中的主题 “Publish/subscribe security”。
MQPROC 和 MQNLIST 类提供进程和名称列表安全性。这两个类比较相似,因为它们只有两个有意义的访问级别:
- NONE:不允许任何访问。
- READ:允许用户打开进程或名称列表,以便从程序查询(MQINQ)。
进程和名称列表提供信息。进程定义消息到达队列时启动的应用程序。名称列表定义一列资源,比如一列集群,队列管理器是集群成员。因此,程序要通过 MQI 进行查询,所需的只是查看进程或名称队列中的信息。这就是通过 MQPROC 和 MQNLIST 类提供的控制仅限于控制哪些用户能以编程方式查询这些资源的原因。MQCMDS 类中的配置文件控制使用 MQSC 命令或其他命令接口定义、删除或显示进程或名称列表的能力。
目前为止,我们检查了可用于保护 WebSphere MQ 的 RACF 类以及它们能保护的对象。下一个主题是如何定义这些类中的配置文件来保护队列管理器及其资源。RACF 类提供许多选项和功能。保护队列管理器面临的最大挑战也许是计划如何实现安全性,定义一个结构良好、容易理解的配置文件集,同时仍然能提供必要的安全性。本文余下部分将提供一些推荐方法。
开关和 RESLEVEL 配置文件并不直接保护 WebSphere MQ 资源,而是控制如何应用其他安全配置文件。如果已经为一个新队列管理器设置了安全性,最好不要定义任何禁用安全性的开关。另一方面,如果您正在评估一个现有队列管理器的安全性,并且定义了禁用安全性的开关,那么您需要检查哪些安全检查被绕过。如果相关文档记录了定义开关的合理性,那么您可以检查那些文档,查看开关是否仍然适用。可能出现下面的情况:一个安全性设置在几年前首次定义队列管理器时是合适的,但现在不再符合您站点的安全策略。
如果有些开关配置文件被定义为在队列共享组级别实施安全性(而不是禁用安全性),那么您需要检查那些配置文件是否按预期的方式工作。如果开关正在导致一些配置文件(比如队列管理器级配置文件)被忽略,那么最好删除那些未使用的配置文件,以免某人在列示和检查队列管理器的配置文件时感到困惑。
对于 RESLEVEL 配置文件,应该为队列管理器(或队列共享组)定义一个配置文件,以免应用某个不适当的通用配置文件。配置文件的 UACC 应该为 NONE。如果某些用户或组位于访问列表中,确保您理解为何授予那种访问权。最后,对 RESLEVEL 拥有 CONTROL 或 ALTER 访问权的任何用户或组都免于 MQI 安全检查,因此,如果某些用户拥有这种级别的访问权,您需要查明向他们授予该访问权的原因,并在必要时撤销他们的特权。
RESLEVEL 的开关(如果存在)和访问列表应该在您的所有队列管理器之间相似。也就是说,生产和测试中使用的设置应该相同 — 至少应该相似,如果您想在测试环境、而不是生产环境中测试您的安全配置的话。
开关和 RESLEVEL 之外的 RACF 配置文件直接控制对队列管理器、队列管理器的资源以及用于维护队列管理器的 WebSphere MQ 命令的访问。考虑这些资源的一种方法是分隔提供产品的基础架构的资源和本地定义的资源。第一类的示例是 MQSC 命令和一些 SYSTEM 对象,后者比如队列管理器在第一次启动时定义的各种 SYSTEM 队列。第二类,即本地定义的资源,包括应用程序队列、通道和主题等。
WebSphere MQ 安全性的有些方面比其他方面简单,比如 MQCONN 类实现的连接安全。尽管连接安全很重要,但对于它没有太多决策需要制定。连接安全性是一个简单的二元设置:用户要么可以连接队列管理器,要么不能。名称列表和集成的安全性也比较简单: MQNLIST 和 MQPROC 类只拥有两个有意义的设置 — NONE 和 READ。
在讨论 SYSTEM 和应用程序资源的配置文件之前,本节介绍backstop 配置文件,它们为类提供一个基线设置。RACF 定义用于 WebSphere MQ 的类,这样,如果没有发现任何配置文件,那么默认值是无访问权(即类描述符表定义中的 DFTRETC=8)。即使默认值是拒绝访问,常见的实践还是在 MQQUEUE 类中定义一个 backstop 配置文件。通常,定义一个带有 UACC(NONE) 的 backstop 配置文件,访问列表中没有或有很少用户。backstop 配置文件将在没有适用的特定配置文件时使用,如果设置为 UACC NONE,则拒绝访问。以这种方式使用 backstop 配置文件一直拒绝访问,直到用户能够访问一个更具体的配置文件为止。使用一个 backstop 配置文件、而不是让访问由于没有定义配置文件而失败的一个好处是便于审计:RACF 审计记录能记录成功和失败访问。对每个 WebSphere MQ 类都要定义一个 backstop 配置文件。对于 MQADMIN 类,除一个用于保护整个 MQADMIN 类的 backstop 配置文件外,您可能想定义一些 backstop 配置文件来实现替代用户安全性,以及用于各种命令资源的命令资源安全性。下面的示例展示了一个为 RACF Class MQQUEUE 的命令管理器 CSQ1 定义的backstop配置文件:
示例 9. MQQUEUE 类的 backstop 配置文件
RDEFINE MQQUEUE CSQ1.** UACC(NONE) |
由于产品本身定义所有 MQSC 命令,因此对于每个 z/OS 队列管理器,都存在同一个命令集。因此,您开发一个满意的模式来保护命令后,就可以对所有队列管理器实现相同的模式 — 即,相同的 MQCMDS 配置文件,相同或相似的访问列表。或者,您可能想拥有一个模式来保护用于测试和其他非生产队列管理器的命令,并拥有第二个更有限的模式来保护生产队列管理器上的命令。但是,可能存在这样的情况:对于每个独立队列管理器,保护命令的方法都是不同的。这种情况可能会让用户感到沮丧,这意味着没有仔细计划谁应该拥有对哪些命令的访问权。基于角色的安全性是组织命令、实现安全性最简单的方法。要了解可能需要访问各种命令的角色的更多信息,以及如何在那些角色之间划分命令,请参阅 WebSphere MQ for z/OS 安全性。
WebSphere MQ 拥有一些资源,它们使用一个高级限定符:SYSTEM。有些是队列管理器执行所需的资源,另一些定义为模型。由于这些资源要么是关键基础架构,要么是向为您的应用程序定义的资源提供默认值的模型,需要保护它们。为此,可以限制对可能会影响它们的命令的访问,或者,也可以通过命令资源安全性提供保护。下面 SYSTEM 资源的一些注意事项:
- SYSTEM 队列 — 即带有高级限定符 SYSTEM 的队列 — 由队列管理器、通道启动器、MQ 管理员和其他用户使用。产品文档包含一个标题为 “Access required to the SYSTEM queues by WebSphere MQ” 的表,列示了哪些用户需要哪个级别的 SYSTEM 队列访问。可以在产品手册中或 WebSphere MQ V7 信息中心 中的主题 “System queue security” 下找到这个表。
- 保护 SYSTEM.COMMAND.INPUT 队列及其别名的上下文的重要性已在上面的 关于命令队列的 CONTEXT 安全性的特殊考虑 一节中介绍。
- SYSTEM.BASE.TOPIC 主题作为任何没有父主题的主题的父主题。发布或订阅 SYSTEM.BASE.TOPIC 的授权允许用户发布或订阅任何主题。因此,考虑使用一个 UACC 值 NONE 为它定义一个 MXTOPIC 配置文件,访问列表中没有用户。 如 果您那样做,则需要使用相关 MXTOPIC 配置文件定义额外的 TOPIC 对象,并根据需要授予访问权。
- 使用命令资源安全性确保只有队列管理器的管理员能够修改任何种类的 SYSTEM 资源,如队列和通道。
- 尽管 RACF 配置文件不用于这一点,一种常见做法是通过为它们的 MCAUSER 编码一个无效 userid(或一个没有访问权的 userid)使接收消息的 SYSTEM.* 通道不可用。
必须定义 RACF 配置文件来保护您为您的队列管理器定义的本地应用程序对象。通常可以通过定义一些通用配置文件来保护一组资源来保护应用程序资源,只要该组资源使用一种命名惯例,以便可以定义一个仅适用它们的通用配置文件。常见的应用程序对象惯例是以一个特定于应用程序 的高级限定符开始名称,比如一个队列名称。定义一些通用配置文件,以便它们适用一个共享安全要求的对象集,比如一个应用程序的所有用户都需要相同访问级别的队列集。如果一个配置文件适用不应该共享相同访问列表的对象,那么很明显,那个配置文件太通用了。如果遇到这种情况,您需要定义额外通用的、完全限定的或组配置文件,直到配置文件提供足够的细粒度来限制对它们的访问。
- 可以使用通用配置文件保护队列,通用配置文件 — 如上所述 — 适用一个能共享一个访问列表的队列集。如果您需要为某些用户授予获取访问权而不是放置访问权(或放置访问权而不是获取访问权),那么可以定义 QALIAS 定义。要了解更多信息,请参阅 WebSphere MQ V7 信息中心 中的主题 “Using alias queues to distinguish between MQGET and MQPUT requests”。
- TOPIC 对象和匹配它们的 RACF 配置文件保护主题树。还记得吗,一个 TOPIC 对象的访问权隐式授予对主题树中 TOPIC 所在位置以及该位置以下的所有主题字符串的访问权。因此,主题树和与之关联的 TOPIC 对象需要仔细计划,以便能够根据需要保护主题。也就是说,设计主题树布局时需要计划安全性要求。
- 队列上下文的安全性 — 超出 SYSTEM.COMMAND.INPUT 的安全性 — 取决于您是否将使用消息描述符的上下文部分中的 UserIdentifier 或其他字段。作为一个出发点,一个backstop配置文件,以及用于应用程序队列的任何配置文件,可以被定义为将所有上下文保护为 UACC NONE,以便没有应用程序能够通过传递或设置它来修改上下文。如果没有应用程序将使用依赖 UserIdentifier(或上下文中的其他字段)的值的任何特性,那么没有应用程序 userids 应该需要对保护上下文的配置文件拥有高于 NONE 的访问级别。(MCA 通道需要授权来设置它们放置到的队列的上下文,要了解更多信息,请参阅 WebSphere MQ V7 信息中心 中的主题 “Security considerations for the channel initiator on z/OS”。)另一方面,如果您的确 拥有依赖上下文字段的应用程序(例如使用 ALTERNATE USER 安全性的应用程序),或者使用 PUTAUT(CTX) 的通道,那么您需要更仔细地检查上下文安全性。如果您的队列管理器执行需要传递或设置上下文的程序,那么实现配置文件和最少的特权,以便只有需要这个特权的用户拥有相应特权。由于设置上下文的特权允许用户覆盖 UserIdentifier,因此,如果您正在使用任何依赖 UserIdentifier 的特性,那么授予设置特权时一定要小心。
- 与上下文安全性类似,如果您不打算使用替代用户安全性,那么可以定义一个 UACC 为 NONE 的backstop配置文件(CSQ1.ALTERNATE.USER.**),且不要向它授予任何用户访问权。如果您的确打算允许替代用户,除backstop配置文件外,那么您可以为多个独立 userids、一个通用 userid(可能不太有用,因为 userids 通常不以一种使通过一个通用配置文件保护它们变得更轻松的方式来定义)和一组 userids(使用 GMQADMIN 或 GMXADMIN 类)定义配置文件。
- 可以为应用程序资源(比如应用程序队列)定义命令资源安全性配置文件,以控制哪些用户能定义哪些队列。在一个开发环境中, 您可以使用它们允许不同应用程序的分析师只定义他们的应用程序的队列。但是,即使您只允许 MQ 管理员定义队列,命令资源安全性配置文件仍然能够(至少部分)用作 一种实施命名标准的方式。也就是说,如果已经针对带有 UACC(NONE) 的 MQADMIN(或者一种特定类型的命令资源,比如队列)和一个空访问列表定义了一个backstop配置文件,那么默认值是任何人都没有定义任何资源的权限。如果除backstop配置文件外,还定义了 SYSTEM 和应用程序配置文件,那么只能定义匹配那些命令资源安全性配置文件的资源(比如队列)。
对于批、CICS 和 IMS 连接,确定哪些用户或组需要处于已经定义了的配置文件的访问列表中比较简单:
- 批连接可能只有一个与之关联的 userid,那个 userid 的源(比如作业 userid 或 TSO userid)通常是明显的。
- 对于 CICS,根据区域 userid 的 RESLEVEL 访问权,区域 userid(也可能是事务 userid)需要经过检查才能获得访问权。
- 对于 IMS,根据区域 userid 的 RESLEVEL 访问权,区域 userid(也可能是一个辅助 userid)需要经过检查才能获得访问权。要了解更多信息,请参阅 WebSphere MQ V7 信息中心 中的主题 “User IDs checked for IMS connections”。
- 如果您正在使用 CICS 桥接或 IMS 桥接,请参阅产品文档获得相关指导。
通道安全性更复杂,因为它依赖几个设置:
- RESLEVEL 控制要检查多少 userids。
- 使用 TCP/IP 协议的通道的通道 userid 默认采用通道启动器的 userid,但是,如果通道使用 SSL,那么可以通过 SSL 客户机的证书分配一个 userid。
- 通道本身上的 PUTAUT 参数控制检查哪些 userids(例如 MCAUSER 和替代用户)以获得授权。
文章 WebSphere MQ for z/OS 安全性 的大部分内容都关于通道安全性,因此该文章包含关于这个主题的更多信息。
关于 z/OS 上的 WebSphere MQ 安全性的产品文档非常丰富,本文只是一个概览,帮助不熟悉这个主题的读者理解一些基础知识。还有很多主题不可能在这样一篇介绍性文章中详细讨论,要了解更多信息,您可以在 WebSphere MQ V7 信息中心 搜索本文提到过的主题。
针对 z/OS 上的 WebSphere MQ 安全性定义的 RACF 类拥有许多选项。设置新队列管理器的安全性或检查现有队列管理器的配置文件时的出发点应该是考虑哪些访问需要保护。也就是说,哪些人可以发出哪些命令?谁可以在哪些队列上获取和放置消息?应该阻止管理员访问(甚至浏览)某些队列上的消息吗?当您确定自己的安全要求之后,就可以开始设计配置文件来最好地保护您的队列管理器及其应用程序消息。仔细计划有助于组织提供所需安全性的配置文件,还有助于使配置文件足够简单,以便它们的目标易于理解。
学习
- WebSphere MQ 资源
- WebSphere MQ for z/OS 安全性
这篇 developerWorks 文章向有一定经验的读者提供关于如何在 z/OS 上保护 WebSphere MQ 的评论。 - WebSphere MQ 在分布式平台和 z/OS 上的安全性比较
这篇 developerWorks 文章描述在分布式平台和 z/OS 上实现 WebSphere MQ 安全性有什么区别。 - WebSphere MQ 开发人员资源页面
帮助您使用 WebSphere MQ 设计、开发和部署消息传递中间件,以将应用程序、Web 服务和事务集成到几乎任意平台上的技术资源。 - WebSphere MQ 产品页面
产品说明、产品新闻、培训信息、支持信息等。 - WebSphere MQ 文档库
WebSphere MQ 产品手册。 - WebSphere MQ V7 信息中心
一个可访问所有 WebSphere MQ V7 文档的 Web 门户,包含关于安装、配置和使用您的 WebSphere MQ 环境的概念、任务和参考信息。 - IBM 红皮书:WebSphere MQ V7 特性和增强
描述消息队列技术的基本概念和好处以及 V7 中的新特性,并提供一个业务场景来展示那些新特性的实际应用。 - WebSphere MQ V7 试用版下载
一个功能齐全的 WebSphere MQ V7.0 免费试用版,试用期为 90 天。 - WebSphere MQ 支持页面
一个支持问题及其解决方案的可搜索数据库,包含下载、修复程序、问题跟踪等。 - WebSphere MQ 公共新闻组
这不是一个 IBM 论坛,但您可以在此获得 WebSphere MQ 技术问题的答案,并与他人分享您的 WebSphere MQ 知识。 - WebSphere MQ SupportPacs
针对 WebSphere MQ 产品系列的可下载代码、文档和性能报告。
- WebSphere MQ for z/OS 安全性
- WebSphere 资源
- developerWorks WebSphere 开发人员资源
面向使用 WebSphere 产品的开发人员的技术信息和资源。developerWorks WebSphere 提供产品下载、how-to 信息、支持资源以及一个免费技术库,该技术库包含 2000 多篇技术文章、教程、最佳实践、IBM 红皮书和在线手册。 - developerWorks WebSphere 应用程序连通性开发人员资源
帮助您构建 WebSphere 应用程序连通性和业务集成解决方案的 how-to 文章、下载、教程、培训、产品信息等资源。 - 最流行的 WebSphere 试用版下载
免费下载关键 WebSphere 产品试用版。 - WebSphere 论坛
特定于产品的论坛,可以在此获得技术问题的答案,并与其他 WebSphere 用户分享您的专业经验。 - IBM developerWorks 演示中心
下载并观看 WebSphere 按需演示,了解 WebSphere 产品和 WebSphere 相关技术的用途。 - developerWorks 中国时事通讯
developerWorks 新闻简讯提供了您感兴趣的主题的最新文章和信息。除 WebSphere 以外,还可以选择 Java、Linux、Open source、Rational、SOA、Web 服务和其他主题。立即订阅并设计您的定制邮件。 - IBM Press 的 WebSphere 相关图书
通过 Barnes & Noble 便捷地在线订购。 - WebSphere 相关活动
世界各地针对 WebSphere 开发人员的会议、商贸展览、网络广播和其他活动。
- developerWorks WebSphere 开发人员资源
- developerWorks 资源
- developerWorks 博客
加入 developerWorks 用户和作者、IBM 编辑和开发人员的谈话。 - developerWorks 网络广播
由 IBM 专家主持的免费技术活动可以帮助您加快学习进度,在最困难的软件项目中取得成功。这些在世界各地举行的活动包括一小时的网络广播、半天到全天的真实活动等。 - developerWorks 播客
收听新颖有趣的软件创新者访谈和讨论。 - IBM Education Assistant
一个多媒体培训模块集合,帮助您更好地理解 IBM 软件产品,更有效地使用它们来满足您的业务需求。
- developerWorks 博客
获得产品和技术
- 最受欢迎的 WebSphere 试用软件下载:下载关键 WebSphere 产品的免费试用版。
- IBM developerWorks 软件下载资源中心:IBM deveperWorks 最新的软件下载。
- IBM developerWorks 工具包:下载关键 WebSphere 最新的产品工具包。
讨论
-
IBM developerWorks 社区 BPM 群组:为开发人员设立的 BPM 群组,了解业务流程管理解决方案的最新技术资源。
- 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
- 加入 IBM 软件下载与技术交流群组,参与在线交流。
