再上一篇:第六章 RACF概述
上一篇:6.2 用户和组的管理
主页
下一篇:6.4 通用资源引论
再下一篇:6.5 RACF 选项
文章列表

6.3 数据集的保护

IBM S390 系统管理基础(zSeries,IBMSystemz, z/VM,zOS等操作系统使用,命令的参数与用法等)

同其他通用资源一样,RACF保护数据集也是通过建立数据集的PROFILE来实现的。 RACF 可保护 HLQ 是用户 ID 或组名的数据集。而且数据集的名字最好至少包含 2 个 QUALIFER。其他数据集则不予保护。RACF 可以设置为用户只能创建或访问受 RACF 保护 的数据集。要保护数据集,必须创建数据集的 PROFILE。一个分区式的数据集的所有成
员,都被同一个数据集PROFILE保护。 一般来讲,用户可以保护自己的数据集,也就是说,它可以规定其它用户和组访问
自己的数据集的权限。但也可以限制用户定义和改变PROFILE的能力。如果一个用户要 保护其他用户的数据集,则他必须具备以下条件之一:
(1) 这个用户具有SPECIAL属性。
(2) 这个用户具有GROUPSPECIAL属性,并且要保护的数据集的HLQ是一个在其 管理范围之内的用户。
(3) 具有OPERATIONS属性(或GROUPOPERATIONS属性,并且要保护的数据集的
HLQ也是一个在其管理范围之内的用户)。 用户也可以保护组的数据集。所谓组的数据集是指数据集的HLQ是组名的数据集。
当然,他必须具备以下条件之一:
(1) 在组中具有JOIN、CONNECT或CREATE属性。
(2) 具有SPECIAL属性。
(3) 具有GROUPSPECIAL属性,并且数据集的HLQ是一个在其管理范围之内的组 名。
使用数据集PROFILE可以控制用户是否可以创建、修改、删除数据集。这件事情有 时会比较复杂。比如对于编目的数据集,尽管你可以创建一个数据集PROFILE保护多个
数据集,由于这些数据集在编目中有登记,当你改变数据集的名字、删除数据集、或创 建数据集时,要改变编目。而编目也是一个数据集,如果你对编目没有一定的权限,你
也不能完成这样的工作。对于ICF编目来说,你需要:
-要创建一个数据集,也就是说,要在编目中加入一个项目,你必须对编目有UPDATE 权限并且在数据集PROFILE中的授权是ALTER。
-要删除一个数据集,也就是说,要在编目中删除一个项目,你必须对编目有ALTER
权限并且在数据集PROFILE中的授权是UPDATE。 在下面情况下,用户可以成功地创建一个用户数据集。
-要创建的数据集被一个已存在的通用的PROFILE保护,并且用户没有ADSP属性,
用户通过PROFILE对数据集有ALTER权限,或直接在全局访问检查中通过了安全检查;
要创建的数据集的拥有者就是用户自己。此时RACF并不创建新的数据集PROFILE。
-数据集名没有被一个通用的 PROFILE 所覆盖,用户也没有 ADSP 属性。此时如果 PROTECT-ALL 如果不起作用,则可以创建,RACF 也不创建 PROFILE。这样的数据集实际
上并没有被RACF保护起来。
-用户有 ADSP 属性,要创建的数据集是用户自己的。此时 RACF 创建一个分离的数 据集PROFILE。
-用户有 OPERATIONS 属性或 GROUP OPERATIONS 属性,而新数据集名的HLQ 是一个 在其管理范围内的用户ID。
在以下情况下用户可以成功地创建一个属于组的数据集。
-数据集被一个已存在的通用数据集PROFILE保护,用户没有ADSP属性。在此情况 下至少以下条件之一成立:
(1)用户在数据集PROFILE或在全局访问检查中有ALTER授权。
(2)用户在组中有CREATE授权。 此时RACF不创建PROFILE。
-数据集名没有被一个通用的 PROFILE 所覆盖,用户也没有 ADSP 属性。此时如果
PROTECT-ALL如果不起作用,则可以创建,RACF也不创建PROFILE。
-用户具有ADSP属性,数据集属于一个组,而用户又是这个组的成员之一。此时只 有用户在组中具有 CREATE 授权,才可以创建数据集,创建数据集的同时,RACF 创建一
个分离的数据集PROFILE。
如果PROTECT-ALL 不起作用,任何一个没有ADSP 属性的用户都可创建HLQ 既不是 一个用户ID又不是一个组名的数据集。当然,这样的数据集不能被RACF所保护。如果
以后又想保护这些数据集,则可以创建一些空组(也就是说这些组中没有用户)其组名是 这些数据集的HLQ。
在任何情况下,如果用户在JCL的DD语句中指定了PROTECT=YES或SECMODEL参数,
或者在TSOALLOCATE命令中指定了PROTECT或SECMODEL参数,RACF把这个用户处理成 具有ADSP属性,也就说RACF会创建一个分离的数据集PROFILE。
如果PROTECT-ALL起作用,除非数据集被某个PROFILE所保护,否则用户不能创建
数据集。
数据集的PROFILE由以下Field组成: 数据集PROFILE名:PROFILE的名字。
拥有者:是一个用户或组。如果是一个用户,则这个用户对此PROFILE具有全部的 控制,包括访问列表。如果拥有者是一个组,则以GROUP SPECIAL属性连接到这个组中
的用户对此PROFILE具有全部的控制。注意,拥有数据集PROFILE并不意味着拥有者自
动具有对数据集的访问权限,要访问数据集还必须在数据集的PROFILE中的访问列表中 授权,或改变数据集的UUAC,除非PROFILE名的HLQ是拥有者用户的用户ID。
UACC:通用的访问权限。
访问列表:哪些用户或组可以有哪些权限。 SECURITY CLASSIFICATION:数据集的安全标识。
其中权限有以下几种:
ALTER:拥有完全的控制。对于通用的PROFILE来说,除可读写执行外,还可创建此
通用的PROFILE所覆盖的数据集。
CONTROL:对于VSAM数据集,与CI的口令相同;对非VSAM数据集,与UPDATE相同。 UPDATE:可读写。
READ:可读。 EXECUTE:可执行。
NONE:无任何权限。
数据集的PROFILE有两种形式:
-分散的数据集 PROFILE:一个 PROFILE 对应于一个数据集,也就是说数据集的名 字与其PROFILE名字完全相同。创建一个受分离的PROFILE保护的数据集时,有两个与
RACF有关的步骤:
(1)RACF设置一个标志指示数据集是受RACF保护的。这个标志对于非VSAM数据集 来说,存在于 VTOC 中的数据及控制块 DSCB 中;而对于 VSAM 数据集来说,这
个标志则存于编目项中。
(2)RACF把分离的数据集PROFILE加到RACF数据库中。 删除一个受分离的数据集PROFILE保护的数据集同时也会在RACF数据库中删除此数
据集PROFILE。但反之并不如此。
-通用的数据集 PROFILE:一个 PROFILE 对应于多个数据集,也就是说 PROFILE 的 名字中含有通配符*、%、**,当然也有无通配符的通用PROFILE。在RACF中,有两种通
配符的使用方式,一种叫EGN方式,另一种叫非EGN方式。不管在那一种方式中,%均代 表一个字符,而*代表一个QUALIFER。在EGN中,**代表0个以上的QUALIFER,*还可以
代表一个 QUALIFER 后部的 0 个以上字符。在非 EGN 中,*代表一个 QUALIFER 后部的 0
个以上字符,或 0 个以上的 QUALIFER。在 RACF 中可以设置使用 EGN 方式还是非 EGN 方 式,但两者不能同时使用。一般在一个系统中一旦使用一种方式后就不要再使用另外一
种方式。
使用通用的数据集PROFILE 减少了 RACF 数据库中PROFILE 的个数。创建通用的数 据集PROFILE可用以下方式:
-使用addsd命令时,PROFILE名中含有通配符,这样RACF自动创建通用的数据集
PROFILE。
-在创建数据集 PROFILE 时,明确指定 GENERIC 参数。这样即使数据集 PROFILE名 中并不包含通配符,RACF创建的也是通用的数据集PROFIE。
当你创建了通用的数据集 PROFILE 之后,还应该发布下面命令把通用数据集 PROFILE在内存中的副本刷新。
SETROPTS GENERIC(DATASET) REFRESH
为什么要使用通用数据集PROFILE呢?主要有以下的原因:
1)你想用一个PROFILE保护多个数据集。
2)如果你有一个数据集经常需要删除,然后再创建,而其权限又要保持不变,你 可以创建一个不含通配符的通用数据集PROFILE保护这个文件。
要使RACF在数据集授权检查时检查通用数据集PROFILE,必须使用如下命令激活通 用数据集PROFILE检查:
SETROPTS GENERIC(DATASET)
有时为了方便,如果要保护的数据集与其它名字类似的数据集在安全权限上有其特 殊性,则不必创建通用的数据集 PROFILE,而单独为这个数据集创建一个分离的数据集 PROFILE。创建或修改这样的 PROFILE 后立即生效,不必刷新 RACF 在内存中的 PROFILE 副本,但太多的分离的PROFILE使得RACF数据库变得较大而难以维护。
当 RACF 对数据集进行授权检查时,RACF 首先要找到最匹配的数据集 PROFILE。以 下是找最匹配的数据集PROFILE的顺序:
1)分离的数据集PROFILE。
2)无通配符的通用数据集PROFILE。
3)最相近的通用的数据集PROFILE。
如果有两个通用数据集PROFILE都与一个数据集的名字相匹配,则逐个字符的比较 这两个通用数据集 PROFILE,如果在第一个不同点中发现一个 PROFILE 此处是字符,而
另一个是通配符,则淘汰通配符的那一个 PROFILE。如果两个 PROFILE 的第一个不同点
都是通配符,若一个 PROFILE 在不同点处是%,另一个是*或**,则淘汰后者; 若一个 PROFILE在不同点处是*,另一个是**,则淘汰后者。
可以使用带GENERIC参数的LISTDSD命令来确定究竟哪一个数据集PROFILE是最相
近的数据集PROFILE。
LISTDSD DATASET(‘数据集名’) GENERIC
在 RACF 参数设置中,如果指定的PROTECT-ALL 起作用,则通用的PROFILE 检查一
定也要起作用。如果一个用户对某个数据集具有ALTER授权,而且授权是通过全局访问 表得到的,则RACF允许改变数据集的名字;使其名字仍然被全局访问控制表中的某个项
所覆盖;若授权是通过通用的PROFILE得到的,则RACF允许改变数据集的名字;使其名
字被另一个通用数据集PROFILE所覆盖。但改名不允许使一个数据集原来被一个通用的 数据集PROFILE保护而改为被全局访问别所覆盖。因为这样会产生安全问题。
要改变一个通用的PROFILE,用户必须是PROFILE的拥有者,或具有SPECIAL属性,
或具有GROUP SPECIAL属性并且在你的管理范围内,或用户ID是PROFILE的HLQ。 如图6.6所示,是数据集的授权访问检查流程。

