再上一篇:6.2 用户和组的管理
上一篇:6.3 数据集的保护
主页
下一篇:6.5 RACF 选项
再下一篇:第六章 系统初始化
文章列表

6.4 通用资源引论

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

RACF除了可以保护用户、组及数据集外,还可以保护程序、交易、系统设施等。这 些都称之为通用资源。每一类的资源其PROFILE都必须在其对应的类中定义。RACF在其 类描述表CDT中带有很多通用资源的类。当然也可以在CDT中再加入新的通用资源类。 类在使用前,也就是说该类的PROFILE起作用之前,应先用命令SETROPTS将其激活。基 于性能考虑,有些类中的所有 PROFILE 都应装入主存,这可以通过命令 SETROPTS RACLIST(类名)来实现。
命令RDEFINE和PERMIT可用于定义资源的PROFILE。 RDEFINE的格式:
RDEFINE/RD 类名 (PROFILE名) [OWNER(用户或组)] [UACC(权限)] [AUDIT(访问企 图(记录级别))] [WARNING][NOTIFY] [FROM(模版 PROFILE 名)] [FCLASS(类名)]
[ADDCATEGORY(CATEGORY 名)] [SECLEVL(安全级别名)] [SECLABEL(安全标识名)]
[ADDMEM(成员)]
一个PROFILE可用于保护多个资源,例如,SHIPDEPT组中的用户需要使用交易SH01、 MF06和AC07,则需要在CICS交易类TCICSTRN中定义一个PROFILE SHIP.TRN.GRP1.
RDEFINE GCICSTRN SHIP.TRN.GRP1 OW(SECADMIN) ADDMEM(SH01 MF06 AC07) 要给一个用户管理某一类PROFILE的权限,则应给这个用户授权:
ALTUSER 用户ID CLAUTH(类名)
PERMIT 命令用于授权用户访问被 PROFILE 保护的资源。PERMIT 命令实际上是改变 PROFILE 的访问列表。有关 PERMINT 命令的语法描述请参见本章第三节数据集的保护中
的有关描述。
1.保护程序 对程序进行保护,首先要对程序库进行保护。程序库实际上是一个分区式的数据集,
因此可以使用数据集PROFILE对程序库进行保护,但其权限不能是读,因为如果是读, 则用户就可拷贝程序库到其它数据集,改变拷贝后的数据集的权限而达到其它访问目的。
因此对程序库应当给权限 EXECUTE,这样程序只能被装入主存执行而不能被拷贝。然后 在PROGRAM类中定义一个PROFILE,保护程序。
例如:要保护程序PROGA,使得只有SYSMGT组的用户可以执行它。
(1)激活程序控制类: SETROPTS WHEN(PROGRAM)
(2)创建一个名为PROG.CNTL.LIB的PROFILE,保护程序所在的库PROG.CNTL.LIB,
其拥有者是SECADMIN。注意,UACC是EXECUTE。
ADDSD 'PROG.CNTL.LIB' OWNER(SECADMIN) UACC(EXECUTE) GENERIC (3)保护程序:
RDEFINE PROGRAM PROGA UACC(NONE) ADDMEM('PROG.CNTL.LIB)
(4)将PROFILE放在主存中: SETROPTS REFRESH WHEN(PROGRAM) 有些用户虽然没有对某个库读的权限,因此不可能拷贝程序,但他有执行的权限,
可以通过 DUMP 来获得程序。为了防止这种事情发生,可在 FACILITY 类中定义一个 PROFILE IEAABD.DMPAUTH,其访问权限可以是:
UPDATE:允许DUMP
READ:只有用户对库的访问权限高于READ时,才允许DUMP。 NONE:不允许任何DUMP。
2.终端控制
在MVS中终端可以控制,也可以不控制,或控制一部分终端。如有些终端被控制, 则未定义的终端对某些用户或可用或不可用。通过终端的控制,可限制用户在指定的时 间登录,也可限制终端在指定的时间被登录。终端也可赋予一个安全级别,但这个安全 级别并不用于限制用户的登录。而是限制用户登录以后的权限。如果用户在一个安全级 别较低的终端上登录,则其安全级别也会变低。
如果要保护终端,则要在TERMINAL类中定义终端的PROFILE。终端的PROFILE名一 般就是终端的地址;对于TCAM或VTAM,名字是其逻辑单元名(LU);对BTAM,名字是其 终端号。例如,要设置任何用户可以登录到除EWSL2136和EWSL2135以外的任何终端, 而只有ANN和BILL(他们属于SENSGRP组)可以登录到这两个终端上,则应发布如下命令:
1)在TERMINAL类中为这两个终端定义PROFILE,PROFILE的名字于终端的名字一样, 其通用访问权限为NONE,也就是说任何用户如果没有特许则不能访问这两个终端。
RDEFINE TERMINAL ESWL2135 UACC(NONE) RDEFINE TERMINAL ESWL2136 UACC(NONE)
2)允许这两个用户访问这两个终端:
PE EWSL2135 CLASS(TERMINAL) ID(SENSGRP) ACCESS(READ) PE EWSL2136 CLASS(TERMINAL) ID(SENSGRP) ACCESS(READ)
3)激活TERMINAL类,并设置所有未定义的终端的通用访问权限为:READ SETROPTS CLASSACT(TERMINAL) TERMINAL(READ)
如果还要进一步设置这两个用户只能登录到这两个终端上,则可发布命令:
ALTGROUP SENSGRP NOTERMUACC 系统中的终端数目很多,如果所有终端都要控制,则要定义很多的PROFILE。在RACF
可以有两种解决办法:
第一种是在终端PROFILE名中使用通配符。当然要使用通配符,还应首先激活通配 符。例如:
SETROPTS CLASSACT(TERMINAL) GENERIC(TERMINAL)
RDEFINE TERMINAL ESWL210% UACC(NONE)
PE ESWL210% CLASS(TERMINAL) ID(PAYDEPT) ACCESS(READ) 第二种办法时使用终端组类GTERMINL,也就是说在终端组类中定义PROFILE。例如
以下命令在终端组类GTERMINL中定义名为PRTERMS的PROFILE,其UACC是NONE,PAYDEPT
对这三个终端有读的权限。
RDEF GTERMINL PRTERMS UACC(NONE) ADDMEM(ESWL3456 ESWL7654 ESWL5322) PE PRTERMS CLASS(GTERMINL) ID(PAYDEPT) ACCESS(READ)
3.控制台及命令的控制 (1)控制台的控制
控制台的控制与终端的控制类似,在CONSOLE类中定义PROFILE即可。例如:
RDEF CONSOLE 04 UACC(NONE)
PE 04 CLASS(CONSOLE) ID(OPER1) ACCESS(READ) (2)命令的控制
RACF还可以通过在OPERCMDS类中定义命令PROFILE控制操作员可以发布哪些命令。
PROFILE名字的一般格式是: SUBSYSTEM.COMMAND.SUBFUNCTION.OBJECT
例如:允许OPER1发布所有的MVS命令,OPER2发布所有的JES2命令,并且记录所
有的命令:
RDEF OPERCMDS MVS.** UACC(NONE) AUDIT(ALL)
PE MVS.** CLASS(OPERCMDS) ID(OPER1) ACCESS(READ) RDEF OPERCMDS JES2.** UACC(NONE) AUDIT(ALL)
PE JES2.** CLASS(OPERCMDS) ID(OPER2) ACCESS(READ) 也可以指定特定的用户只能在特定的终端上发布特定的命令。例如:
PE MVS.** CLASS(OPERCMDS) ID(OPER1) ACCESS(READ) WHEN(CONSOLE(03))
4.全局访问控制表
全局访问控制表是为了提高RACF的性能而设置的。其中的项目一般都是所有用户都 能访问的资源。它只用于肯定,也就是说只要是全局访问控制表中允许访问的资源RACF 不再作进一步的审查,用户立即被授权使用。它在RACF授权检查中最先被检查。以下是 全局访问控制表的一部分示例:
&RACGPID.SOURCE/READ
&RACUID.**/ALTER ICFCAT.ESACAT.**/READ
ISP.**/READ
SYS1.BRODCAST/UPDATE SYS1.COBLIB/READ
SYS1.HELP/READ
SYS1.MACLIB/READ SYS1.PROCLIB/READ
表中每一行是一个项目,每行中斜杠前是资源名,斜杠后是全局访问控制表中允许
的权限。&RACGUID代表用户自己,&RACGUID代表用户当前连接到的组。
定义全局访问控制表的步骤如下:
1)激活全局访问控制表
SETROPTS GLOBAL(DATASET) GENERIC(DATASET)
2)定义全局访问控制表中的项目
RDEFINE GLOBAL DATASET ADDMEM(&RACUID.**/ALTER) RALTER GLOBAL DATASET ADDMEM(ISP.**)
RALTER GLOBAL DATASET ADDMEM(SYS1.BRODCAST/UPDATE) RALTER GLOBAL DATASET ADDMEM(SYS1.COBLIB/READ)
RALTER GLOBAL DATASET ADDMEM(SYS1.PROCLIB/READ)
RALTER GLOBAL DATASET ADDMEM(&RACGPID.SOURCE/READ)
其中:RDEFINE用用定义数据集类中的第一项,RALTER用于定义以后的项。
3)刷新全局访问控制表
SETROPTS GLOBAL(DATASET) REFRESH
5.SECURITY CLASSIFICATION
SECURITY CLASSIFICATION 是控制访问资源的另一种方法,它在全局访问控制检查 之后访问列表检查之前进行检查,用于否定用户对资源的访问。当用户访问资源时,RACF 比较用户和资源的 SECURITY CLASSIFICATION,如果否定则不允许用户访问,否则再作 进一步的授权检查。SECURITY CLASSIFICATION 适用于用户、数据集和通用资源,但不 适用于组。它由两个组件组成:安全级别和安全类别。
安全级别:1(最低)-254(最高)之间的整数,每一级别可以取一个名字。当用户的安 全级别低于资源的安全级别时,拒绝用户访问该资源。
安全类别:安全类别是安全管理员定义的一个名字,它对应于一个组织中具有类似
安全需求的一个部门或区域。当一个用户要访问一个具有安全类别的资源时,该用户也 要具有相应的安全类别。例如,A用户具有安全类别PROJECTA,则他只可能访问具有安
全类别PROJECTA的资源。如果他具有安全类别PROJECTA和PROJECTB,则他可能可访问
具有安全类别PROJECTA和PROJECTB的资源。当然,如果一个资源如果具有多个安全类 别,也只有同时具有多个同样的安全类别的用户才有可能访问它。
安全标识:是安全级别和类别的组合,是对应于一个安全级别和0个以上的安全类
别的名字。
当RACF处理资源授权检查时,Security Classification处理由两个步骤组成,当 然secdata必须活跃,并且被保护的数据集必须有安全级别或类别:
1.RACF 比较用户和资源的安全级别,如果资源的安全级别高于用户的安全级别, 则拒绝用户的访问请求。
2.RACF 比较用户 PROFILE 中的安全类别和资源 PROFILE 中的安全类别,如果发现
资源 PROFILE 中的任何一个安全类别未包含在用户 PROFILE 中,则拒绝访问请 求。
3.如果RACF未拒绝访问请求,则进一步进行授权检查。
要使用安全级别,则必须在 SECDATA 通用资源类中定义一个名为 SECLEVEL 的
PROFILE。而要使用安全类别,则必须在 SECDATA 通用资源类中定义一个名为 CATEGORY 的 PROFILE。你定义的安全类别和安全级别则作为这两个 PROFILE 的成员定义到这两个 PROFILE 中。可以用ADDMEM,DELMEM命令维护这些成员。
在CATEGORY PROFILE中,成员名就是安全类别名,而在SECLEVEL中,每一个成员 是安全级别名后面跟一个安全级别号。
以下是定义安全级别和安全类别的步骤:
1.用RDEFINE命令在SEDATA类中定义一个SECLEVEL PROFIE。 RDEFINE SECDATA SECLEVEL UACC(NONE)
2.定义SECLEVEL中的安全级别成员。
RALTER SECDATA SECLEVEL ADDMEM(安全级别名/安全级别号 ...)
3.用RDEFINE命令在SECDATA类中定义CATEGORY PROFIE。 RDEFINE SECDATA CATEGORY UACC(NONE)
4.定义CATEGORY PROFILE中的成员。
RALTER SECDATA CATEGORY ADDMEM(安全类别1 安全类别2 ...)
5.给用户分配安全级别、安全类别。 ALTUSER 用户名 SECLEVEL(安全级别名)
ALTUSER 用户名 ADDCATEGORY(安全类别名1 安全类别名2 ...)
6.给资源分配安全级别、安全类别。
RALTER 类名 PROFILE名 SECLEVEL(安全级别名)
RALTER 类名 PROFILE名 ADDCATEGORY(安全类别名1 安全类别名2 ...)
7.激活SECDATA类。 SETROPTS CLASSACT(SECDATA)
创建一个安全标识,实际上就是在SCELABEL类中创建一个PROFILE,其名字就是安 全标识名。当然对 SECLABEL 类中的 RPOFILE 作了修改后,你必须刷新对 SCELABEL 的
SETROPTS RACLIST的处理。例:
SETROPTS RACLIST(SECLABEL) REFRESH 创建安全标识的步骤如下:
1.定义SECLEVEL PROFILE,并定义其成员。
2.定义CATEGORY PROFILE,并定义其成员。
3.对每一个安全标识,在 SECLABEL 类中定义一个 PROFILE,其名字就是安全标识 名,并不得多于 8 个字符。对每一个 SECLABEL PROFILE,指定一个安全级别和 一组安全类别。
RDEFINE SECLABEL 安全标识 SECLEVEL(安全级别名)
CATEGORY(安全类别1 安全类别2 ...)
4.一个用户只有对某一个特定的安全标识PROFILE具有至少READ权限时,它才能 够使用这个安全标识。因此因当给特定的用户对特定的安全标识 PROFILE 分配
特定的权限。
PERMIT 安全标识名 CLASS(SECLABEL) ACCESS(READ) ID(用户或组)
5.激活SECLABEL类。
SETROPTS CLASSACT(SECLABEL) RACLIST(SECLABEL)
SYSHIGH,SYSLOW和SYSNONE是RACF在安装时创建的三个安全标识。SYSHIGH代表 最高的安全级别及所有的安全类别,而SYSLOW和SYSNONE则代表最低的安全级别及无任 何安全类别。
一个用户PROFILE可含有两个安全标识:一个是默认的安全标识,由系统安全管理 员设置;另一个则是用户当前的安全标识,当用户使用TSO/E登录时指定。
系统安全管理员使用带有SECLABEL参数的ADDUSER或ALUSER命令指定用户的默认
安全级别。当然必须给予用户使用这种安全标识的权限。命令如下: ALTUSER 用户名 SECLABEL(安全标识名)
PERMIT 安全标识 CLASS(SECLABEL) ID(用户名) ACCESS(READ)
如图6.7所示,是安全标识的一个示意图。
图中SECA由SECRET级别和PROJA类别组成。CONFB由CONF级别和PROJB类别组成。 CONFPERS由CONF级别和PERS类别组成。PROJMGMT由SECRET级别和PROJA及PROJB类
别组成。SYSHIGH由最高的级别和所有的类别组成。SYSLOW则代表最低的级别,无类别。 图中各安全级别、安全类别及安全标识的定义如下:
安全级别的定义:
RDEFINE SECDATA SECLEVEL UACC(NONE) ADDMEM(SECRET/200 CONFIDENTIAL/100) 安全类别的定义:
RDEFINE SECDATA CATEGORY UACC(NONE) ADDMEM(PROJECTA PROJECTB PERSONNEL)

