1. 安装Java环境
在Debian系统中,优先使用OpenJDK(官方支持的免费Java实现)。通过以下命令安装指定版本(如OpenJDK 17):
sudo apt update
sudo apt install openjdk-17-jdk
安装完成后,验证Java版本以确保安装成功:
java -version
若需管理多个Java版本,可使用update-alternatives命令切换默认版本:
sudo update-alternatives --config java
2. 配置Java安全策略文件
Java安全策略文件用于定义应用程序的权限边界,默认路径为$JAVA_HOME/lib/security/java.policy(如OpenJDK 17的路径为/etc/java-17-openjdk/security/java.policy)。
nano)打开文件,添加自定义规则。例如,授予特定目录读写权限:grant {
permission java.io.FilePermission "/opt/myapp/data/-", "read,write";
};
注意:生产环境中应遵循最小权限原则,避免使用
grant { permission java.security.AllPermission; };(授予所有权限,仅用于测试)。
-Djava.security.policy参数指定策略文件路径:java -Djava.security.policy=/etc/java-17-openjdk/security/java.policy -jar your-application.jar
或通过系统环境变量JAVA_OPTS全局配置:export JAVA_OPTS="-Djava.security.policy=/etc/java-17-openjdk/security/java.policy"
java $JAVA_OPTS -jar your-application.jar
3. 系统级安全加固(基础防护)
sudo apt update && sudo apt upgrade -y
ufw(Uncomplicated Firewall)限制入站流量,仅允许必要端口(如SSH的22端口、HTTP的80端口、HTTPS的443端口):sudo apt install ufw -y
sudo ufw enable
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw deny all # 拒绝其他所有入站流量
systemctl命令停止并禁用未使用的服务(如FTP、Telnet),减少攻击面:sudo systemctl stop ftp
sudo systemctl disable ftp
libpam-pwquality模块,编辑/etc/security/pwquality.conf文件,设置密码复杂度要求(如最小长度8位、包含数字、大小写字母和特殊字符):sudo apt install libpam-pwquality -y
sudo nano /etc/security/pwquality.conf
# 修改以下参数(示例)
minlen = 8
dcredit = -1 # 至少1个数字
ucredit = -1 # 至少1个大写字母
lcredit = -1 # 至少1个小写字母
ocredit = -1 # 至少1个特殊字符
sudo组,通过sudo执行管理员操作,避免直接登录root:sudo adduser devuser # 创建用户
sudo usermod -aG sudo devuser # 加入sudo组
/etc/ssh/sshd_config文件,修改以下配置以增强SSH安全性:sudo nano /etc/ssh/sshd_config
# 修改以下参数
Port 2222 # 更改默认SSH端口(避免扫描攻击)
PermitRootLogin no # 禁止root远程登录
PasswordAuthentication no # 禁用密码登录(仅允许密钥登录)
生成SSH密钥对并将公钥添加到服务器:ssh-keygen -t rsa -b 4096 # 生成密钥对(客户端执行)
ssh-copy-id devuser@your_server_ip # 复制公钥到服务器
重启SSH服务使配置生效:sudo systemctl restart sshd
4. Java应用层安全配置
@Valid注解结合正则表达式验证输入:@PostMapping("/login")
public ResponseEntity<?> login(@Valid @RequestBody LoginDTO dto) {
if (!dto.getUsername().matches("[a-zA-Z0-9_]{4,16}")) {
throw new IllegalArgumentException("用户名包含非法字符");
}
// 其他业务逻辑
}
[[${variable}]]语法(自动编码):<p th:text="${userInput}">Default text</p>
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.headers()
.contentSecurityPolicy("default-src 'self'; script-src 'self' cdn.example.com; style-src 'self' fonts.googleapis.com")
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.requiresChannel()
.anyRequest()
.requiresSecure(); // 强制使用HTTPS
}
}
application.properties中使用加密后的值:db.password=ENC(加密后的密码)
需在应用启动时配置加密密钥。5. 监控与维护
Logwatch或Fail2ban工具自动收集和分析系统日志,及时发现异常行为(如多次登录失败、非法访问)。例如,安装Fail2ban防止SSH暴力破解:sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
lynis等工具进行系统安全审计,识别未修复的漏洞(如过时的软件包、弱配置):sudo apt install lynis -y
sudo lynis audit system
Metasploit或Burp Suite等工具进行渗透测试,模拟攻击者行为,发现并修复潜在的安全漏洞。