app.policy 文件许可权

Java™ 2 安全性使用若干策略文件,为每个 Java 程序确定授予的许可权。下列文件中所包含的许可权并集适用于 WebSphere® Application Server 企业应用程序。此并集确定被授予的许可权。

要获取 WebSphere Application Server 支持的可用策略文件列表,请参阅有关 Java 2 安全性策略文件的主题。app.policy 文件是所有 WebSphere Application Server 企业应用程序共享的缺省策略文件。下列文件中所包含的许可权并集适用于 WebSphere Application Server 企业应用程序:
  • java.security 文件的 policy.url.* 属性中指定的所有策略文件。
  • app.policy 文件,它由配置和文件复制服务管理。
  • server.policy 文件。
  • java.policy 文件。
  • 应用程序 was.policy 文件。
  • ra.xml 文件的许可权规范。
  • 共享库,其为 library.policy 文件。

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

WebSphere Application Server 中,处理线程的应用程序必须具有 was.policyapp.policy 文件中所指定的适当线程许可权。如果未指定线程许可权,应用程序就无法处理线程,并且 WebSphere Application Server 将生成 java.security.AccessControlException 异常。如果管理员将线程许可权添加到 app.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 文件中不支持 Signed By 和 Java 认证和授权服务 (JAAS) 主体关键字。然而,下列文件中支持 Signed By 关键字:java.policyserver.policyclient.policy 文件。当 java.security.auth.policy Java 虚拟机 (JVM) 系统属性指定了 JAAS 主体关键字时,在 JAAS 策略文件中会支持该关键字。可以在 java.security.auth.policy 属性中使用 auth.policy.url.n=URL 来静态设置授权策略文件,其中 URL 是授权策略的位置。
如果企业应用程序的缺省许可权(java.policy 文件、server.policy 文件和 app.policy 文件中定义的许可权并集)足够,那么无需执行操作。自动使用缺省 app.policy 文件。如果对单元中所有企业应用程序需要特定更改,请更新 app.policy 文件。策略文件中的语法错误导致应用程序服务器中启动失败。仔细地编辑这些策略文件。
注: app.policy 文件的更新仅适用于节点上 app.policy 文件所属的企业应用程序。

要抽取策略文件,请使用适合于环境的变量值通过命令提示符在一行中输入以下命令:

[Windows]
wsadmin> set obj [$AdminConfig extract cells/cell_name/node/node_name/app.policy c:\temp\test\app.policy]
[IBM i][z/OS]
wsadmin> set obj [$AdminConfig extract  cells/cell_name/node/node_name/app.policy /temp/test/app.policy]

用策略工具编辑抽取的 app.policy 文件。有关更多信息,请参阅使用 PolicyTool 来编辑 Java 2 安全性的策略文件app.policy 文件的更改对于节点是本地的。

要检入策略文件,请使用适合于环境的变量值通过命令提示符在一行中输入以下命令:

[Windows]
wsadmin> $AdminConfig checkin cells/cell_name/nodes/node_name/app.policy c:\temp\test\app.policy $obj
[IBM i][z/OS]
wsadmin> $AdminConfig checkin cells/cell_name/nodes/node_name/app.policy  temp/test/app.policy $obj
表 1. 用来使许可权列表与特定类型的资源相关联的符号. 定义多个产品保留的符号,以将许可权列表关联到特定类型的资源。
符号 含义
file:${application} 许可权适用于应用程序内的所有资源
file:${jars} 许可权应用于应用程序内的所有实用程序 Java 归档 (JAR) 文件
file:${ejbComponent} 许可权适用于应用程序中的企业 Bean 资源
file:${webComponent} 许可权适用于应用程序中的 Web 资源
file:${connectorComponent} 许可权适用于应用程序和独立连接器资源内的连接器资源。
表 2. 提供符号以指定 java.io.FilePermission 许可权的路径和名称. 提供五个嵌入式符号,以指定 java.io.FilePermission 许可权的路径和名称。这些符号启用灵活的许可权规范。安装应用程序之后,绝对文件路径是固定的。
符号 含义
${app.installed.path} 安装应用程序的路径
${was.module.path} 安装模块的路径
${current.cell.name} 当前单元名称
${current.node.name} 当前节点名称
${current.server.name} 当前服务器名称
提示: 您无法在 ${application} 条目中使用 ${was.module.path}

[IBM i][z/OS]WebSphere Application Server 所提供的 app.policy 文件位于 profile_root/config/cells/cell_name/nodes/node_name/app.policy 中,它包含下列缺省许可权:

注意: 在下列代码样本中,为了便于说明,与 java.io.FilePermission 许可权相关的前两行分别被分割成两行。
grant codeBase "file:${application}" {
  // The following are required by JavaMail
  permission java.io.FilePermission "${was.install.root}${/}lib${/}activation-impl.jar", "read";
  permission java.io.FilePermission "${was.install.root}${/}lib${/}mail-impl.jar", "read";
};

grant codeBase "file:${jars}" {
  permission java.net.SocketPermission "*", "connect";
  permission java.util.PropertyPermission "*", "read";
};

grant codeBase "file:${connectorComponent}" {
  permission java.net.SocketPermission "*", "connect";
  permission java.util.PropertyPermission "*", "read";
};

grant codeBase "file:${webComponent}" {
  permission java.io.FilePermission "${was.module.path}", "read";
  permission java.io.FilePermission "${was.module.path}${/}-", "read, write"
  permission java.lang.RuntimePermission "loadLibrary.*";
  permission java.lang.RuntimePermission "queuePrintJob";
  permission java.net.SocketPermission "*", "connect";
  permission java.util.PropertyPermission "*", "read";
};
grant codeBase "file:${ejbComponent}" {
 permission java.lang.RuntimePermission "queuePrintJob";
 permission java.lang.RuntimePermission "loadLibrary.*";
 permission java.net.SocketPermission "*", "connect";
 permission java.util.PropertyPermission "*", "read";
 permission java.io.FilePermission "*", "read,write";
};
如果单元中的所有 WebSphere Application Server 企业应用程序需要在 java.policy 文件、server.policy 文件和 app.policy 文件中未定义为缺省值的许可权,请更新 app.policy 文件。缺少许可权的症状是发生 java.security.AccessControlException 异常。
注: 对 app.policy 文件所作的更新仅适用于节点上 app.policy 文件所属的企业应用程序。
[Windows] 缺少的许可权列出在异常数据中,例如,
java.security.AccessControlException: access denied
(java.io.FilePermission
C:\WebSphere\AppServer\java\jre\lib\ext\mail.jar read)

当 Java 程序收到此异常并且添加此许可权被认为是正当的时,添加许可权到 server.policy 文件,例如:

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

为了便于说明,上几行许可权信息被分割。实际上在一行内输入许可权。

要确定是否添加许可权,请参阅 AccessControlException 主题。

重新启动所有 WebSphere Application Server 企业应用程序,以确保更新后的 app.policy 文件生效。


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



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