Java 2 安全性
Java™ 2 安全性 功能在 WebSphere® Application Server Liberty 中受支持。Java 2 安全性提供基于策略的细颗粒度访问控制机制,此机制通过在允许对某些受保护的系统资源进行访问前检查许可权来提高整体系统完整性。
Java 2 安全性独立于 Java 平台企业修订版的基于角色的授权。Java 2 安全性保护对系统资源(例如,文件输入和输出、套接字和属性)的访问;而 Java 平台企业修订版安全性保护对 Web 资源(例如,servlet 和 JSP 文件)的访问。
用于部署者和管理员的 Java 2 安全性
启用 Java 2 安全性之前,需要确保所有应用程序被授予所需许可权,否则,应用程序可能运行失败。缺省情况下,系统会针对每个 Java 平台企业修订版 7.0 规范向应用程序授予许可权。如果应用程序未准备好使用 Java 2 安全性 或者应用程序提供程序未在应用程序中提供 permissions.xml 文件,那么启用 Java 2 安全性时,该应用程序可能导致运行时发生 Java 2 安全性 访问控制异常。即使应用程序正在运行,它也可能不会正常运行。用于应用程序开发者的 Java 2 安全性
应用程序开发者必须了解在缺省 WebSphere 策略中授予的许可权及 Java SDK API 的许可权需求。您需要知道应用程序调用的 API 是否需要额外许可权。有关哪些 Java API 需要许可权的更多信息,请参阅 Java 2 SDK 中的许可权。当您使用包含 Web 应用程序捆绑软件 (WAB) 的 OSGi 应用程序时,许可权是通过
permissions.perm 文件添加的。如果 WAB 没有 permissions.perm 文件,策略将缺省为
java.security.AllPermission。
启用 Java 2 安全性
Java 2 安全性功能包含在内核扩展中,在引导时通过使用 websphere.java.security 属性更新 bootstrap.properties 文件启用。如果在 bootstrap.properties 文件中指定了 websphere.java.security 属性,那么系统会强制实施 Java 2 安全性;否则,不会进行许可权检查。
指定受限许可权
Liberty 提供一种机制以在运行 Web 或 EJB 应用程序组件时指定受限许可权。受限许可权确保不向捆绑软件或应用程序授予该许可权的任何实例。它们提供一种机制以阻止应用程序向其自身授予必须允许的许可权之外的其他许可权,例如,退出 VM 的许可权。<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
授予许可权
OSGi 捆绑软件可自我调整通过 permissions.perm 文件向该捆绑软件内的库/类授予的许可权。应用程序也可自我调整通过 permissions.xml 文件授予或通过在 server.xml 文件和 client.xml 文件中指定许可权授予来授予的许可权。
OSGi 捆绑软件许可权
OSGi 规范提供一种机制以通过捆绑软件的 OSGI-INF 目录中的 permissions.perm 文件指定对捆绑软件的许可权。此机制允许对捆绑软件的许可权进行细颗粒度访问控制。在 server.xml 和 client.xml 中对应用程序声明许可权
server.xml 文件和 client.xml 文件中定义的不带指定代码库的许可权适用于该 Liberty 服务器上的所有应用程序。<javaPermission className="java.util.PropertyPermission" name="*" actions="read" />
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
- 受限许可权的 restriction 设置为 true。
- 如果应用程序尝试向其自身授予定义为受限许可权的许可权,那么受限许可权优先于授权并且不允许授权。
在 permissions.xml 中对应用程序声明许可权
permissions.xml 文件是 Java EE7 规范引入的新文件。它被打包在应用程序目录的 META-INF 目录下。对于打包为独立 .war 文件的应用程序,在 META-INF WAR 级别指定的许可权适用于打包在 .war 文件中的所有模块和库。
对于打包在 .ear 文件中的应用程序,必须在 .ear 文件级别声明许可权。此许可权集适用于打包在 .ear 文件或其所包含模块中的所有模块和库。这类打包模块中的任何 permissions.xml 文件将被忽略,不管是否对 .ear 文件提供了 permissions.xml 文件都是如此。
对于打包在 .rar 文件中的应用程序,必须在 META-INF RAR 级别声明许可权。