配置 Java 2 安全性的 was.policy 文件

如果应用程序要访问特定的资源,那么您应该更新 was.policy 文件。

开始之前

Java™ 2 安全性使用若干策略文件,为每个 Java 程序确定授予的许可权。was.policy 文件是 WebSphere® Application Server 企业应用程序的特定于应用程序的策略文件。此文件嵌入在 META-INF/was.policy 企业归档 (.EAR) 文件中。was.policy 文件位于:
profile_root/config/cells/cell_name/applications/
ear_file_name/deployments/application_name/META-INF/was.policy

请参阅 Java 2 安全策略文件,以获取 WebSphere Application Server V6.1 支持的可用策略文件列表。

下列文件中所包含的许可权并集适用于 WebSphere Application Server 企业应用程序:
  • java.security 文件的 policy.url.* 属性中指定的所有策略文件。
  • app.policy 文件,它由配置和文件复制服务管理。
  • server.policy 文件。
  • java.policy 文件。
  • 应用程序 was.policy 文件。
  • ra.xml 文件的许可权规范。
  • 共享库,其为 library.policy 文件。

在这些文件中进行的更改将复制到单元中的其他节点。

表 1. 为使许可权列表与特定类型的资源相关联而定义的符号. 定义多个产品保留的符号,以将许可权列表关联到特定类型的资源。
符号 定义
file:${application} 许可权适用于在应用程序中使用的所有资源
file:${jars} 许可权适用于应用程序内的所有实用程序 Java 归档 (JAR) 文件
file:${ejbComponent} 许可权适用于应用程序中的企业 Bean 资源
file:${webComponent} 许可权适用于应用程序中的 Web 资源
file:${connectorComponent} 许可权适用于应用程序中的连接器资源
在 WebSphere Application Server 中,处理线程的应用程序必须具有 was.policyapp.policy 文件中指定的适当线程许可权。如果未指定线程许可权,那么应用程序就无法处理线程,WebSphere Application Server 将创建 java.security.AccessControlException 异常。如果将许可权添加到特定应用程序的 was.policy 文件中,那么无须重新启动 WebSphere Application Server。管理员必须将下列代码添加到 was.policyapp.policy 文件中,使应用程序能够使用线程:
grant codeBase "file:${application}" {
  permission java.lang.RuntimePermission "stopThread";
  permission java.lang.RuntimePermission "modifyThread";
  permission java.lang.RuntimePermission "modifyThreadGroup";
};
管理员可将线程许可权添加到 app.policy 文件中,但是许可权的更改要求重新启动 WebSphere Application Server。
要点:was.policy 文件中不支持 Signed By 和 Java 认证和授权服务 (JAAS) 主体关键字。Signed By 关键字在 java.policyserver.policyclient.policy 策略文件中受支持。当 Java 虚拟机 (JVM) 系统属性 java.security.auth.policy 指定了 JAAS 主体关键字时,在 JAAS 策略文件中支持该关键字。可以在 java.security.auth.policy 文件中使用 auth.policy.url.n=URL 来静态地设置授权策略文件,其中 URL 是授权策略的位置。
除这些块以外,可以为粒度设置指定模块名。例如,
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";
};
表 2. 提供嵌入式符号以指定 java.io.FilePermission 许可权的路径和名称. 提供五个嵌入式符号,以指定 java.io.FilePermission 许可权的路径和名称。这些符号启用灵活的许可权规范。安装应用程序后,绝对文件路径是 固定的。
符号 定义
${app.installed.path} 安装应用程序的路径
${was.module.path} 安装模块的路径
${current.cell.name} Current®单元名
${current.node.name} 当前节点名
${current.server.name} 当前服务器名

关于此任务

如果企业应用程序的缺省许可权已足够,那么不需要执行操作。缺省许可权是 java.policy 文件、server.policy 文件和 app.policy 文件中定义的许可权的并集。如果应用程序有要访问的特定资源,更新 was.policy 文件。 前两个步骤假设您要创建新的策略文件。
提示: 策略文件中的语法错误将导致应用程序服务器失败。编辑这些策略文件时请小心。

