Java 2 安全策略文件

Java™ 2 Platform, Enterprise Edition (J2EE) V1.3 和更高版本的规范很好地定义了容器提供程序与应用程序代码之间的职责编程模型。建议使用 Java 2 安全管理器帮助实施此编程模型。应用程序代码中不支持某些操作,这是因为这些操作会干扰容器的行为和操作。在产品中使用 Java 2 安全管理器实施容器和应用程序代码的职责。

避免故障 避免故障: 该应用程序服务器不支持定制 custom Java 安全管理器实现。gotcha

此产品提供对策略文件管理的支持。产品中的很多策略文件要么是静态的要么是动态的。动态策略是某个特殊类型资源的许可权模板。在动态策略模板中未定义相对代码库。代码库是从部署和运行时数据动态地计算出来的。

静态策略文件

表 1. 静态策略文件.

此表列示静态策略文件的位置。

策略文件 位置
java.policy

[AIX Solaris HP-UX Linux Windows][z/OS]app_server_root/java/jre/lib/security/java.policy。将缺省许可权授予所有类。此文件的策略适用于所有由 WebSphere Application Server 启动的进程。

server.policy profile_root/properties/server.policy。将缺省许可权授予所有产品服务器。
client.policy profile_root/properties/client.policy。授予节点上所有产品客户机容器和 applet 的缺省许可权。
静态策略文件都不由配置和文件复制服务管理。对这些文件进行更改是本地的而不会复制到 WebSphere Application Server Network Deployment 单元中的其他节点。

动态策略文件

表 2. 动态策略文件.

此表列示动态策略文件的位置。

策略文件 位置
spi.policy

profile_root/config/cells/cell_name
/nodes/node_name/spi.policy

此模板适用于服务提供程序接口 (SPI) 或嵌入在产品中的第三方资源。MQ Series 中的 Java 消息服务 (JMS) 和 Java 数据库连接 (JDBC) 驱动程序都是 SPI 的示例。嵌入式资源的代码库是根据配置(resources.xml 文件)和运行时数据动态确定的,并且,spi.policy 文件中定义的许可权自动应用于这些资源以及资源适配器的类路径中指定的 JAR 文件。spi.policy 文件的缺省许可权是 java.security.AllPermissions。

library.policy

profile_root/config/cells/cell_name/nodes
/node_name/library.policy

这是库(Java 库类)的模板。您可以定义一个共享库,以在多个产品应用程序中使用。library.policy 文件的缺省许可权是空的

app.policy

profile_root/config/cells/cell_name
/nodes/node_name/app.policy

app.policy 文件定义授予正在 cell_name 中的 node_name 上运行的所有企业应用程序的缺省许可权。
注: app.policy 文件的更新仅适用于节点上 app.policy 文件所属的企业应用程序。
was.policy

profile_root/config/cells/cell_name
/applications/ear_file_name/deployments/
application_name/META-INF/was.policy

这是特定于应用程序的许可权的模板。was.policy 文件嵌入在企业归档 (EAR) 文件中。

ra.xml rar_file_name/META-INF/was.policy.RAR

此文件可以具有 ra.xml 文件中定义的许可权规范。ra.xml 文件嵌入到 RAR 文件中。

app.policywas.policy 文件中指定的授权条目必须定义代码库。如果指定没有代码库的授权条目,那么未正确装入策略文件并且应用程序可能会失败。如果目的是授予所有应用程序许可权,那么使用 file:${application} 作为授权条目中的代码库。

策略文件的语法

策略文件包含若干策略条目。以下示例展示了每个策略条目的格式:
grant [codebase <Codebase>] {
permission <Permission>;
 permission <Permission>;
permission <Permission>;
};

<CodeBase>: 	A URL.
			For example,  "file:${java.home}/lib/tools.jar"
						When [codebase <Codebase>] is not specified, listed 
               permissions are applied to everything.
						If URL ends with a JAR file name,  only the classes in the 
               JAR file belong to the codebase.
               If URL ends with "/", only the class files in the specified
               directory belong to the codebase.
               If URL ends with "*", all JAR and class files in the specified
               directory belong to the codebase.
               If URL ends with "-", all JAR and class files in the specified 
               directory and its subdirectories belong to the codebase.
<Permissions>: Consists from
							Permission Type  	: class name of the permission
     					Target Name      	: name specifying the target
     					Actions          	: actions allowed on target
			For example,
      			java.io.FilePermission "/tmp/xxx", "read,write"
请参考开发者工具箱规范,以获取每个许可权的详细信息。

动态策略的语法

您可以为企业应用程序的动态策略文件中的特定类型资源定义许可权。此操作通过使用产品保留的符号实现。保留符号范围取决于它是在哪里定义的。如果您在 app.policy 文件中定义许可权,那么符号适用于 node_name 上运行的所有企业应用程序的所有资源。如果您在 META-INF/was.policy 文件中定义许可权,那么符号仅适用于特定企业应用程序。下表中列示了代码库的有效符号:
表 3. 动态策略语法.

