Ubuntu Java安全设置指南
sudo apt update && sudo apt upgrade更新Ubuntu系统及Java运行时环境(JRE/JDK),修补已知安全漏洞。安装OpenJDK(推荐):sudo apt install openjdk-11-jdk,并通过java -version验证安装。/usr/lib/jvm/java-<version>/lib/security/java.security(如java-11-openjdk-amd64),修改需谨慎(会影响所有Java应用);/path/to/project/myapp.policy,添加规则(如授予特定目录所有权限):grant codeBase "file:/path/to/your/project/-" {
permission java.security.AllPermission;
};
-Djava.security.policy指定策略文件路径:java -Djava.security.policy=/path/to/myapp.policy -jar your-app.jar。sudo ufw enable
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status # 验证规则
/etc/ssh/sshd_config,设置PermitRootLogin no(禁用root远程登录)、PasswordAuthentication no(禁用密码认证,使用密钥认证),重启SSH服务:sudo systemctl restart sshd。System.setSecurityManager(new SecurityManager())限制应用权限,配合策略文件控制文件、网络、系统资源访问。示例代码:public class TestSecurity {
public static void main(String[] args) {
System.setSecurityManager(new SecurityManager());
System.out.println("SecurityManager已启用");
}
}
public class User {
@Email(message = "邮箱格式无效")
private String email;
// getter/setter
}
SafeObjectInputStream封装反序列化操作,限制可加载的类(如仅允许java.util.ArrayList)。示例代码:public class SafeInputStream extends ObjectInputStream {
private static final String[] SAFE_CLASSES = {"java.util.ArrayList"};
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
for (String safeClass : SAFE_CLASSES) {
if (desc.getName().startsWith(safeClass)) {
return super.resolveClass(desc);
}
}
throw new SecurityException("禁止加载敏感类: " + desc.getName());
}
}
mvn org.owasp:dependency-check-maven:check
集成到CI流水线,及时修复高危漏洞(如Log4j、Fastjson漏洞)。/etc/apparmor.d/usr.bin.java可限制Java对/tmp、/home等目录的访问。sudo systemctl stop ftp
sudo systemctl disable ftp
rsync或duplicity工具备份Java应用代码、数据库及配置文件,防止数据丢失。logwatch或fail2ban监控/var/log/auth.log(认证日志)、/var/log/syslog(系统日志),及时发现暴力破解、未授权访问等异常行为。示例fail2ban配置:sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local # 启用sshd jail
sudo systemctl restart fail2ban