过程

  1. 使用 PolicyTool 创建或编辑新的 was.policy 文件。 有关更多信息,请参阅使用 PolicyTool 来编辑 Java 2 安全性的策略文件
  2. was.policy 文件打包到企业归档 (EAR) 文件中。

    有关更多信息,请参阅将 was.policy 文件添加到 Java 2 安全性应用程序

    以下说明描述如何导入 was.policy 文件。
    1. 将 EAR 文件导入到组装工具。
    2. 打开“项目导航器”视图。
    3. 展开 EAR 文件并单击 META-INF 您可能在 META-INF 目录中找到 was.policy 文件。如果您想删除该文件,那么右键单击文件名并选择删除
    4. 在“项目导航器”视图中,单击 J2EE 层次结构
    5. 通过右键单击部署描述符中的 Modules 目录,然后单击导入 > 导入 > 文件系统来导入 was.policy 文件。
    6. 单击下一步
    7. 源目录字段中输入 was.policy 文件的路径名或单击浏览找到该文件。
    8. 验证目标目录字段中列示的路径目录列示了正确的 META-INF 目录。
    9. 单击完成
    10. 要验证 EAR 文件,右键单击 EAR 文件(它包含 Modules 目录)并单击运行验证
    11. 要保存新的 EAR 文件,右键单击 EAR 文件并单击导出 > 导出 EAR 文件 如果您不保存修正的 EAR 文件,那么 EAR 文件将包含新的 was.policy 文件。但是,如果工作空间损坏,那么您可能丢失该修正的 EAR 文件。
    12. 要生成部署代码,右键单击 EAR 文件并单击生成部署代码
  3. 如果已存在一个应用程序,那么更新现有已安装的应用程序。 使用策略工具修改 was.policy 文件。有关更多信息,请参阅使用 PolicyTool 来编辑 Java 2 安全性的策略文件[z/OS]
    1. 抽取策略文件。从命令提示符输入以下命令:
      wsadmin> set obj [$AdminConfig extract profiles/profile_name/cells/cell_name
      /application/ear_file_name/deployments/application_name
      /META_INF/was.policy c:/temp/test/was.policy]

      将前面三行作为一连续行输入。此处所显示的信息仅供参考。

    2. 使用策略工具编辑抽取的 was.policy 文件。有关更多信息,请参阅使用 PolicyTool 来编辑 Java 2 安全性的策略文件
    3. 检入策略文件。在命令提示符上输入以下命令:
      wsadmin> $AdminConfig checkin profiles/profile_name/cells/cell_name/application/
      ear_file_name/deployments/application_name/META_INF/was.policy 
      c:/temp/test/was.policy $obj

      将前面三行作为一连续行输入。此处所显示的信息仅供参考。

结果

重新启动应用程序后,将已更新的 was.policy 文件应用于应用程序。

示例

[IBM i][z/OS]
java.security.AccessControlException: access denied (java.io.FilePermission 
${was.install.root}/java/ext/mail.jar read)
[z/OS][IBM i]如果应用程序必须访问在 java.policy 文件、server.policy 文件和 app.policy 中未定义为缺省值的特定资源,那么删除该应用程序的 was.policy 文件。缺少许可权的症状是 java.security.AccessControlException 异常。缺少的许可权在异常数据中列示:
注: 以下示例拆分为若干行,仅仅是为了便于说明。实际上在一行内输入许可权。
[IBM i][z/OS]
java.security.AccessControlException: access denied (java.io.FilePermission 
${was.install.root}/java/ext/mail.jar read)

当 Java 程序接收到此异常,并且添加此许可权被认为是正当时,请在 was.policy 文件中添加以下许可权:

[IBM i][z/OS]
grant codeBase "file:user_client_installed_location" { 
  permission java.io.FilePermission 
"${was.install.root}$(/)java$(/)jre$(/)lib$(/)ext$(/)mail.jar", "read";
};

要确定是否添加许可权,请参阅“Java 2 安全性的访问控制异常”。

下一步做什么

重新启动所有应用程序,以使更新的 app.policy 文件生效。

指示主题类型的图标 任务主题



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