WebSphere MQ for z/OS 安全性入门

这篇 WebSphere MQ for z/OS 安全性简介文章旨在向以下两类人提供帮助:熟悉 z/OS 但不熟悉 WebSphere MQ 的人;熟悉 WebSphere MQ 且愿意了解如何在 z/OS 上保护它的人。

Tom Schneider, 团队主管,Integrated Technology Delivery,WebSphere MQ, IBM

Tom Schneider 的照片Tom Schneider 从 WebSphere MQ 首次发布开始就一直与之打交道,他从事 z/OS 平台上的产品支持超过 20 年。



2011 年 5 月 05 日

免费下载: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 文章,本文将引用它们,而不是重复它们包含的信息:

本文描述使用 RACF 实现的安全性。如果您的系统使用不同的安全管理器,则安全设置的语法将有所不同,但基本信息应该仍然适用。

WebSphere MQ 基础知识

本节描述 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)。

WebSphere MQ 资源和保护它们的 RACF 类

RACF 通过规则控制访问,规则称为配置文件,在 中定义。RACF 类包含适用特定资源类型的配置文件。例如,MQQUEUE 类包含控制队列访问的配置文件。WebSphere MQ V7.0.0 添加了对能包含使用混合大小写的配置文件的类的支持。如果使用混合大小写配置文件,配置文件中只有表示资源本身的部分可以包含在混合大小写中。下面的 示例 8 展示了一个混合大小写配置文件示例。下表列举了为 WebSphere MQ 定义的类及其保护的资源类型。第 3 列和第 4 列是组合类。组合配置文件能保护其名称无法通过一个通用配置文件轻松保护的资源,这是因为组合配置文件包含一列资源(比如一列完全限定的队列名称),但将它们收集在单个配置文件之下,以便对该组合应用一个访问列表。 MQCMDS 和 MQCONN 类没有相关组合或混合大小写类,MXTOPIC 没有相关大写类。

表 1. 资源和保护它们的 RACF 类
受到保护的资源类型大写类大写组合类混合大小写类(v7 和更高版本)混合大小写组合类(v7 和更高版本)
管理MQADMINGMQADMINMXADMINGMXADMIN
命令MQCMDS
连接MQCONN
名称列表MQNLISTGMQNLISTMXNLISTGMXNLIST
进程MQPROCGMQPROCMXPROCGMXPROC
队列MQQUEUEGMQQUEUEMXQUEUEGMXQUEUE
主题(v7 和更高版本)MXTOPICGMXTOPIC

在本文后半部分,如果提到非组合大写类,比如 MQQUEUE,则它代表表 1 中的同一行中的任何类。例如,当本文列示 MQQUEUE 时,则 GMQQUEUE、MXQUEUE 或 GMXQUEUE 中的配置文件也可以使用。

大多数资源都映射到一个特定的类集合;例如,MQQUEUE、GMQQUEUE、MXQUEUE 和 GMXQUEUE 类保护队列。MQADMIN 中的配置文件及其相关组合和混合大小写类适用几种不同的资源类型。这些是开关和 RESLEVEL 配置文件,以及针对 Alternate User 和 Context 的 MQI 安全性,最后还有命令资源安全性。本文后面部分将详细介绍它们。

SCYCASE

WebSphere MQ V7.0.0 或更高版本拥有一个名为 SCYCASE 的新 QMGR 参数。可以将其设置为 UPPER(默认值)或 MIXED,控制队列管理器是使用大写还是混合大小写 RACF 类。如上表所示,有些类(比如 MQCMDS 和 MQCONN)只有大写形式,而另一些类(比如 MXTOPIC 和 GMXTOPIC)只有混合大小写形式。只有大写或混合大小写版本的类(比如 MQCMDS 或 MXTOPIC)只可用于 SCYCASE UPPER 或 MIXED。同时拥有大写和混合大小写版本的类(比如 MQQUEUE 和 MXQUEUE)只可用于一种形式或另一种形式,这取决于 SCYCASE 的设置。

更多 RACF 配置文件信息

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 类配置文件

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

一个队列管理器只有一个 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 访问权。

MQI 安全性

本节描述 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)

关于命令队列的 CONTEXT 安全性的特殊考虑

