5.2. 关于 Java 安全策略
Java 安全策略是为不同类型的代码定义的一组权限。Java 安全管理器将应用程序请求的操作与安全策略进行比较。如果策略允许某个操作,则安全管理器将允许执行该操作。如果策略不允许该操作,则安全管理器将拒绝该操作。
较早版本的 JBoss EAP 使用外部文件定义了策略,如 EAP_HOME/bin/server.policy
。JBoss EAP 7 通过两种方式定义了 Java 安全策略:security-manager
子系统,以及各个部署中的 XML 文件。security-manager
子系统定义 ALL 部署的最低和最大权限,而 XML 文件则指定各个部署请求的权限。
5.2.1. 关于在安全管理器子系统中定义策略
security-manager
子系统允许您为所有部署定义共享或常见权限。这可以通过定义最小和最大权限集来实现。所有部署将获得至少在最小权限中定义的所有权限。如果部署流程请求了超过最大权限集中定义的权限的权限,部署过程将失败。
示例:用于更新最小权限集的管理 CLI 命令
/subsystem=security-manager/deployment-permissions=default:write-attribute(name=minimum-permissions, value=[{class="java.util.PropertyPermission", actions="read", name="*"}])
示例:更新最大权限集的管理 CLI 命令
/subsystem=security-manager/deployment-permissions=default:write-attribute(name=maximum-permissions, value=[{class="java.util.PropertyPermission", actions="read,write", name="*"}, {class="java.io.FilePermission", actions="read,write", name="/-"}])
如果未定义最大权限集,则其值默认为 java.security.AllPermission
。
其他资源
-
您可以在 JBoss EAP 配置指南 中找到
security-manager
子系统的完整参考。
5.2.2. 关于在部署中定义策略
在 JBoss EAP 7 中,您可以在部署中添加 META-INF/permissions.xml
。此文件允许您指定部署所需的权限。
如果在 security-manager
子系统中定义了最小权限,并且将 META-INF/permissions.xml
添加至您的部署中,则将授予这些权限的联合。如果 permissions.xml
中请求的权限超过 security-manager
子系统中定义的最大策略,其部署将无法成功。如果 META-INF/permissions.xml
和 META-INF/jboss-permissions.xml
都显示在部署中,则只授予 META-INF/jboss-permissions.xml
中请求的权限。
该规范规定 permissions.xml
涵盖了整个应用或顶级部署模块。如果您要为子部署定义特定权限,您可以使用 JBoss EAP 特定的 META-INF/jboss-permissions.xml
。它采用与 permissions.xml
完全相同的格式,并且仅应用到声明它的部署模块。
示例:Sample permissions.xml
<permissions version="7"> <permission> <class-name>java.util.PropertyPermission</class-name> <name>*</name> <actions>read</actions> </permission> </permissions>
5.2.3. 关于在模块中定义策略
您可以通过在 module.xml
文件中添加 <permissions>
元素来限制模块的权限。<permissions>
元素包含零个或多个 <grant>
元素,它定义了授予该模块的权限。每个 <grant>
元素包含以下属性:
- 权限
- 要授予的权限的合格类名称。
- name
- 向权限类构造器提供的权限名称。
- 操作
- 某些权限类型所需的(可选)操作列表。
示例:带有定义策略的 module.xml
<module xmlns="urn:jboss:module:1.5" name="org.jboss.test.example"> <permissions> <grant permission="java.util.PropertyPermission" name="*" actions="read,write" /> <grant permission="java.io.FilePermission" name="/etc/-" actions="read" /> </permissions> ... </module>
如果存在 <permissions>
元素,则该模块将限制为您列出的权限。如果没有 <permissions>
元素,则模块不会有限制。