Java 2 安全性
Java™ 2 安全性提供了一种基于策略的细粒度访问控制机制,该机制通过在允许访问某些受保护的系统资源之前检查权限来提高整体系统完整性。 Java 2 安全性可以保护对文件 I/O、套接字和属性之类的系统资源的访问。 Java 2 平台,Enterprise Edition( J2EE ) 安全保护对 Web 资源(如 servlet)的访问, JavaServer页面 (JSP) 文件和企业JavaBeans (EJB)方法。
由于 Java 2 安全性相对较新,许多现有甚至新的应用程序可能还没有准备好适应 Java 2 安全性能够强制执行的非常细粒度的访问控制编程模型。 如果应用程序没有为 Java 2 安全性做好准备,管理员需要了解启用 Java 2 安全性可能带来的后果。 Java 2 安全性对应用程序开发人员和管理员提出了一些新的要求。
部署人员和管理员的 Java 2 安全性
尽管支持 Java 2 安全性,但是默认情况下它是禁用的。 您可以彼此独立地配置 Java 2 安全性和管理安全性。 禁用管理安全性不会自动禁用 Java 2 安全性。 您需要显式地将其禁用。
如果您的应用程序或第三方库尚未准备好,启用 Java 2 安全性会导致问题。 您可以将这些问题识别为 Java 2 安全性AccessControlExceptions在系统日志或跟踪文件中。 如果您不确定应用程序是否已准备好 Java 2 安全性,请先禁用 Java 2 安全性以安装应用程序并验证其是否正常运行。
当 Java 2 安全性在WebSphere® Application Server,与该类相关联的 Java 2 安全权限集是在某个WebSphere类加载器。 任何non-WebSphere类加载器没有这组 Java 权限WebSphere Application Server策略文件。 与这些类加载器关联的具有访问控制并正在执行操作的代码需要 Java 2 安全性doPrivileged阻止该代码。
这些策略文件所体现的策略不能变得更加严格,因为产品可能不具备必要的 Java 2 安全性doPrivileged已到位的 API。 限制性策略是缺省策略。 您可以授予其他权限,但不能使默认权限更加严格,因为AccessControlExceptions异常是从内部产生的WebSphere Application Server。 本产品不支持比前面提到的策略文件中定义的缺省策略更有限制性的策略。
一些策略文件用于定义Java进程的安全策略。 这些策略文件是静态的(代码库在策略文件中定义),并且采用由IBM®开发工具包,Java 技术版。 对于企业应用程序资源和实用程序库, WebSphere Application Server提供动态的政策支持。 代码库是基于部署信息动态计算的,并且许可权是运行时期间基于模板策略文件授予的。
策略文件中的语法错误将导致应用程序服务器进程发生故障,因此,务必谨慎地编辑这些策略文件。
如果应用程序没有为 Java 2 安全性做好准备,如果应用程序提供商没有提供was.policy文件作为应用程序的一部分,或者如果应用程序提供商没有传达预期的权限,则应用程序很可能在运行时导致 Java 2 安全访问控制异常。 应用程序没有为 Java 2 安全性做好准备这一点可能并不明显。 几个运行时调试助手可以帮助对发生访问控制异常的应用程序进行故障诊断。 有关更多详细信息,请参阅 Java 2 安全调试辅助工具。 看处理不支持 Java 2 安全的应用程序以获取处理此类申请的信息和策略。
需要注意的是,当在管理安全设置中启用 Java 安全时,已安装的安全管理器目前不会检查modifyThread和modifyThreadGroup非系统线程的权限。 允许网络和企业JavaBeans (EJB)应用程序代码创建或修改线程可能会对容器的其他组件产生负面影响,并会影响容器管理企业 Bean 生命周期和事务的能力。
面向应用程序开发人员的 Java 2 安全性
应用程序开发人员必须了解默认授予的权限WebSphere策略以及其应用程序调用的 SDK API 的权限要求,以了解是否需要额外的权限。 资源部分中的 Java 2 SDK 参考中的权限描述了哪些 API 需要哪些权限。
应用程序供应商可以假定应用程序拥有前面提到的缺省策略中授予的许可权。 访问默认未涵盖的资源的应用程序WebSphere需要策略来向应用程序授予额外的 Java 2 安全权限。
虽然可以以其他动态方式授予应用程序额外的权限WebSphere策略文件或更传统的java.policy静态策略文件was.policy文件嵌入在 EAR 文件中,确保附加权限限定在需要它们的确切应用程序范围内。 如果许可权的作用域超出需要该许可权的应用程序代码,就会允许通常无权访问特定资源的代码访问那些资源。
如果正在开发应用程序组件,比如可能实际上包含在多个.ear文件,则库开发人员需要记录应用程序组装者所需的 Java 2 权限。 库类型的组件没有 was.policy 文件。 开发者必须通过应用程序编程接口 (API) 文档或某些其他外部文档提供必需的许可权。
如果许可权仅由组件库内部使用,并且从未授权应用程序访问受该访问权保护的资源,那么可能有必要将代码标记为拥有特权。 请参阅AccessControlException主题以了解更多详细信息。 但是,不恰当地插入 doPrivileged 调用可能会埋下安全性隐患。 您应该了解 doPrivileged 调用的影响以作出正确的判断。
动态策略文件部分Java 2 安全策略文件描述权限was.policy文件在运行时被授予。
开发使用 Java 2 安全性的应用程序可能是一项新技能,并且要求应用程序开发人员具备以前不需要的安全意识。 描述 Java 2 安全模型及其对应用程序开发的影响超出了本节的范围。 URL可以帮助您入门 https://docs.oracle.com/javase/1.5.0/docs/guide/security/index.html。
调试助手
这WebSphere Application ServerSYSOUT 文件和com.ibm.websphere.java2secman.norethrow属性是调试的两个主要辅助工具。这WebSphere系统日志或跟踪文件
系统日志或跟踪文件中记录的 AccessControl 异常包含导致该异常的许可权违例、异常调用堆栈以及授予每个堆栈帧的许可权。 此信息通常足以确定缺少的许可权和需要该许可权的代码。com.ibm.websphere.java2secman.norethrow 属性
当 Java 2 安全性在WebSphere Application Server,安全管理器组件创建一个java.security.AccessControl当发生权限违规时发生异常。 如果未处理此异常,它通常会导致运行时发生故障。 此异常也记录在 SYSOUT 文件中。然而,当 Java 虚拟机com.ibm.websphere.java2secman.norethrow属性已设置,其值为真的,安全管理器不会创建AccessControl例外。 此信息将被记录下来。
由于此属性指示安全管理器不要创建 AccessControl 异常,所以此属性可用于沙箱或调试环境。 不强制实施 Java 2 安全性。 请勿在生产环境中使用此属性,因为宽松的 Java 2 安全环境会削弱 Java 2 安全性旨在产生的完整性。
此属性在沙箱或测试环境中非常有用。在沙箱或测试环境中,可以全面测试应用程序,并且可以检查系统日志或跟踪文件中记录的 AccessControl 异常。 由于此属性不会创建 AccessControl 异常,所以它不传播调用堆栈,并且不会引起故障。 如果没有此属性,您就必须逐个地查找和修正 AccessControl 异常。
处理不支持 Java 2 安全的应用程序
如果 Java 2 安全性提供的增强系统完整性很重要,请联系应用程序提供商,让应用程序支持 Java 2 安全性,或者至少传达除默认权限之外所需的其他权限WebSphere Application Server必须授予的政策。处理此类应用程序的最简单方法是禁用WebSphere Application Server。 缺点是此解决方案应用于整个系统,系统完整性会有所下降。 根据组织安全策略或风险容忍度,禁用 Java 2 安全性可能是不可接受的。
grant codeBase "file:${application}" {
permission java.security.AllPermission;
};server.policy 文件
这server.policy文件位于应用程序服务器根目录/properties/目录。
这server.policy文件位于配置文件根/properties目录。
此政策定义了WebSphere Application Server课程。 当前,同一个安装中的所有服务器进程共享同一个 server.policy 文件。 但是,可以对此文件进行配置,以使每个服务器进程可以有不同的 server.policy 文件。 将策略文件定义为java.security.policy Java 系统属性。 有关如何定义 Java 系统属性的详细信息,请参阅管理应用程序服务器文件中的流程定义部分。
java.policy 文件
此文件包含要授予所有类的缺省许可权。 此文件的策略适用于 Java 虚拟机在WebSphere Application Server。
这java.policy文件位于应用程序服务器根目录/java/lib/security目录。
这java.policy文件位于${java.home}/lib/security/目录${java.home}是您正在使用的软件开发工具包 (SDK) 的路径。 在整个操作系统中都要使用此策略文件。 请不要编辑 java.policy 文件。
故障诊断
- 错误消息 CWSCJ0314E
症状:
Error message CWSCJ0314E:当前Java 2安全策略报告了可能违反Java 2安全权限的情况。 有关更多信息,请参阅问题确定指南。{0}允许\:{1}代码\:{2}{3}堆栈跟踪\:{4}代码库位置_:{5}当前 Java 2 安全策略报告了可能违反 Java 2 安全许可的情况。 请参阅“问题确定指南”以了解进一步的信息。{0}许可权:{1}代码:{2}{3}堆栈跟踪:{4}代码库位置:{5}问题:
Java 安全管理器checkPermission方法报告了主题权限上的安全异常,并附带调试信息。 根据系统配置的不同,报告的信息也会有所变化。 通过将可靠性可用性服务能力 (RAS) 跟踪配置为调试模式或指定 Java 属性来启用此报告。
看启用跟踪有关如何在调试模式下配置 RAS 跟踪的信息。
在 管理控制台的“JVM 设置”面板中指定以下属性:java.security.debug。 有效值包括:- 访问
- 打印调试信息,包括:必需的许可权、代码、堆栈和代码库位置。
- 堆栈
- 打印调试信息,包括:必需的许可权、代码和堆栈。
- 失败
- 打印调试信息,包括:必需的许可权和代码。
建议的响应:
报告的异常对于安全系统可能十分关键。 请打开安全性跟踪以确定可能违反了安全策略的代码。 确定违规代码后,通过检查所有适用的 Java 2 安全策略文件和应用程序代码,验证尝试的操作是否符合 Java 2 安全性。
如果应用程序正在使用 Java Mail 运行,则该消息可能是良性的。 可以更新 was.policy 文件以将下列许可权授予该应用程序:permission java.io.FilePermission "${user.home}${/}.mailcap", "read"; permission java.io.FilePermission "${user.home}${/}.mime.types", "read"; permission java.io.FilePermission "${java.home}${/}lib${/}mailcap", "read"; permission java.io.FilePermission "${java.home}${/}lib${/}mime.types", "read";- SecurityException - 访问遭拒
症状:
如果启用了 Java 安全性,并且有权限读取jaxm.properties当通过调用以下方法创建 SOAPFactory 实例时,文件未被授予javax.xml.soap.SOAPFactory.newInstance( )或MessageFactory实例是通过调用来创建的MessageFactory.newInstance( ), ASecurityException发生异常,并且以下异常被写入系统日志:许可权: /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties : access denied (java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read) 代码: com.ibm.ws.wsfvt.test.binding.addr1.binder.AddressBinder in {file:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/ ahp6405Node01Cell/DataBinding.ear/address1.war/WEB-INF/lib /addressbinder1.jar} 堆栈跟踪: java.security.AccessControlException: access denied (java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read) .问题:
Java 2 安全策略报告了潜在的 Java 2 安全权限违规。
建议的响应:
SOAPFactory 会忽略异常,并继续确定要装入的实现的下一种方法。 因此,可以忽略此安全性异常的日志条目。
由于该产品使用 SOAPFactory 支持其他 Web 服务技术,例如 WS-Addressing (WS-A)、WS-Atomic Transaction (WS-AT) 和 WS-Notification,因此您可以忽略此SecurityException在任何启用了 Java 安全性的 Web 服务应用程序中。
消息
信息:CWSCJ0313E :Java 2 安全管理器调试消息标志已初始化\:TrDebug: {0}, 使用权: {1}, 堆: {2}, 失败: {3}
问题:已经为安全管理器配置了有效调试消息标志的值。
消息:CWSCJ0307E:
尝试确定代码库位置时捕获到意外的异常。 异常:{0}
问题:确定代码库位置时捕获到意外的异常。