对于用于命令输入 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 对象主题字符串
InstrumentsInstruments
WindsInstruments/Winds
Winds.FluteInstruments/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 类保护队列管理器

目前为止,我们检查了可用于保护 WebSphere MQ 的 RACF 类以及它们能保护的对象。下一个主题是如何定义这些类中的配置文件来保护队列管理器及其资源。RACF 类提供许多选项和功能。保护队列管理器面临的最大挑战也许是计划如何实现安全性,定义一个结构良好、容易理解的配置文件集,同时仍然能提供必要的安全性。本文余下部分将提供一些推荐方法。

开关和 RESLEVEL 配置文件

开关和 RESLEVEL 配置文件并不直接保护 WebSphere MQ 资源,而是控制如何应用其他安全配置文件。如果已经为一个新队列管理器设置了安全性,最好不要定义任何禁用安全性的开关。另一方面,如果您正在评估一个现有队列管理器的安全性,并且定义了禁用安全性的开关,那么您需要检查哪些安全检查被绕过。如果相关文档记录了定义开关的合理性,那么您可以检查那些文档,查看开关是否仍然适用。可能出现下面的情况:一个安全性设置在几年前首次定义队列管理器时是合适的,但现在不再符合您站点的安全策略。

如果有些开关配置文件被定义为在队列共享组级别实施安全性(而不是禁用安全性),那么您需要检查那些配置文件是否按预期的方式工作。如果开关正在导致一些配置文件(比如队列管理器级配置文件)被忽略,那么最好删除那些未使用的配置文件,以免某人在列示和检查队列管理器的配置文件时感到困惑。

对于 RESLEVEL 配置文件,应该为队列管理器(或队列共享组)定义一个配置文件,以免应用某个不适当的通用配置文件。配置文件的 UACC 应该为 NONE。如果某些用户或组位于访问列表中,确保您理解为何授予那种访问权。最后,对 RESLEVEL 拥有 CONTROL 或 ALTER 访问权的任何用户或组都免于 MQI 安全检查,因此,如果某些用户拥有这种级别的访问权,您需要查明向他们授予该访问权的原因,并在必要时撤销他们的特权。

RESLEVEL 的开关(如果存在)和访问列表应该在您的所有队列管理器之间相似。也就是说,生产和测试中使用的设置应该相同 — 至少应该相似,如果您想在测试环境、而不是生产环境中测试您的安全配置的话。

开关和 RESLEVEL 配置文件之外的配置文件

开关和 RESLEVEL 之外的 RACF 配置文件直接控制对队列管理器、队列管理器的资源以及用于维护队列管理器的 WebSphere MQ 命令的访问。考虑这些资源的一种方法是分隔提供产品的基础架构的资源和本地定义的资源。第一类的示例是 MQSC 命令和一些 SYSTEM 对象,后者比如队列管理器在第一次启动时定义的各种 SYSTEM 队列。第二类,即本地定义的资源,包括应用程序队列、通道和主题等。

WebSphere MQ 安全性的有些方面比其他方面简单,比如 MQCONN 类实现的连接安全。尽管连接安全很重要,但对于它没有太多决策需要制定。连接安全性是一个简单的二元设置:用户要么可以连接队列管理器,要么不能。名称列表和集成的安全性也比较简单: MQNLIST 和 MQPROC 类只拥有两个有意义的设置 — NONE 和 READ。

backstop 配置文件

在讨论 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 和应用程序配置文件,那么只能定义匹配那些命令资源安全性配置文件的资源(比如队列)。

需要访问配置文件的 userids

对于批、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 类拥有许多选项。设置新队列管理器的安全性或检查现有队列管理器的配置文件时的出发点应该是考虑哪些访问需要保护。也就是说,哪些人可以发出哪些命令?谁可以在哪些队列上获取和放置消息?应该阻止管理员访问(甚至浏览)某些队列上的消息吗?当您确定自己的安全要求之后,就可以开始设计配置文件来最好地保护您的队列管理器及其应用程序消息。仔细计划有助于组织提供所需安全性的配置文件,还有助于使配置文件足够简单,以便它们的目标易于理解。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=656811
ArticleTitle=WebSphere MQ for z/OS 安全性入门
publish-date=05052011