保护用于开发应用程序的系统资源和 API (Java 2 安全性)

Java™ 2 安全性是一种非常普遍的编程模型,对应用程序开发具有巨大影响。

准备工作

Java 2 安全性与 Java Platform, Enterprise Edition (Java EE) 基于角色的安全性正交; 您可以在独立于管理安全性的情况下禁用或启用该安全性。

但是,它会在基于 Java EE 角色的授权的基础上提供额外级别的访问控制保护。 它特别处理系统资源和应用程序编程接口 (API) 的保护。 管理员必须考虑禁用 Java 2 安全性的风险的优点。

提供了以下建议以帮助在测试或生产环境中启用 Java 2 安全性:
  1. 确保应用程序是使用 Java 2 安全编程模型开发的。 开发者必须知道应用程序中使用的 API 是否受 Java 2 安全性保护。 非常重要的是,在策略文件中声明所使用 API 的必需许可权, was.policy 或者在启用 Java 2 安全性时应用程序无法运行。 开发者可以引用受 Java 2 安全性保护的 Development Kit API 的 Web 站点。 请参阅“安全性:学习资源”主题的“编程模型和决策”部分,以访问此 Web 站点。
  2. 确保从前发行版迁移的应用程序已给定必需的许可权。 由于 Java 2 安全性在先前的 WebSphere® Application Server 发行版中不受支持或部分受支持,因此在 V 5 之前开发的应用程序很可能未使用 Java 2 安全性编程模型。 没有简单的方法可以找出应用程序的所有必需许可权。 可以执行以下活动来确定应用程序所需的额外许可权:
    • 代码复审和代码检查
    • 应用程序文档复审
    • 在生产前环境中启用的具有 Java 2 安全性的已迁移企业应用程序的沙箱测试。 在 WebSphere Java 2 安全管理器中启用跟踪以帮助确定应用程序策略文件中缺少的许可权。 跟踪规范为:com.ibm.ws.security.core.SecurityManager=all=enabled.
    • 使用 com.ibm.websphere.java2secman.norethrow 系统属性帮助调试。 不要在生产环境中使用此属性。

[z/OS][AIX Solaris HP-UX Linux Windows]应用程序的缺省许可权集是 J2EE 1.3 规范中定义的建议许可权集。 缺省值在 app_server_root 中声明/profiles/profile_name/config/cells/cell_name/nodes/node_name/app.policy具有在 Development Kit 中定义的许可权的策略文件 (JAVA_HOME/jre/lib/security/java.policy) 授予所有人许可权的策略文件。 但是,将拒绝应用程序的许可权,这些许可权是在profiles/profile_name/config/cells/cell_name/filter.policy中。 许可权检查期间,将为应用程序过滤在 filter.policy 文件中声明的许可权。

[IBM i]应用程序的缺省许可权集合是 J2EE 1.3 规范中所定义的推荐许可权集合。 缺省值在 profile_root 中声明/config/cells/cell_name/nodes/node_name/app.policy具有在 Development Kit 策略文件中定义的许可权的策略文件,用于向每个人授予许可权。 java.policy 文件位于 java_home 目录中,具体取决于为概要文件启用的 Java 虚拟机 (JVM)。 对于所有 Java 虚拟机,java.policy文件在系统范围内使用。 请勿编辑java.policy服务器上的文件。 拒绝应用程序在 profile_root 中声明的许可权/config/cells/cell_name/filter.policy中。 许可权检查期间,将为应用程序过滤在 filter.policy 文件中声明的许可权。

[IBM i]使用 AdminTask 对象的 showVariables 命令来检索与服务器概要文件关联的节点的 JAVA_HOME。 例如,如果节点为 myNode:
  1. 进入 QShell。
  2. 执行 cd 命令以切换到 profile_root/bin
  3. 运行以下命令:
    wsadmin -conntype NONE -c '$AdminTask showVariables {-scope Node=myNode -variableName JAVA_HOME}'

was.policy 文件中定义应用程序所需的许可权,并将 was.policy 文件作为 YOURAPP.ear/META-INF/was.policy嵌入到应用程序企业归档 (EAR) 文件中。

以下步骤描述了如何在单元级别对 WebSphere Application Server Network Deployment实施 Java 2 安全性。

过程

  1. 单击 安全性> 全局安全性
    将显示“全局安全性”面板。
  2. 选择 使用 Java 2 安全性来限制应用程序对本地资源的访问 选项。
  3. 单击 确定应用
  4. 单击 保存 以保存更改。
  5. 重新启动服务器以使更改生效。

结果

为服务器启用并实施 Java 2 安全性。 调用 Java 2 安全保护 API 时,将选择 Java 2 安全许可权。
何时使用 Java 2 安全性
  1. 对系统资源启用保护,例如在打开或侦听套接字连接,读取或写入操作系统文件系统,读取或写入 Java 虚拟机系统属性时。
  2. 防止应用程序代码调用具有破坏性的 API,例如,调用 System.exit 方法会关闭应用程序服务器。
  3. 防止应用程序代码获取有特权的信息(密码)或获得额外特权(获取服务器凭证)。

下一步做什么?

通过完成以下步骤,可以在服务器级别对 WebSphere Application Server Network Deployment 实施 Java 2 安全性。
注: 对服务器级别上的 Java 2 安全设置的更改将覆盖单元级别上的设置。
  1. 单击服务器 > 应用程序服务器 > server_name
  2. 在“安全性”下,单击服务器安全性
  3. 选择此服务器的安全性设置覆盖单元设置选项。
  4. 选择 使用 Java 2 安全性来限制应用程序对本地资源的访问 选项。
  5. 单击 确定应用
  6. 单击保存以保存更改。
  7. 重新启动服务器以使更改生效。
当拒绝应用程序访问资源时,将增强 Java 2 安全管理器以转储授予调用堆栈上所有类的 Java 2 安全许可权。 创建了 java.security.AccessControlException 异常。 但是,缺省情况下此跟踪能力是禁用的。 您可以通过使用以下命令指定服务器跟踪服务来启用此功能:com.ibm.ws.security.core.SecurityManager=all=enabled跟踪规范。 创建异常时,跟踪转储会提供提示,以确定应用程序是否缺少许可权,或者所使用的产品运行时代码或第三方库是否未正确标记为privileged访问受 Java 2 安全性保护的资源时。

请参阅 Security Problem Determination Guide 以获取详细信息。