图6.6 数据集授权检查的流程 从图中可以看出数据集访问授权检查过程如下:
-PPT(PROGRAM PROPERTIES TABLE)是MVS中的程序属性表,如果访问该数据集的程 序在PPT中被设置了BYPASS位,则不调用RACF进行授权检查.
-RACF 所作的第一项检查是检查用户是否在 RACF 启动过程表中登记为特权的或可 信任的。如果是则允许访问。
-RACF所作的第二项安全检查是检查全局访问表中的项目。所谓全局访问表是RACF
维护的一个表,它登记了系统中最常用的资源的访问权限。由于这些资源是系统中几乎
每一个用户都要使用的资源,因此不必在PROFILE中特别指定访问权限。全局访问表只 用于肯定用户的请求,也就是说用户对某资源的访问请求如果低于在全局访问表中登记 的访问权限,则用户立即得到允许访问,而不必进一步进行RACF PROFILE的安全检查。 有关全局访问表的内容,请读者参见本章第四节通用资源引论。
-查找最合适的PROFILE。由于采用了通用的PROFILE,有可能一个数据集被多个不 同的PROFILE所覆盖,RACF总是查找最匹配的PROFILE。
-如果用户的安全标识低于数据集的安全标识,则立即拒绝用户的访问。注意,安 全标识只用于否定用户的请求,因此如果用户的安全标识高于资源的安全标识时,并不
意味着用户立即得到允许访问资源,而是还要进一步进行PROFILE的检查。
-如果用户的USERID与数据集的HLQ相同,则用户得到允许访问资源。否则进行进 一步的检查。
-如果用户的USERID在数据集PROFILE的访问列表中,并且数据集PROFILE访问列
表中登记的该用户具有所要求的访问权限,则允许用户访问;如果用户的USERID在数据 集PROFILE的访问列表中,但数据集PROFILE访问列表中登记的该用户并不具有所要求
的访问权限,则拒绝用户访问;如果用户的USERID不在在数据集PROFILE的访问列表中
则进行进一步的PROFILE安全检查。
-如果用户所在的组在数据集 PROFILE 的访问列表中,并且数据集 PROFILE 访问列 表中登记的该用户所在的组具有所要求的访问权限,则允许用户访问;如果用户的
USERID在数据集PROFILE的访问列表中,但数据集PROFILE访问列表中登记的该用户所 在的组并不具有所要求的访问权限,则拒绝用户访问;如果用户所在的组不在数据集
PROFILE的访问列表中则进行进一步的PROFILE安全检查。
-如果数据集PROFILE中的UACC(通用访问权限)高于用户的访问请求,则允许用户 访问数据集。否则拒绝用户的访问。
-如果用户具有全局的 OPERATIONS 属性,或者具有 GROUP-OPERATIONS 并且要访问
的数据集在其控制范围内,则允许用户访问。
-如果以上条件均不满足则拒绝用户访问。
1)定义数据集PROFILE的命令ADDSD
ADDSD PROFILE 名 [OWNER( 用 户 或 组 名 )] [UACC( 访 问 权 限 )] [AUDIT(NONE/ALL/SUCCESS/FAILURES [READ/UPDATE/CONTROL/ALTER] [WARNING]
[NOTIFY(用户)] [ERASE] [SECLEVEL(安全级别名)] [ADDCATEGORY(CATEGORY 名)]
[SECLABEL(安全标识名)] [GENERIC/MODEL/TAPE] [FROM(模版名)] [FCLASS(模版属于的 类)] [FVOLUME(卷名)] [DFP(RESOWNER(用户或组))]
命令中多数选项我们在前面已作过描述,在此我们只介绍一部分前面没有说明的选
项。
AUDIT指示在哪种情况下作记录(读、写、CONTROL、ALTER时,不记录,所有都要记 录、成功时、失败时)。
WARNING指示用户在没有权限时访问这个数据集时,系统会给他一个警告信息。 NOTIFY指示当RACF否决了一个对该数据集的访问请求时,通知一个特定的用户。
ERASE:数据集被删除后,数据被擦掉。所谓被擦掉是指当数据集被删除时,不仅从
逻辑上被删除掉,而且数据集原来所占用的介质空间也全部改写为全零,以防当这部分
空间分配给其它数据集后,被其他用户读取原来的数据集。
GENERIC:尽管PROFILE的名字不像一个通用的PROFILE,建立一个通用的PROFILE。 MODEL:建立一个模版。
TAPE:建立一个磁带上的数据集的PROFILE。 FROM:创建该PROFILE时参考哪一个模版。
FCLASS:模版属于的类。
FVOLUME:在哪一个卷上找模版。
DFP:创建数据集时找指定的用户或组的DFP段,取出其CONSTRUCT,作为分配数据 集的CONSTRUCT。
例:
AD 'HR.PUBLIC.**' UACC(READ) FROM ('HR.*.**')
该命令创建一个数据集PROFILE,名字是HR.PUBLIC.**,保护所有以HR.PUBLIC.打 头的数据集,通用访问权限是UACC,其它属性参数来自名字为HR.*.**的PROFILE。
AD 'HR.UNION.CONTRACT' GENERIC OW(HR) UACC(NONE) AUDIT(FAILURES SUCCESS(UPDATE))
该命令创建一个通用的PROFILE,名字是HR.UNION.CONTRACT。尽管这个名字看起来 像一个分散的PRIFILE,但由于指定了参数GENERIC,所以仍然是一个通用的PROFILE。
这个PROFILE的拥有者是HR,通用访问权限是NONE,当访问受该PROFILE保护的数据集
失败或成功地修改数据集时记录这一事件。
2)修改访问列表PERMIT
修改访问列表可以使用命令PERMIT,其格式如下:
PERMIT/PE PROFILE 名 [GENERIC] [ID(用户或组名)] [ACCESS(权限)/DELETE] [WHEN(PROGRAM( 程 序 名 ))] [RESET [ALL/STANDARD/WHEN]] [FROM(PROFILE 名 )]
[FGENERIC] [FCLASS(类名)]
PROFILE名:要改变的PROFILE名。 GENERIC:这个PROFILE是一个通用的PROFILE。
ID:要在访问列表中改变的用户或组。
WHEN:是一个条件访问列表,用户只能通过指定的程序访问数据集,而不能直接访 问数据集。当然要使用条件访问列表,必须用命令SETROPTWHEN(PROGRAM)通知RACF可
以使用条件访问列表,同时程序也应是RACF保护的。
RESET:删除访问列表。ALL:删除所有访问列表;STANDARD:删除标准访问列表; WHEN:删除条件访问列表。
FROM:从指定的PROFILE中复制访问列表。
FGENERIC:指定的PROFILE是通用的。 FCLASS:指定的PROFILE所在的类。
例:
PE 'SALES.US.**' FROM(SALES.*.**') ID(MKTG) AC(READ)
3)其他命令
(1)改变数据集PROFILE的命令
ALTDSD (PROFILE 名 ) [GLOBALAUDIT (NONE/ALL/SUCCESS/FAILURES)]
[DELCATEGORY(CATEGORY-NAME)] [NOSECLEVEL] [NOSECLABEL] [NONOTIFY] [NOERASE] [NOWARNING] [NODFP]
命令中的参数与命令ADDSD类似,在此我们不再详细描述。
(2)显示出指定的数据集PROFILE的命令
LISTDSD [DATASET(PROFILE 名 )/ID( 用 户 ID)/PREFIX( 字 符 串 )] [GENERIC/NOGENERIC] [AUTHUSER] [HISTORY] [STATISTICS] [ALL] [DSNS] [DFP]
[NORACF] 其中个参数的解释如下:
ID:列出指定用户或组的数据集PROFILE。
PREFIX:列出以指定的字符串打头的PROFILE。 AUTHUSER:显示访问列表。
HISTORY:显示PROFILE的创建时间,上次访问修改时间。
STATISTICS:只对分离的数据集PROFILE有效,显示访问、修改的统计。 ALL:显示所有信息。
DSNS:显示由此PROFILE覆盖的数据集。
DFP:显示DFP段。 NORACF:不显示RACF段的信息。
例:以下是显示一个数据集PROFILE的结果:
INFORMATION FOR DATASET WANGXS.** (G)

LEVEL

OWNER

UNIVERSAL ACCESS

WARNING

ERASE

-----

--------

----------------

-------

-----

00

WANGXS

READ

NO

NO

AUDITING
-------- FAILURES(READ)

NOTIFY

-------- WANGXS

YOUR ACCESS

----------- ALTER

CREATION GROUP

-------------- SYS1

DATASET TYPE

------------ NON-VSAM

GLOBALAUDIT

-----------

NONE
NO INSTALLATION DATA
SECURITY LEVEL
------------------------------------------ NO SECURITY LEVEL
CATEGORIES
----------
NO CATEGORIES
SECLABEL
--------
NO SECLABEL
CREATION DATE LAST REFERENCE DATE LAST CHANGE DATE (DAY) (YEAR) (DAY) (YEAR) (DAY) (YEAR)
------------- ------------------- ----------------
077 98 NOT APPLICABLE FOR GENERIC PROFILE

ALTER COUNT

CONTROL COUNT

UPDATE COUNT

READ COUNT

-----------

-------------

------------

----------

NOT APPLICABLE FOR GENERIC PROFILE
ID ACCESS
-------- -------
NO ENTRIES IN STANDARD ACCESS LIST
ID ACCESS CLASS ENTITY NAME
-------- ------- -------- --------------------------------------- NO ENTRIES IN CONDITIONAL ACCESS LIST
NO DFP INFORMATION
CATALOGUED DATA SETS AFFECTED BY PROFILE CHANGE
----------------------------------------------- WANGXS.CPPTEMP1.SCPPWORK
WANGXS.CPPTEMP2.SCPPWORK WANGXS.ISPF.ISPPROF
WANGXS.RESUME.ENG.DOC
WANGXS.SAMPLE.JCL
WANGXS.SPFLOG1.LIST WANGXS.SPFTEMP1.CNTL
由此结果可以看出,这个数据集 PROFILE 的拥有者是 WANGXS,通用的访问权限是
READ,拥有者自己的访问权限是 ALTER,无安全标识。它覆盖的数据集是 WANGXS.CPPTEMP1.SCPPWORK 、WANGXS.CPPTEMP2.SCPPWORK、WANGXS.ISPF.ISPPROF、
WANGXS.RESUME.ENG.DOC 、 WANGXS.SAMPLE.JCL 、 WANGXS.SPFLOG1.LIST 和
WANGXS.SPFTEMP1.CNTL。 (3)删除数据集PROFILE命令
DELDSD (PROFILE名) [GENERIC]
删除一个数据集PROFILE仅仅是在RACF数据集中删除了其PROFILE,并不真正删除 其数据集。原来受这个PROFILE保护的数据集则失去了保护。
RACF对系统中的数据集也予以保护。系统中的数据集是所有用户都可以访问的数据
集,不同的数据集具有不同的保护权限。表6.1列出了系统中的数据集被RACF保护的权 限。

数据集

UACC

SECURITY LABEL

注释

主编目

READ

SYSNONE

用户编目

UPDATE

SYSNONE

检查点数据集

NONE

SYSHIGH

Distribution library data sets

NONE

SYSLOW

ISPF panel libraries

READ

SYSLOW

Panel definitions,

skeletons ,

CLISTs, and so

forth. Specify UACC(NONE) if access must be restricted.

JES2 offload data sets

NONE

SYSHIGH

装入库

READ

SYSLOW

页数据集

NONE

SYSHIGH

Include PLPA ,

common , and

local page data

sets. See OS/390

MVS Initialization and

Tuning Guide.

PSF secure font data sets

NONE

SYSLOW

PSF secure overlay data sets

NONE

SYSLOW

PSF secure page segment data sets

NONE

SYSLOW

RMF 数据集

NONE

SYSHIGH

VSAM 数据集

Security definitions data

NONE

SYSLOW

sets

SMP 数据集

NONE

SYSLOW

Swap 数据集

NONE

SYSHIGH

SYS1.AMACLIB

READ

SYSLOW

SYS1.AMODGEN

READ

SYSLOW

SYS1.ASAMPLIB

READ

SYSLOW

SYS1.BRODCAST (在非B1

环境)

UPDATE

SYSLOW

SYS1.BRODCAST (在B1环

境)

READ

SYSLOW

SYS1.CMDLIB

READ

SYSLOW

SYS1.DAE

NONE

SYSHIGH

SYS1. DUMPxx

NONE

SYSHIGH

SYS1.HELP

READ

SYSLOW

TSO 在线帮助

SYS1.IMAGELIB

NONE

SYSLOW

SYS1.JESPARM

NONE

SYSLOW

SYS1.JES3LIB

READ

SYSLOW

SYS1.LINKLIB

READ

SYSLOW

SYS1.LOGREC

NONE

SYSLOW

SYS1.LPALIB

READ

SYSLOW

依安全策略的不同

UACC 可 为

NONE 或 READ

SYS1.MACLIB

READ

SYSLOW

SYS1.MANx

NONE

SYSHIGH

SMF 数据集

SYS1.MIGLIB

READ

SYSLOW

SYS1.MODGEN

READ

SYSLOW

SYS1.NUCLEUS

READ

SYSLOW

SYS1.OVERLIB

READ

SYSLOW

SYS1.PARMLIB

READ

SYSLOW

SYS1.PROCLIB

READ

SYSLOW

SYS1.RACF

NONE

SYSLOW

SYS1.SAMPLIB

READ

SYSLOW

SYS1.STGINDEX

NONE

SYSHIGH

SYS1.SVCLIB

NONE

SYSLOW

SYS1.TELCMLIB

READ

SYSLOW

SYS1.UADS

NONE

SYSLOW

SYS1.VTOCIX.

NONE

SYSLOW

SYS1.VVDS.

NONE

SYSLOW

SYS1.VTAMLIB

READ

SYSLOW

SYS1.VTAMLST

NONE

SYSLOW

Trace data sets

NONE

SYSHIGH

User dump data sets

NONE

User's

SECLABEL

表6.1 系统数据集的保护权限