Javaのセキュリティ関連の設定を上書きしたい

TL;DR

  • Javaのセキュリティ関連の設定が /etc/java-8-openjdk/security/java.policy などに有る場合がある
  • 実行時に-Djava.security.properties=<URL> を渡すとマスターファイルから特定のプロパティを上書きできる

Javaのセキュリティ管理の設定ファイルで java.policy というファイルがある。

特定の値を上書きしたいケースがある。

例えば networkaddress.cache.ttlnetworkaddress.cache.negative.ttl のキャッシュの設定を上書きしたい

/etc/java-8-openjdk/ 下の設定ファイルは debパッケージのインストールなどで上書きされるので、できるだけ /etc/java-8-openjdk/security/java.policy は編集したくない。

調べたところ、 実行時に-Djava.security.properties=<URL>/etc/java-8-openjdk 下の設定ファイルの内容を特定のプロパティのみ上書きできる。

class Main {
  public static void main(String args[]){
    System.out.println(java.security.Security.getProperty("networkaddress.cache.ttl"));
    System.out.println(java.security.Security.getProperty("networkaddress.cache.negative.ttl"));
  }
}

java.securityはpropertiesファイル形式

networkaddress.cache.ttl = 1
networkaddress.cache.nagative.ttl = 1

javacでコンパイル後、次のように確認できる

$ java Main
null
10
java -Djava.security.properties=./java.security Main  
1
1