优先使用Ubuntu官方仓库的OpenJDK(自动接收安全更新),通过以下命令安装最新稳定版(以OpenJDK 11为例):
sudo apt update && sudo apt install openjdk-11-jdk
安装完成后,验证版本以确认安装成功:
java -version # 查看Java运行时版本
javac -version # 查看Java编译器版本
编辑~/.bashrc文件(用户级)或/etc/environment文件(系统级),添加以下内容(根据实际安装路径调整):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 替换为实际路径
export PATH=$JAVA_HOME/bin:$PATH
保存后执行source ~/.bashrc使变量生效,通过echo $JAVA_HOME验证配置是否正确。
定期通过sudo apt update && sudo apt upgrade命令更新Java,确保获取最新的安全补丁(如修复远程代码执行、内存泄漏等漏洞)。若需安装特定版本,可从Oracle官网下载tar.gz包手动安装:
sudo tar -zxvf jdk-11.0.xx-linux-x64.tar.gz -C /opt # 解压至/opt目录
sudo nano /etc/environment # 添加JAVA_HOME路径
Java的安全策略文件(java.security)定义了默认的权限控制,路径为/etc/java-<version>/security/java.security(如/etc/java-11-security/java.security)。
关键配置项:
jdk.certpath.disabledAlgorithms参数,添加不安全的算法(如MD2、MD5、RSA密钥长度<1024位),示例如下:jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, DSA keySize < 1024
-Djava.security.manager),需通过自定义策略文件(如myapp.policy)明确授予应用所需权限(如文件读写、网络访问),避免过度授权。keytool是Java自带的证书管理工具,用于生成密钥对、导入/导出证书。常见操作:
~/.keystore):keytool -list -v -keystore ~/.keystore
mykey):keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -validity 365 -keystore /path/to/keystore.jks
keytool -exportcert -alias mykey -file mykey.crt -keystore /path/to/keystore.jks
使用ufw(Uncomplicated Firewall)限制外部对Java应用的访问,仅开放必要端口(如HTTP 8080、HTTPS 8443):
sudo ufw allow 8080/tcp # 允许HTTP流量
sudo ufw allow 8443/tcp # 允许HTTPS流量
sudo ufw enable # 启用防火墙
sudo ufw status # 查看规则状态
/etc/ssh/sshd_config,设置以下参数:Port 2222 # 更改默认SSH端口(避免扫描攻击)
PermitRootLogin no # 禁止root远程登录
PasswordAuthentication no # 禁用密码登录(使用密钥认证)
重启SSH服务使配置生效:sudo systemctl restart sshd。/etc/pam.d/common-password文件设置密码复杂度(如最小长度8位、包含大小写字母、数字和特殊字符)。若部署Tomcat等Web容器,需修改其配置文件(如server.xml)增强安全性:
server.xml中配置SSL连接器,指定证书路径:<Connector port="8444" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/path/to/keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
web.xml中配置角色-based访问控制(RBAC),限制敏感资源(如/admin)的访问权限:<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Pages</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>
对于企业级应用,建议使用安全框架简化安全配置:
除了更新Java本身,还需定期更新系统库(如apt update && apt upgrade)和应用依赖(如Maven/Gradle项目中的第三方库),修复已知漏洞。
jps命令查看运行中的Java进程ID,使用jstack分析线程堆栈,jmap查看内存使用情况。chroot或namespaces限制Java应用只能访问特定目录(如/opt/myapp),避免越权访问系统文件。java.security文件中禁用相关模块,减少攻击面。