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 安全性管理者策略
启动
policytool
.以下列方式之一启动policytool
工具。红帽企业版 Linux
在 GUI 或命令行提示下,运行/usr/bin/policytool
。Microsoft Windows Server
从开始菜单或 Java 安装的bin\
里运行policytool.exe
。在不同系统里,其位置可能会不一样。
创建一个策略。
要创建一个策略,请选择。添加你需要的参数,然后点击 。编辑现有的策略
从现有的策略列表里选择策略,并选择按钮。然后根据需要编辑相关参数。删除现有的策略。
从现有的策略列表里选择策略,并选择按钮。
JBoss EAP 6 专有的权限
- org.jboss.security.SecurityAssociation.getPrincipalInfo
- 提供对
org.jboss.security.SecurityAssociation
、getPrincipal()
和getCredential()
方法的访问。使用这个运行时权限涉及的风险是可以查看当前的线程调用者和凭证。 - org.jboss.security.SecurityAssociation.getSubject
- 提供对
org.jboss.security.SecurityAssociation
、getSubject()
方法的访问。 - org.jboss.security.SecurityAssociation.setPrincipalInfo
- 提供对
org.jboss.security.SecurityAssociation
、setPrincipal()
、setCredential()
、setSubject()
、pushSubjectContext()
和popSubjectContext()
方法的访问。使用这个运行时权限涉及的风险是可以设置当前的线程调用者和凭证。 - org.jboss.security.SecurityAssociation.setServer
- 提供对
org.jboss.security.SecurityAssociation
、setServer
方法的访问。使用这个运行时权限涉及的风险是可以启用或禁用调用者 principal 和凭证的多线程存储。 - org.jboss.security.SecurityAssociation.setRunAsRole
- 提供对
org.jboss.security.SecurityAssociation
、pushRunAsRole
、popRunAsRole
、pushRunAsIdentity
和popRunAsIdentity
方法的访问。使用这个运行时权限涉及的风险是可以修改当前调用者的 run-as 角色 principal。 - org.jboss.security.SecurityAssociation.accessContextInfo
- 提供对
org.jboss.security.SecurityAssociation
、accessContextInfo
和accessContextInfo
的 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)