1. 确认Java安装与环境准备
首先检查系统是否已安装Java,使用命令java -version查看版本信息。若未安装,可通过Ubuntu包管理器安装OpenJDK(推荐):
sudo apt update
sudo apt install openjdk-11-jdk # 根据需求选择版本(如openjdk-8-jdk、openjdk-17-jdk)
安装完成后,通过echo $JAVA_HOME确认JAVA_HOME环境变量是否指向正确的Java安装路径(通常为/usr/lib/jvm/java-<version>-openjdk-amd64)。
2. 修改系统级Java安全策略文件
Java的安全策略文件存储在$JAVA_HOME/lib/security/java.security(如/usr/lib/jvm/java-11-openjdk-amd64/lib/security/java.security),可通过编辑该文件调整全局安全设置。常见配置项包括:
jdk.certpath.disabledAlgorithms参数,添加或修改为:jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 2048, DSA keySize < 2048(禁用MD2/MD5哈希算法及短密钥长度的RSA/DSA);security.level参数,设置为HIGH(严格模式,限制更多权限)或MEDIUM(默认模式,平衡安全性与兼容性)。3. 创建自定义策略文件(推荐)
为避免影响系统全局配置,建议为特定Java应用创建自定义策略文件(如/path/to/myapp.policy)。使用文本编辑器创建文件并定义权限规则,例如:
sudo nano /home/user/myapp.policy
添加以下内容(允许应用读取/tmp目录、监听本地1024-65535端口):
grant codeBase "file:/home/user/myapp/-" {
permission java.io.FilePermission "/tmp/*", "read,write";
permission java.net.SocketPermission "localhost:1024-", "listen,accept";
};
注:codeBase需指向应用的实际路径(如JAR文件所在目录)。
4. 启动应用时指定策略文件
通过命令行参数将自定义策略文件应用到Java应用,有两种方式:
java -Djava.security.manager -Djava.security.policy=/home/user/myapp.policy -jar /home/user/myapp.jar
其中-Djava.security.manager启用安全管理器,-Djava.security.policy指定策略文件路径;System.setProperty("java.security.policy", "/home/user/myapp.policy")。5. 使用keytool管理密钥库(可选但重要)
若应用涉及SSL/TLS或数字签名,需使用keytool管理密钥和证书。常见操作包括:
keytool -list -v -keystore /path/to/keystore.jks
输入密钥库密码即可查看条目;keytool -genkeypair -alias mydomain -keyalg RSA -keystore /path/to/keystore.jks -keysize 2048
按提示输入信息(如姓名、组织、密码)。6. 强化系统级安全配合
Java安全设置需与系统安全措施结合,进一步提升整体安全性:
sudo apt update && sudo apt upgrade,安装Java最新安全补丁;sudo ufw allow 8080/tcp
sudo ufw enable
/etc/ssh/sshd_config,设置PermitRootLogin no,并使用密钥认证替代密码认证。7. 验证配置有效性
启动Java应用后,可通过以下方式验证安全策略是否生效:
/var/log/syslog或应用自身日志)是否有权限拒绝的错误信息;-Djava.security.debug=all参数启动应用,输出详细的安全决策过程:java -Djava.security.manager -Djava.security.policy=/home/user/myapp.policy -Djava.security.debug=all -jar /home/user/myapp.jar
日志中会显示权限检查的详细结果。