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

此产品提供对策略文件管理的支持。产品中的很多策略文件要么是静态的要么是动态的。动态策略是某个特殊类型资源的许可权模板。在动态策略模板中未定义相对代码库。代码库是从部署和运行时数据动态地计算出来的。
静态策略文件
策略文件 | 位置 |
---|---|
java.policy |
|
server.policy | profile_root/properties/server.policy。将缺省许可权授予所有产品服务器。 |
client.policy | profile_root/properties/client.policy。授予节点上所有产品客户机容器和 applet 的缺省许可权。 |
动态策略文件
策略文件 | 位置 |
---|---|
spi.policy | profile_root/config/cells/cell_name 此模板适用于服务提供程序接口 (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 这是库(Java 库类)的模板。您可以定义一个共享库,以在多个产品应用程序中使用。library.policy 文件的缺省许可权是空的。 |
app.policy | profile_root/config/cells/cell_name app.policy
文件定义授予正在 cell_name 中的 node_name 上运行的所有企业应用程序的缺省许可权。
注: app.policy 文件的更新仅适用于节点上 app.policy 文件所属的企业应用程序。
|
was.policy | profile_root/config/cells/cell_name 这是特定于应用程序的许可权的模板。was.policy 文件嵌入在企业归档 (EAR) 文件中。 |
ra.xml | rar_file_name/META-INF/was.policy.RAR。 此文件可以具有 ra.xml 文件中定义的许可权规范。ra.xml 文件嵌入到 RAR 文件中。 |
策略文件的语法
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 文件中定义许可权,那么符号仅适用于特定企业应用程序。下表中列示了代码库的有效符号:符号 | 含义 |
---|---|
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";
};
符号 | 含义 |
---|---|
file:${application} | 许可权应用于应用程序中的所有资源 |
file:${jars} | 许可权应用于应用程序中的所有实用程序 JAR 文件 |
file:${ejbComponent} | 许可权应用于应用程序中的企业 Bean 资源 |
file:${webComponent} | 许可权应用于应用程序中的 Web 资源 |
file:${connectorComponent} | 许可权应用于应用程序中的连接器资源和独立连接器资源中的连接器资源。 |
符号 | 含义 |
---|---|
${app.installed.path} | 安装应用程序的路径 |
${was.module.path} | 安装模块的路径 |
${current.cell.name} | 当前单元名称 |
${current.node.name} | 当前节点名称 |
${current.server.name} | 当前服务器名称 |
小心地确定要添加新许可权的位置。不正确地指定许可权会导致 AccessControlException 异常。因为动态策略在运行时解析代码库,所以确定哪个策略文件出了问题是很困难的。仅添加许可权到需要的资源。例如,使用 ${ejbcomponent} 及其他而不是 ${application},并更新 was.policy 文件而不是 app.policy 文件(如果可能的话)。
静态策略过滤
存在一些受限的静态策略过滤支持。如果 app.policy 文件和 was.policy 文件具有用 thefilterMask 关键字在 filter.policy 文件中定义的许可权,那么运行时将从应用程序中移除这些许可权并且会记录审计消息。但是,如果在 app.policy 和 was.policy 文件中定义的许可权是复合许可权(例如 java.security.AllPermission),那么不移除该许可权,而是将一条警告消息写入日志文件。策略过滤仅支持 Developer Kit 许可权;许可权包名以 java 或 javax 开头。
提供运行时策略过滤支持来执行更严格的过滤。如果 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,编辑之前从存储库中解压缩策略文件。解压缩策略文件后,使用策略工具编辑文件。将修改的策略文件检入到存储库并将他们与其他节点同步。
故障诊断
- 跟踪(由 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=4 和 LAE=true 来修改 ffdcRun.properties 文件。在日志文件中查找 Access Violation 关键字。