JAVA策略文件简介(上)
2011-12-14 11:32
148 查看
原文地址:http://download.oracle.com/javase/1.5.0/docs/guide/security/PolicyFiles.html
编译转载自:http://hi.baidu.com/sqxxr/blog/item/51e00dcb084c91eb52664f83.html
一、前言
JVM可以通过java.security.Policy的实例化对象根据代码的来源和其签名者来为其指定不同的权限。在任何时候只能有一个起作用。当前安装的Policy对象,在程序中可以通过调用Policy.getPolicy()方法得到,也可以通过调用Policy.setPolicy()方法改变。Policy对象评估整个策略,返回一个适当的Permissions对象,详细说明那些代码可以访问那些资源。系统默认使用的Policy对象是java.security.Policy的子类sun.security.provider.PolicyFile的实例化对象。为了方便,JVM提供了把由Policy文件来定制Policy对象的功能。sun.security.provider.PolicyFile是根据配置文件中指定的策略来实现进行代码权限的管理。对于这种配置文件,我们称之为JAVA策略文件。
二、缺省Policy实现
sun.security.provider.PolicyFile是系统默认的Policy实现,我们暂且称之为缺省Policy
实现。在缺省 Policy 实现中,可在一个或多个策略配置文件中指定策略。配置文件的作用是指定一些代码所能获得的权限。可利用简单的文本编辑器或 Policy Tool 实用程序来编写策略文件。 默认情况下,系统上只有单个全系统策略文件和唯一的(可选)用户策略文件。 首次调用sun.security.provider.PolicyFile对象的
getPermissions方法或在任何时候调用其refresh方法时,即分析策略文件,并据此对该对象进行初始化。
三、策略文件的位置
3.1、默认的策略文件
如前所述,系统在缺省Policy实现下具有单个全系统策略文件和唯一的用户策略文件。
系统策略文件的默认位置为:
java.home/lib/security/java.policy (Solaris)
java.home\lib\security\java.policy (Windows)
java.home是指JAVA系统中名为“java.home“的属性的值,它表示的是JRE的安装目录。比如,C:\Program
Files\Java\jre6
在JAVA程序中,可以通过System.getProperty("java.home")这种方式得到其值.
系统策略文件可用于授予全系统代码权限。与 JDK 一起安装的 java.policy 文件可向标准扩展 (Java standard extensions) 授予全部权限,允许任何用户在无特权要求的端口进行监听,同时允许任何代码读取某些对安全不敏感的“标准”属性(例如“os.name”和“file.separator”属性)。
用户策略文件的默认位置为:
user.home/.java.policy (Solaris)
user.home\.java.policy (Windows)
user.home指的是JAVA系统中名为“user.home”的属性的值,它表示的是用户的主目录。
在 Windows 系统中,对于用户Administrator就是C:\Documents
and Settings\Administrator。
关于user.home的更多内容请参照《JAVA系统属性之user.home》
初始化Policy 时,将首先加载系统策略,然后在 Policy 中添加用户策略。如果两种策略均不存在,则采用内置策略。该内置策略与原始的沙箱策略相同。
策略文件的默认位置其实是在系统的安全属性文件中指定。安全属性文件的位置为:
java.home/lib/security/java.security (Solaris)
java.home\lib\security\java.security (Windows)
如上所述,java.home 指示JDK 的安装目录。策略文件的位置被指定为其名称具有以下形式的属性的值:
policy.url.n
其中 n 为数字。应采用以下形式的语句行来指定每个属性值:
policy.url.n=URL
其中,URL 为 URL 规范,应该始终用正斜杠(而不要用反斜杠)作为目录分隔符,即使代码源实际在 Windows 系统上
例如,安全属性文件中将把缺省Policy实现的系统策略文件和用户策略文件定义为:
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
有关利用特殊语法(例如利用 ${java.home} 来指定 java.home 属性值来指定属性值的详细信息,请参阅属性扩展。
3.2、静态指定策略文件
实际上,在系统的安全属性文件中,用户可以指定多个 URL(包括“http://”形式的 URL),从而加载更多的策略文件。也可注释掉或更改第二个
URL,从而禁止读取缺省用户策略文件。
该算法自policy.url.1开始,然后不断递增直到查不到 URL 为止。因此,如果有了 policy.url.1 和 policy.url.3,而没有 policy.url.2的话,就不会读取
policy.url.3。
3.3、运行时动态指定策略文件
在执行应用程序时也可以指定附加的或不同的策略文件,方法是用“-Djava.security.policy”命令行参数来指定(该命令行参数设置 java.security.policy 属性值)。例如,如果使用
java -Djava.security.manager -Djava.security.policy=someURL SomeApp
这里 someURL 是指定策略文件位置的 URL,则除了加载安全属性文件中指定的所有策略文件外,还会加载本方法所指定的策略文件。
注意:1、URL可以是任何标准 URL,也可以只是当前目录下策略文件的文件名,如下例所示:
java -Djava.security.manager -Djava.security.policy=mypolicy WriteFile
2、“-Djava.security.manager”参数可确保缺省安全管理器已被安装,这样就容易对应用程序进行策略检查。如果应用程序SomeApp 安装有安全管理器,则不需要该参数。
如果使用java -Djava.security.manager -Djava.security.policy==someURL
SomeApp
(请注意双等号),就会仅使用指定的策略文件,而安全属性文件中指出的策略文件将被忽略。
如果要将策略文件传递给appletviewer命令,就应使用参数“-J-Djava.security.policy”,如下所示:
appletviewer -J-Djava.security.policy=someURL myApplet
注意:如果将安全属性文件中的“policy.allowSystemProperty”属性设置为“false”,就会忽略“-Djava.security.policy”策略文件值(对于java
和 appletviewer 命令)。缺省值为“true”。
这种方法使用灵活,特别是作为一个软件包在企业内部网中发布时,安装、设置和迁移软件,基本无须修改Policy文件的内容,使用起来相当简单,而且,安全许可的范围控制较精细
四、更改 Policy 实现
可以用其它policy 类来代替系统的缺省Policy实现类,前提是它必须是抽象类Policy类的子类并实现了getPermissions 方法(及其它必要的方法)。
可通过编辑安全属性文件来完成缺省Policy 实现的更改。安全属性文件是指JRE的lib/security目录中的java.security 文件。
下面是在java.security 中设置的Policy实现类的形式:
policy.provider=PolicyClassName
PolicyClassName必须用其Policy实现类的完整名称。默认的是设置为系统的Policy的缺省实现类,即sun.security.provider.PolicyFile,如下:
policy.provider=sun.security.provider.PolicyFile
要想自定义安全属性文件项,可通过更改属性值来指定另一个类,如下例所示:
policy.provider=com.mycom.MyPolicy
编译转载自:http://hi.baidu.com/sqxxr/blog/item/51e00dcb084c91eb52664f83.html
一、前言
JVM可以通过java.security.Policy的实例化对象根据代码的来源和其签名者来为其指定不同的权限。在任何时候只能有一个起作用。当前安装的Policy对象,在程序中可以通过调用Policy.getPolicy()方法得到,也可以通过调用Policy.setPolicy()方法改变。Policy对象评估整个策略,返回一个适当的Permissions对象,详细说明那些代码可以访问那些资源。系统默认使用的Policy对象是java.security.Policy的子类sun.security.provider.PolicyFile的实例化对象。为了方便,JVM提供了把由Policy文件来定制Policy对象的功能。sun.security.provider.PolicyFile是根据配置文件中指定的策略来实现进行代码权限的管理。对于这种配置文件,我们称之为JAVA策略文件。
二、缺省Policy实现
sun.security.provider.PolicyFile是系统默认的Policy实现,我们暂且称之为缺省Policy
实现。在缺省 Policy 实现中,可在一个或多个策略配置文件中指定策略。配置文件的作用是指定一些代码所能获得的权限。可利用简单的文本编辑器或 Policy Tool 实用程序来编写策略文件。 默认情况下,系统上只有单个全系统策略文件和唯一的(可选)用户策略文件。 首次调用sun.security.provider.PolicyFile对象的
getPermissions方法或在任何时候调用其refresh方法时,即分析策略文件,并据此对该对象进行初始化。
三、策略文件的位置
3.1、默认的策略文件
如前所述,系统在缺省Policy实现下具有单个全系统策略文件和唯一的用户策略文件。
系统策略文件的默认位置为:
java.home/lib/security/java.policy (Solaris)
java.home\lib\security\java.policy (Windows)
java.home是指JAVA系统中名为“java.home“的属性的值,它表示的是JRE的安装目录。比如,C:\Program
Files\Java\jre6
在JAVA程序中,可以通过System.getProperty("java.home")这种方式得到其值.
系统策略文件可用于授予全系统代码权限。与 JDK 一起安装的 java.policy 文件可向标准扩展 (Java standard extensions) 授予全部权限,允许任何用户在无特权要求的端口进行监听,同时允许任何代码读取某些对安全不敏感的“标准”属性(例如“os.name”和“file.separator”属性)。
用户策略文件的默认位置为:
user.home/.java.policy (Solaris)
user.home\.java.policy (Windows)
user.home指的是JAVA系统中名为“user.home”的属性的值,它表示的是用户的主目录。
在 Windows 系统中,对于用户Administrator就是C:\Documents
and Settings\Administrator。
关于user.home的更多内容请参照《JAVA系统属性之user.home》
初始化Policy 时,将首先加载系统策略,然后在 Policy 中添加用户策略。如果两种策略均不存在,则采用内置策略。该内置策略与原始的沙箱策略相同。
策略文件的默认位置其实是在系统的安全属性文件中指定。安全属性文件的位置为:
java.home/lib/security/java.security (Solaris)
java.home\lib\security\java.security (Windows)
如上所述,java.home 指示JDK 的安装目录。策略文件的位置被指定为其名称具有以下形式的属性的值:
policy.url.n
其中 n 为数字。应采用以下形式的语句行来指定每个属性值:
policy.url.n=URL
其中,URL 为 URL 规范,应该始终用正斜杠(而不要用反斜杠)作为目录分隔符,即使代码源实际在 Windows 系统上
例如,安全属性文件中将把缺省Policy实现的系统策略文件和用户策略文件定义为:
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
有关利用特殊语法(例如利用 ${java.home} 来指定 java.home 属性值来指定属性值的详细信息,请参阅属性扩展。
3.2、静态指定策略文件
实际上,在系统的安全属性文件中,用户可以指定多个 URL(包括“http://”形式的 URL),从而加载更多的策略文件。也可注释掉或更改第二个
URL,从而禁止读取缺省用户策略文件。
该算法自policy.url.1开始,然后不断递增直到查不到 URL 为止。因此,如果有了 policy.url.1 和 policy.url.3,而没有 policy.url.2的话,就不会读取
policy.url.3。
3.3、运行时动态指定策略文件
在执行应用程序时也可以指定附加的或不同的策略文件,方法是用“-Djava.security.policy”命令行参数来指定(该命令行参数设置 java.security.policy 属性值)。例如,如果使用
java -Djava.security.manager -Djava.security.policy=someURL SomeApp
这里 someURL 是指定策略文件位置的 URL,则除了加载安全属性文件中指定的所有策略文件外,还会加载本方法所指定的策略文件。
注意:1、URL可以是任何标准 URL,也可以只是当前目录下策略文件的文件名,如下例所示:
java -Djava.security.manager -Djava.security.policy=mypolicy WriteFile
2、“-Djava.security.manager”参数可确保缺省安全管理器已被安装,这样就容易对应用程序进行策略检查。如果应用程序SomeApp 安装有安全管理器,则不需要该参数。
如果使用java -Djava.security.manager -Djava.security.policy==someURL
SomeApp
(请注意双等号),就会仅使用指定的策略文件,而安全属性文件中指出的策略文件将被忽略。
如果要将策略文件传递给appletviewer命令,就应使用参数“-J-Djava.security.policy”,如下所示:
appletviewer -J-Djava.security.policy=someURL myApplet
注意:如果将安全属性文件中的“policy.allowSystemProperty”属性设置为“false”,就会忽略“-Djava.security.policy”策略文件值(对于java
和 appletviewer 命令)。缺省值为“true”。
这种方法使用灵活,特别是作为一个软件包在企业内部网中发布时,安装、设置和迁移软件,基本无须修改Policy文件的内容,使用起来相当简单,而且,安全许可的范围控制较精细
四、更改 Policy 实现
可以用其它policy 类来代替系统的缺省Policy实现类,前提是它必须是抽象类Policy类的子类并实现了getPermissions 方法(及其它必要的方法)。
可通过编辑安全属性文件来完成缺省Policy 实现的更改。安全属性文件是指JRE的lib/security目录中的java.security 文件。
下面是在java.security 中设置的Policy实现类的形式:
policy.provider=PolicyClassName
PolicyClassName必须用其Policy实现类的完整名称。默认的是设置为系统的Policy的缺省实现类,即sun.security.provider.PolicyFile,如下:
policy.provider=sun.security.provider.PolicyFile
要想自定义安全属性文件项,可通过更改属性值来指定另一个类,如下例所示:
policy.provider=com.mycom.MyPolicy
相关文章推荐
- JAVA策略文件简介(中)
- JAVA策略文件简介(下)
- java之jvm学习笔记九(策略文件)
- 使用Policy文件来设置Java的安全策略
- java socket安全策略文件
- java class文件简介
- 使用Policy文件来设置Java的安全策略
- java常用工具文件简介
- JAVA中JCE策略文件替换
- Java 密码扩展无限制权限策略文件[转]
- java中对struts中token的使用方法以及jvm学习--策略文件简述
- Java中进行文件读写的基本策略
- 企业内部网中使用Policy文件来设置Java的安全策略
- 无论是php java后台服务器在域名的根目录添加 crossdomian.xml文件实现flash 安全策略,从而实现通讯
- Java 密码扩展无限制权限策略文件
- 企业内部网中使用Policy文件来设置Java的安全策略
- OWNER:Java配置文件解决方案 使用简介
- Java 密码扩展无限制权限策略文件
- 配置 Java 2 安全策略文件
- Java 密码扩展无限制权限策略文件