6.4. 编写 Java 安全性管理者策略


简介

多数 JDK 和 JRE 版本里都包含一个 policytool 程序,它用于创建和编辑 Java 安全管理者安全策略。关于 policytool 的详细信息请访问 http://docs.oracle.com/javase/6/docs/technotes/tools/

基本信息

安全策略由下列配置元素组成:

CodeBase
产生代码的 URL 位置(不包括主机和域信息)。这个参数是可选的。
SignedBy
密钥库里用来引用签名者(其私有密钥用于为代码签名)的别名。这可以是单个的值,也可以是用逗号隔开的值的列表。如果忽略它,签名的缺席与否都不会影响 Java 安全管理者。
Principals
principal_type/principal_name 对的列表,它必须出现在执行线程的 principal 集里。Principal 条目是可选的。如果忽略它,则表示 “任何 principals“。
Permissions
赋予代码的权限。许多权限是作为 Java EE 规格的一部分提供的。本文档只涵盖由 JBoss EAP 6 提供的其他权限。

过程 6.2. 设置新的 Java 安全性管理者策略

  1. 启动 policytool.

    以下列方式之一启动 policytool 工具。
    • 红帽企业版 Linux

      在 GUI 或命令行提示下,运行 /usr/bin/policytool
    • Microsoft Windows Server

      从开始菜单或 Java 安装的 bin\ 里运行 policytool.exe。在不同系统里,其位置可能会不一样。
  2. 创建一个策略。

    要创建一个策略,请选择 Add Policy Entry。添加你需要的参数,然后点击 Done
  3. 编辑现有的策略

    从现有的策略列表里选择策略,并选择 Edit Policy Entry 按钮。然后根据需要编辑相关参数。
  4. 删除现有的策略。

    从现有的策略列表里选择策略,并选择 Remove Policy Entry 按钮。

JBoss EAP 6 专有的权限

org.jboss.security.SecurityAssociation.getPrincipalInfo
提供对 org.jboss.security.SecurityAssociationgetPrincipal()getCredential() 方法的访问。使用这个运行时权限涉及的风险是可以查看当前的线程调用者和凭证。
org.jboss.security.SecurityAssociation.getSubject
提供对 org.jboss.security.SecurityAssociationgetSubject() 方法的访问。
org.jboss.security.SecurityAssociation.setPrincipalInfo
提供对 org.jboss.security.SecurityAssociationsetPrincipal()setCredential()setSubject()pushSubjectContext()popSubjectContext() 方法的访问。使用这个运行时权限涉及的风险是可以设置当前的线程调用者和凭证。
org.jboss.security.SecurityAssociation.setServer
提供对 org.jboss.security.SecurityAssociationsetServer 方法的访问。使用这个运行时权限涉及的风险是可以启用或禁用调用者 principal 和凭证的多线程存储。
org.jboss.security.SecurityAssociation.setRunAsRole
提供对 org.jboss.security.SecurityAssociationpushRunAsRolepopRunAsRolepushRunAsIdentitypopRunAsIdentity 方法的访问。使用这个运行时权限涉及的风险是可以修改当前调用者的 run-as 角色 principal。
org.jboss.security.SecurityAssociation.accessContextInfo
提供对 org.jboss.security.SecurityAssociationaccessContextInfoaccessContextInfo 的 getter 和 setter 方法的访问。这允许你设置和获取当前安全上下文信息。
org.jboss.naming.JndiPermission
提供对指定 JNDI 树路径里的文件和目录或递归至全部文件和子目录的特殊权限。JndiPermission 由一个路径名和相对于文件或目录的一系列有效权限组成。
可用的权限包括:
  • bind
  • rebind
  • unbind
  • lookup
  • list
  • listBindings
  • createSubcontext
  • all
Pathnames ending in /* indicate that the specified permissions apply to all files and directories of the pathname. Pathnames ending in /- indicate recursive permissions to all files and subdirectories of the pathname. Pathnames consisting of the special token <<ALL BINDINGS>> matches any file in any directory.
org.jboss.security.srp.SRPPermission
保护对敏感 SRP 信息(如私有会话密钥和私有密钥)访问的自定义权限类。这个权限没有定义任何动作。getSessionKey() 目标提供对 SRP 协商导致的私有会话密钥的访问。对这个密钥的访问允许你加密和解密已经用这个会话密钥加密的消息。
org.hibernate.secure.HibernatePermission
这个权限类提供对于安全 Hibernate 会话的基本权限。这个属性的目标是实体名称。可用的动作包括:
  • insert
  • delete
  • update
  • read
  • * (all)
org.jboss.metadata.spi.stack.MetaDataStackPermission
提供一个自定义权限类来控制调用者如何和元数据栈进行交互。可用的权限是:
  • modify
  • push (onto the stack)
  • pop (off the stack)
  • peek (onto the stack)
  • * (all)
org.jboss.config.spi.ConfigurationPermission
配置属性的安全设置。只定义权限目标名称,不定义动作。这个属性的目标包括:
  • <property name> (the property this code has permission to set)
  • * (all properties)
org.jboss.kernel.KernelPermission
对于内核配置的安全访问。只定义权限目标,不定义动作。这个属性的目标包括:
  • access (to the kernel configuration)
  • configure (implies access)
  • * (all)
org.jboss.kernel.plugins.util.KernelLocatorPermission
对于内核的安全访问。只定义权限目标,不定义动作。这个属性的目标包括:
  • kernel
  • * (all)
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat