使用 WZSSAD 访问 z/OS 安全资源
WLP z/OS® 系统安全性访问域 (WZSSAD) 引用向 Liberty 服务器授予的许可权。这些许可权控制认证和授权用户时服务器有权查询的系统授权工具 (SAF) 应用程序域和资源概要文件。
例如,如果要设置两个 Liberty 服务器实例(一个实例用于生产,一个实例用于测试),而且希望您的角色访问在生产和测试之间有所不同,那么可以设置两个不同的系统安全性访问域。
Liberty 服务器是可以由非管理员或非特权用户配置和运行的未经授权的程序,因此出于系统安全性和完整性的考虑,请务必防止用户利用服务器来运行他们尚未获取显式许可权的安全性操作。
注: 只有在服务器使用授权 SAF 服务进行认证和授权时,WZSSAD 才有效。这表示 Angel 进程正在运行,而且已授予服务器使用 SAFCRED 授权服务例程的许可权。
WZSSAD 保护以下三个 SAF 操作:
- 认证用户
- 将主体集的权限授予 Java™ EE 角色
- 将主体集的权限授予其他 SAF 资源
认证用户
服务器向特定 SAF 域认证用户,此域是通过定义资源(称为 APPL 类中的 APPLID)进行配置。为了向域认证用户,该用户必须对 APPL 类中的 APPLID 资源具有读访问权。此外,每当 APPL 类处于活动状态时,未认证的用户标识(缺省情况下为 WSGUEST)还需要对 APPL 类中的 APPLID 资源具有读访问权。
服务器所使用的 APPLID 资源名称由 <safCredentials> 配置元素中 profilePrefix 属性指定。如果未指定此元素,那么将使用 BBGZDFLT 作为缺省 profilePrefix。
以下示例显示如何在 server.xml 文件中将 profilePrefix 配置为 BBGZDFLT:
<safCredentials profilePrefix="BBGZDFLT"/>
以下示例显示如何使用 RACF® 命令将 APPLID 配置为 BBGZDFLT:
// Define the BBGZDFLT APPLID to RACF.
RDEFINE APPL BBGZDFLT UACC(NONE)
// Activate the APPL class.
//If not active, the domain is not restricted, which means anyone can authenticate to it.
SETROPTS CLASSACT(APPL)
//All users to be authenticated by the server must have READ access to the APPLID in the APPL class:
PERMIT BBGZDFLT CLASS(APPL) ACCESS(READ) ID(UserID)
//The unauthenticated user ID requires READ access to the APPLID in the APPL class:
PERMIT BBGZDFLT CLASS(APPL) ACCESS(READ) ID(WSGUEST)
此外,必须在 WZSSAD 中授予服务器在给定 APPLID 域中进行认证调用的许可权。这将阻止未授权用户利用服务器使用授权 SAF 服务来发现可以认证及不能认证的 APPLID 的信息。要授予服务器在特定 APPLID 域中进行认证的许可权,必须授予 Liberty 服务器的启动任务标识对 SERVER 类中 BBG.SECPFX.<APPLID> 概要文件的读访问权:
RDEFINE SERVER BBG.SECPFX.BBGZDFLT UACC(NONE)
PERMIT BBG.SECPFX.BBGZDFLT CLASS(SERVER) ACCESS(READ) ID(serverUserId)
将主体集的权限授予 Java EE 角色
服务器通过检查主体集是否有权使用 EJBROLE 类中定义的
SAF 资源概要文件来针对 Java EE 应用程序安全角色名称向主体集授权。通过 SAF 角色映射器从应用程序角色名称映射 SAF 资源概要文件名称。SAF 角色映射器会为给定的应用程序角色名称和应用程序资源名称生成 SAF 概要文件名称。缺省情况下,它使用模式 {profilePrefix}.{resource}.{role} 来生成 SAF 概要文件名称。例如:
profilePrefix="BBGZDFLT"
Application resource name = "MYAPP"
Application role name = "ADMIN"
Mapped profile name = "BBGZDFLT.MYAPP.ADMIN"
有关更多信息,请参阅 Liberty:控制将角色映射到 SAF 概要文件的方式。
WZSSAD 会限制 EJBROLE 类中服务器有权针对其执行授权的 SAF 概要文件。这将阻止未授权用户利用服务器使用授权 SAF 服务来发现可以授权或不能授权的 EJBROLE 概要文件的信息。必须授予服务器针对 EJBROLE 概要文件名称的 HLQ 运行授权检查的许可权。概要文件名称的 HLQ 是概要文件名称的第一个分段(直到但不包含第一个“.”)。例如:
EJBROLE profile name = "BBGZDFLT.ADMIN"
HLQ = "BBGZDFLT"
要授予服务器针对概要文件 HLQ 执行授权检查的许可权,必须授予与服务器进程相关联的用户对 SERVER 类中 BBG.SECPFX.<HLQ> 概要文件的读访问权:
RDEFINE SERVER BBG.SECPFX.BBGZDFLT UACC(NONE)
PERMIT BBG.SECPFX.BBGZDFLT CLASS(SERVER) ACCESS(READ) ID(serverUserId)
在示例中,因为 SAF 角色映射器会将所映射概要文件的 HLQ 设置为 profilePrefix,所以由同一个概要文件 BBG.SECPFX.BBGZDFLT 管理 APPLID 认证许可权和 EJBROLE 概要文件授权许可权。将主体集的权限授予其他 SAF 资源
Java EE 应用程序可针对 EJBROLE 以外的 SAF 类执行访问控制检查。WZSSAD 会限制非 EJBROLE 中服务器有权针对其进行授权的 SAF 类。这将阻止未授权用户或应用程序利用服务器使用授权 SAF 服务来发现非 EJBROLE SAF 类中用户或应用程序已获授权或未获授权的资源概要文件的信息。
要授予服务器针对非 EJBROLE SAF 类执行授权检查的许可权,必须授予与服务器进程相关联的用户对 SERVER 类中 BBG.SECCLASS.<SAF-CLASS> 概要文件的读访问权。例如,要针对 FACILITY 类中的概要文件进行授权,请输入以下代码:
RDEFINE SERVER BBG.SECCLASS.FACILITY UACC(NONE)
PERMIT BBG.SECCLASS.FACILITY CLASS(SERVER) ACCESS(READ) ID(serverUserId)
注: 非 EJBROLE 类中服务器有权针对其进行授权的资源概要文件不受限制。如果已授予服务器针对非 EJBROLE 类执行授权检查的许可权,那么服务器可以针对该类中的任何概要文件进行授权。