安全标识的定义: PROJMGT:
图6.7 安全标识的一个示意图
RDEFINE SECLABEL PROJMGT UACC(NONE) SECLEVEL(SECRET) ADDCATEGORY(PROJECTA PROJECTB)
SECA:
RDEFINE SECLABEL SECA UACC(NONE) SECLEVEL(SECRET) ADDCATEGORY(PROJECTA) CONFB:
RDEFINE SECLABEL CONFB UACC(NONE) SECLEVEL(CONFIDENTIAL) ADDCATEGORY(PROJECTB)
CONFPERS:
RDEFINE SECLABEL CONFPERS UACC(NONE) SECLEVEL(CONFIDENTIAL) ADDCATEGORY(PERSONNEL)
以上定义完成后,就可对用户和资源赋予特定的安全标识:
对于用户:
PERMIT PROJMGT CLASS(SECLABEL) ID(MARY) ACCESS(READ) ALTUSER MARY SECLABEL(PROJMGT)
PERMIT CONFB CLASS(SECLABEL) ID(TOM) ACCESS(READ) ALTUSER TOM SECLABEL(CONFB)
对于数据集:
ALTDSD 'MGT.D' SECLABEL(PROJMGT) ALTDSD 'A.Z' SECLABEL(SECA)
ALTDSD 'B.K' SECLABEL(CONFB)
ALTDSD 'PSNL.E' SECLABEL(CONFPERS)
6.SEARCH命令
SEARCH命令可用于列出RACF PROFILE清单。在命令中你可以指定:
-PROFILE名中含有特定的字符串。
-在指定的天数内从来为访问过的资源PROFILE。
-作为模版的PROFILE。
-查找与你指定的安全级别相匹配的PROFILE。
-查找与你指定的安全类别相匹配的PROFILE。
-在特定卷上的数据集的的PROFILE。 SEARCH命令的语法格式为:
SEARCH/SR [ALL/GENERIC/NOGENERIC/MODEL/VSAM/NOVSAM] [AGE( 天 数 )] [CATEGORY[(类别名)]/EXPIRES(天数)/ SECLABEL([安全类别名])/SECLEVEL[(安全级别
名)]/WARNING] [CLASS(DATASET/类名)] [FILTER(通配符)] [MASK(字符 1/*[,字符
2])/NOMASK] [CLIST(命令名)] [USER(用户ID)] [VOLUME(卷标)] 命令中的多数参数数都很好理解,我们在此只介绍几个参数。
FILTER 和 MASK 是相互排斥的。用 FILTER 可以指定通配符,而用 MASK 则可指定 PROFILE中打头的字符。
CLIST表示找到特定的PROFILE后执行指定的命令。
例如:
SEARCH CLASS(GROUP) FILTER(D*) SEARCH CLASS(GROUP) MASK(D)
SEARCH CLASS(GROUP) MASK(D) CLIST(‘DELGROUP’)
前两条命令都是查找以字符’D’打头的 PROFILE,后一条命令功能也是这样,但找 到后删除。