策略文件中的Java安全授予权限

时间:2017-08-01 13:48:48

标签: java security content-security-policy

我启用了java安全性,以授予驻留在/ tmp文件夹中的文件夹的文件权限。 以下是授权文件中添加的权限

permission "java.io.FilePermission" "/tmp/tmpScript/-", "read, write, delete, execute";

但是在执行应用程序时,抛出了异常 -

java.security.AccessControlException: access denied ("java.io.FilePermission" "<<ALL FILES>>" "execute")

我使用ProcessBuilder执行脚本,并在ProcessBuilder构造函数文件中传递绝对路径和参数。 但是看一下Java源代码

public void checkExec(String cmd) {
        File f = new File(cmd);
        if (f.isAbsolute()) {
            checkPermission(new FilePermission(cmd,
                SecurityConstants.FILE_EXECUTE_ACTION));
        } else {
            checkPermission(new FilePermission("<<ALL FILES>>",
                SecurityConstants.FILE_EXECUTE_ACTION));
        }
    }

不确定为什么f.isAbsolute()返回false,因此它试图以文件权限执行else部分。

2 个答案:

答案 0 :(得分:0)

https://docs.oracle.com/javase/7/docs/api/java/io/File.html#isAbsolute()

  

如果此抽象路径名是,则File.isAbsolute()方法返回true   绝对的,否则是假的

根据您的权限命令判断我猜你使用的是基于UNIX的系统,因此绝对路径名含义与此相关:

  

在UNIX系统上,如果路径名的前缀为“/”

,则路径名是绝对路径

这意味着传递给checkExec函数的cmd String变量,前缀不是“/”(第一个字符不是'/'),因此f.isAbsolute返回false。

答案 1 :(得分:0)

ProcessBuilder工作正常,我添加了/ usr / bin权限并且它有效。