2017-08-01 16 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()メソッドこの抽象パス名が、私はあなたがUNIXベースのシステムを使用している推測していますあなたの許可コマンドから判断

そうでない場合は、絶対偽

である場合はtrueを返し、したがって、絶対パス名の意味は次のようになります。

UNIXシステムでは、接頭辞が "/"の場合は絶対パス名になります。

これはCMD文字列変数は、それがてcheckExec関数に渡されることを意味し、接頭辞がない「/」、それゆえf.isAbsoluteはfalseを返します(最初の文字は「/」ではありません)。

+0

パスに「/」という接頭辞が追加されていますが、引き続き同じファイルのアクセス権の問題が返されています。 – Anish

0

ProcessBuilderは正常に動作し、私は/ usr/binパーミッションを追加しました。