迁移 Java 2 安全策略
使用本主题作为与迁移 Java™ 2 安全策略有关的指导。
关于此任务
先前 WebSphere® Application Server 发行版
WebSphere Application Server 在服务器运行时中使用 Java 2 安全管理器,以防止企业应用程序调用 System.exit() 和 System.setSecurityManager() 方法。如果企业应用程序调用这两个 Java 应用程序编程接口 (API),那么它们会产生您所不希望的结果。例如,System.exit() API 导致 Java 虚拟机(应用程序服务器进程)过早退出,这是一个对应用程序服务器无益的操作。
要正确地支持 Java 2 安全性,所有服务器运行时必须标记为 privileged(在正确位置插入 doPrivileged API 调用),并标识缺省许可权集合或策略。应用程序代码没有特权,并且服从策略文件中定义的许可权。要支持 Java 2 安全性,doPrivileged 检测是重要而且必需的。没有它,应用程序代码必须被授予服务器运行时所需的许可权。这种情况是由于 Java 2 安全性 执行许可权检查所使用的设计和算法所导致的。请参阅 Java 2 安全性检查许可权算法。
- java.lang.RuntimePermission(exitVM)
- java.lang.RuntimePermission(setSecurityManager)
无论 Java 2 安全策略是什么,都将拒绝应用程序代码访问这些许可权。但是,服务器运行时被授予这些许可权。所有其他许可权检查并非都执行。
- java.net.SocketPermission
- java.net.NetPermission
但是,并非所有产品服务器运行时都正确地标记为有特权的。除了前面列出的这两个许可权之外,您还必须授予应用程序代码所有其他的许可权,否则企业应用程序的运行可能会失败。企业应用程序的这个 Java 2 安全策略是自由的。
更改的内容
Java 2 安全性在 WebSphere Application Server 中完全受支持,这意味着将执行所有许可权。企业应用程序的缺省 Java 2 安全策略是建议的许可权集合(由 Java Platform, Enterprise Edition (Java EE) V1.4 规范定义)。请参阅 profile_root/config/cells/cell_name/nodes/node_name/app.policy 文件,以了解授予企业应用程序的缺省 Java 2 安全策略。与前发行版比较,此策略要严格得多。
所有策略是声明性的。产品安全管理器支持策略文件中声明的所有策略。此规则有个例外:拒绝企业应用程序访问 profile_root/config/cells/cell_name/filter.policy 文件中声明的许可权。
在应用程序代码中,不要使用 setSecurityManager 许可权来设置安全管理器。应用程序使用 setSecurityManager 许可权时,会与 WebSphere Application Server 中的内部安全管理器发生冲突。如果您必须在应用程序中设置安全管理器以执行 RMI,那么还必须在 WebSphere Application Server 管理控制台内的“全局安全性”页面上启用使用 Java 2 安全性来限制应用程序对本地资源的访问选项。然后,WebSphere Application Server 会注册安全管理器。应用程序代码可通过使用 System.getSecurityManager() 应用程序编程接口 (API) 来验证是否已注册此安全管理器。
迁移系统属性
- java.security.policy。策略文件的绝对路径(必需的操作)。此系统属性包含系统许可权(授予 Java 虚拟机 (JVM) 和产品服务器运行时的许可权)和企业应用程序许可权。将企业应用程序的 Java 2 安全策略迁移至 V9.0。对于 Java 2 安全策略迁移,请参阅迁移 Java 2 安全策略的步骤。
- enableJava2Security。用于启用 Java 2 安全性执行(不需要操作)。不推荐使用此系统属性;WebSphere 配置应用程序编程接口 (API) 中的标志用于控制是否要启用 Java 2 安全性。通过管理控制台启用此选项。
- was.home。已扩展至 WebSphere Application Server 的安装目录(可能需要执行操作)。不推荐使用此系统属性;它已被 ${user.install.root} 和 ${was.install.root} 属性取代。如果目录包含特定于实例的数据,请使用 ${user.install.root};否则使用 ${was.install.root}。请以可交换方式对 WebSphere Application Server 或 WebSphere Application Server Network Deployment 环境使用这些属性。请参阅迁移 Java 2 安全策略的步骤。
迁移 Java 2 安全策略
因为同一策略文件中混合了系统许可权和应用程序许可权,所以没有将 Java 策略文件自动迁移至 V9.0 的简单方法。手动复制企业应用程序的 Java 2 安全策略到 was.polic 或 app.policy 文件。但是,因为使用的是符号或相对代码库,而不是绝对代码库,所以最好是将 Java 2 安全策略迁移到 was.policy 文件。这样做有很多好处。将 was.policy 文件中定义的许可权仅授予特定企业应用程序,而 app.policy 文件中的许可权应用到在 app.policy 文件所属节点上运行的所有企业应用程序。
请参阅Java 2 安全策略文件主题,以了解有关策略管理的更多详细信息。
以下示例描述从前发行版迁移 Java 2 安全策略。内容包括 app1.ear 企业应用程序的 Java 2 安全策略文件和系统许可权(即授予 Java 虚拟机 (JVM) 和产品服务器运行时的许可权)。
Java 2 安全策略文件的缺省位置为 profile_root/properties/java.policy。为了清楚起见,省略了缺省许可权:
Java 2 安全策略文件的缺省位置为 profile_root/properties/java.policy。为了清楚起见,省略了缺省许可权:
// For product Samples
grant codeBase "file:${app_server_root}/installedApps/app1.ear/-" {
permission java.security.SecurityPermission "printIdentity";
permission java.io.FilePermission "${app_server_root}${/}temp${/}somefile.txt",
"read";
};
为了清楚地说明,在本示例中,所有许可权迁移为应用程序级别许可权。但是,可以在组件级别(Web、企业 Bean、连接器或实用程序 Java 归档 (JAR) 组件级别)上以更细颗粒度的级别授予许可权,或者您也可以将许可权授予特殊组件。