Java安全策略限制RuntimePermission exitVM

时间:2014-10-22 16:56:03

标签: java security jvm

我想限制我的JVM通过策略文件退出vm,但它不起作用。你能帮助我如何在java.io.RuntimePermission中重写访问权限吗?

grant {
    permission java.io.RuntimePermission "exitVM", "none";
};

1 个答案:

答案 0 :(得分:1)

查看RuntimePermission的javodoc:

  

此类用于运行时权限。 RuntimePermission包含一个   name(也称为"目标名称")但没有动作列表;您   要么拥有指定的权限,要么就是没有。

因此,"无"您的权限设置中的操作不正确。

关于exitVM权限:

  

权限目标名称:exitVM。{退出状态}

     

权限允许:暂停具有指定退出状态的Java虚拟机

     

允许此权限的风险:这允许攻击者通过自动强制虚拟攻击来发起拒绝服务攻击   机停了。注意:" exitVM。"权限是自动的   因此,授予从应用程序类路径加载的所有代码   使应用程序能够自行终止。此外," exitVM"   权限等同于" exitVM。"。

因此,权限名称的有效语法是" exitVM"," exitVM。*"," exitVM.n" (其中n表示退出代码)。

问题在于,正如文档中所述, " exitVM。*"权限自动授予从应用程序类路径 加载的所有代码。因此,如果调用System.exit(...)的代码位于java命令行中设置的主类路径中,则无法阻止它工作。例如,如果调用System.exit(...)的代码是从单独的类加载器加载的,那么就不会出现这种情况。

另请注意,grant语句用于授予权限,而不是拒绝权限。据此,唯一可以否认" exitVM"权限是永远不会授予它