此表描述动态策略文件的代码库的有效符号。

符号 含义
file:${application} 许可权应用于应用程序中的所有资源
file:${jars} 许可权应用于应用程序中的所有实用程序 Java 归档 (JAR) 文件
file:${ejbComponent} 许可权应用于应用程序中的 Enterprise JavaBeans(EJB) 资源
file:${webComponent} 许可权应用于应用程序中的 Web 资源
file:${connectorComponent} 许可权应用于应用程序中的连接器资源
除了代码库符号指定的这些条目以外,可以指定模块名以便进行粒度设置。例如:
grant codeBase "file:DefaultWebApplication.war" {
   permission java.security.SecurityPermission "printIdentity";
 };

grant codeBase "file:IncCMP11.jar" {
permission java.io.FilePermission 
"${user.install.root}${/}bin${/}DefaultDB${/}-", 
"read,write,delete";
};
先前代码样本中的第 6 和第 7 行是一连续行。您只可以在 META-INF/was.policy 文件中使用相关的代码库。定义了几个产品保留的符号,以使许可权列表与特定类型的资源相关联。
表 4. 动态策略语法.

此表描述多个产品保留的符号,定义这些符号是为了将许可权列表关联到特定类型的资源。

符号 含义
file:${application} 许可权应用于应用程序中的所有资源
file:${jars} 许可权应用于应用程序中的所有实用程序 JAR 文件
file:${ejbComponent} 许可权应用于应用程序中的企业 Bean 资源
file:${webComponent} 许可权应用于应用程序中的 Web 资源
file:${connectorComponent} 许可权应用于应用程序中的连接器资源和独立连接器资源中的连接器资源。
提供五个嵌入式符号,以指定 java.io.FilePermission 许可权的路径和名称。这些符号启用灵活的许可权规范。安装应用程序之后,绝对文件路径是固定的。
表 5. 动态策略语法.

此表描述嵌入式符号,这些符号用于指定 java.io.FilePermission 许可权的路径和名称。

符号 含义
${app.installed.path} 安装应用程序的路径
${was.module.path} 安装模块的路径
${current.cell.name} 当前单元名称
${current.node.name} 当前节点名称
${current.server.name} 当前服务器名称
注意: 不要在 ${application} 条目中使用 ${was.module.path}

小心地确定要添加新许可权的位置。不正确地指定许可权会导致 AccessControlException 异常。因为动态策略在运行时解析代码库,所以确定哪个策略文件出了问题是很困难的。仅添加许可权到需要的资源。例如,使用 ${ejbcomponent}其他而不是 ${application},并更新 was.policy 文件而不是 app.policy 文件(如果可能的话)。

静态策略过滤

存在一些受限的静态策略过滤支持。如果 app.policy 文件和 was.policy 文件具有用 thefilterMask 关键字在 filter.policy 文件中定义的许可权,那么运行时将从应用程序中移除这些许可权并且会记录审计消息。但是,如果在 app.policywas.policy 文件中定义的许可权是复合许可权(例如 java.security.AllPermission),那么不移除该许可权,而是将一条警告消息写入日志文件。策略过滤仅支持 Developer Kit 许可权;许可权包名以 javajavax 开头。

提供运行时策略过滤支持来执行更严格的过滤。如果 app.policy 文件和 was.policy 文件具有用关键字 runtimeFilterMask 关键字在 filter.policy 文件中定义的许可权,那么无论授予应用程序什么权限,运行时都将从应用程序中移除这些许可权。例如,即使 was.policy 文件将 java.security.AllPermission 许可权授予它的其中一个模块,在运行时也仍然会从授予的许可权中移除指定的许可权(例如 runtimeFilterMask 许可权)。

策略文件编辑

建议使用 Developer Kit 提供的策略工具 (install_root/java/jre/bin/policytool) 来编辑先前的策略文件。对于 WebSphere Application Server Network Deployment,编辑之前从存储库中解压缩策略文件。解压缩策略文件后,使用策略工具编辑文件。将修改的策略文件检入到存储库并将他们与其他节点同步。

故障诊断

要调试动态策略,请选择三种方法中的一种方法来生成 AccessControlException 异常的详细报告。
  • 跟踪(由 RAS 跟踪配置)。用跟踪规范启用跟踪:
    注意: 以下命令是一个连续行
    com.ibm.ws.security.policy.*=all=enabled:
    com.ibm.ws.security.core.SecurityManager=all=enabled
  • 跟踪(由属性配置)。指定 Java java.security.debug 属性。java.security.debug 属性的有效值如下所示:
    • 访问。打印所有调试信息(包括所需的许可权、代码、堆栈和代码库位置)。
    • 堆栈。打印调试信息(包括所需的许可权、代码和堆栈)。
    • 故障。打印调试信息(包括所需的许可权和代码)。
  • ffdc。启用 ffdc,通过更改 Level=4LAE=true 来修改 ffdcRun.properties 文件。在日志文件中查找 Access Violation 关键字。

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rsec_rpolicydir
文件名:rsec_rpolicydir.html