在 Debian 中配置 Java 安全策略
一 准备与定位策略文件
sudo apt update && sudo apt install openjdk-11-jdkjava -versionreadlink -f "$(which java)"update-alternatives --list javasudo cp $JAVA_HOME/lib/security/java.policy $JAVA_HOME/lib/security/java.policy.bakcp ~/.java.policy ~/.java.policy.bak 2>/dev/null || true二 编写最小可用的自定义策略
// 允许应用 JAR 读取自身目录与配置目录
grant codeBase "file:/opt/app/lib/app.jar" {
permission java.io.FilePermission "/opt/app/conf/-", "read";
permission java.io.FilePermission "/opt/app/logs", "read,write,delete";
permission java.util.PropertyPermission "app.*", "read";
};
// 仅允许连接本机 8080 端口(示例服务端口)
grant {
permission java.net.SocketPermission "localhost:8080", "connect,resolve";
};
// 可选:控制台输出(便于调试)
grant {
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.io.FilePermission "/tmp", "read,write";
};
codeBase 使用 file: URL,路径结尾的斜杠与通配符 - 含义不同:目录后加 / 表示目录本身,加 - 表示目录及其子项。FilePermission、SocketPermission、PropertyPermission、RuntimePermission。三 启用安全管理器并加载自定义策略
java \
-Djava.security.manager \
-Djava.security.policy=/opt/app/policy/custom.policy \
-jar /opt/app/lib/app.jar
==:"-Djava.security.policy==/opt/app/policy/custom.policy"(等号表示仅用该文件,不合并默认策略)。System.setProperty("java.security.policy", "file:/opt/app/policy/custom.policy");
System.setSecurityManager(new SecurityManager());
四 验证与排错
readlink -f 确认);目录权限请使用 /path/- 包含子项。== 覆盖默认策略)。Policy.getPolicy().refresh() 后需确保安全管理器已安装。-Djava.security.debug=access,failure五 生产实践与加固建议
grant { permission java.security.AllPermission; };。