CentOS 上配置 Java 安全策略
一 前置准备
二 配置方式与常用权限示例
// 仅允许应用 JAR 读取自身目录
grant codeBase "file:/opt/app/lib/myapp.jar" {
permission java.io.FilePermission "/opt/app/conf/-", "read";
permission java.io.FilePermission "/opt/app/logs", "read,write";
permission java.util.PropertyPermission "file.encoding", "read";
};
// 允许本机回环访问指定端口(示例:应用监听 8080)
grant {
permission java.net.SocketPermission "localhost:8080", "listen,accept";
permission java.net.SocketPermission "127.0.0.1:8080", "listen,accept";
};
java -Djava.security.manager \
-Djava.security.policy=/opt/app/myapp.policy \
-jar /opt/app/lib/myapp.jar
说明:如不显式启用安全管理器(即不写 -Djava.security.manager),自定义策略不会生效。三 典型场景与命令示例
grant codeBase "file:/opt/app/lib/myapp.jar" {
permission java.io.FilePermission "/opt/app/conf", "read";
permission java.io.FilePermission "/opt/app/data", "read,write";
permission java.util.PropertyPermission "user.dir", "read";
};
grant {
permission java.net.SocketPermission "localhost:8080", "listen,accept";
permission java.net.SocketPermission "127.0.0.1:8080", "listen,accept";
};
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
jstatd -J-Djava.security.policy=$JAVA_HOME/bin/jstatd.all.policy \
-J-Djava.rmi.server.hostname=xxx.xx.xx.xx
提示:生产环境不建议对监控授予 AllPermission,应按需最小化授权。四 排错与加固建议