2017-08-01 158 views
0

我啓用了java安全性,以授予駐留在/ tmp文件夾中的文件夾的文件權限。 下面是授權文件策略文件中的Java安全授權權限

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因此,其努力執行與文件權限的其他部分。如果此抽象路徑名是

回答

0

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

File.isAbsolute()方法返回true 絕對的,否則爲false

從您的許可,命令我猜你使用的是基於UNIX系統來看,因此,絕對路徑名的含義與此相關:

在UNIX系統上,如果路徑名的前綴爲「/」,則路徑名爲絕對路徑名

這意味着傳遞給checkExec函數的cmd String變量的前綴不是「/」(第一個字符不是'/'),因此f.isAbsolute返回false。

+0

我在路徑中添加了前綴「/」,但它仍然返回相同的文件權限問題。 – Anish

0

ProcessBuilder工作正常,我添加了/ usr/bin權限,它的工作。