1. 安装Java开发工具包(JDK)
在Debian系统中,优先使用OpenJDK(官方支持的免费实现)作为Java运行环境。通过以下命令安装指定版本(如OpenJDK 17,可根据需求替换为11、8等):
sudo apt update
sudo apt install openjdk-17-jdk
安装完成后,通过java -version命令验证安装是否成功,输出应包含Java版本信息。
2. 配置Java环境变量
为方便全局使用Java命令,需设置JAVA_HOME(JDK安装路径)和PATH(可执行文件路径)。编辑/etc/profile文件,添加以下内容(根据实际JDK版本调整路径):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
保存后,运行source /etc/profile使配置立即生效。
3. 管理多个Java版本(可选)
若系统中安装了多个Java版本,可使用update-alternatives工具切换默认版本。例如,查看已安装的Java版本:
sudo update-alternatives --config java
根据提示选择对应的版本编号,即可完成默认Java版本的切换。
4. 配置Java安全策略文件
Java安全策略文件用于定义应用程序的权限(如文件访问、网络连接等)。默认路径为$JAVA_HOME/lib/security/java.policy(如OpenJDK 17的路径为/etc/java-17-openjdk/security/java.policy)。
sudo nano /etc/java-17-openjdk/security/java.policy
grant {
permission java.io.FilePermission "/opt/myapp/-", "read,write";
permission java.net.SocketPermission "localhost:8080", "connect";
};
grant { permission java.security.AllPermission; };(授予所有权限,仅用于测试)。5. 指定Java应用程序使用自定义策略文件
运行Java程序时,通过-Djava.security.policy参数指定策略文件路径。例如:
java -Djava.security.policy=/etc/java-17-openjdk/security/java.policy -jar your-application.jar
也可通过系统环境变量JAVA_OPTS全局设置(添加到/etc/profile或应用启动脚本中):
export JAVA_OPTS="-Djava.security.policy=/etc/java-17-openjdk/security/java.policy"
之后运行程序时,策略文件会自动生效。
6. 系统级安全加固(基础防护)
sudo apt update && sudo apt upgrade,安装所有可用的安全补丁,修复已知漏洞。systemctl list-unit-files --state=enabled查看已启用的服务,禁用不需要的服务(如FTP、Telnet),减少攻击面。ufw(简单易用)限制入站流量,仅允许必要端口(如SSH的22端口、HTTP的80端口、HTTPS的443端口):sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw enable
libpam-pwquality模块(增强密码复杂度检查),编辑/etc/security/pwquality.conf,设置最小长度(如minlen = 12)、要求包含数字(dcredit = -1)、大小写字母(ucredit = -1)和特殊字符(ocredit = -1)。sudo组(替代直接登录root),例如:sudo adduser newuser
sudo usermod -aG sudo newuser
之后通过sudo命令执行需要root权限的操作。/etc/ssh/sshd_config,修改以下配置:Port 2222 # 更改默认SSH端口(避免暴力破解)
PermitRootLogin no # 禁止root远程登录
PasswordAuthentication no # 禁用密码登录(仅使用SSH密钥)
重启SSH服务使配置生效:sudo systemctl restart sshd。生成SSH密钥对并将公钥添加到~/.ssh/authorized_keys文件中,实现无密码登录。7. Java应用层安全配置(针对Web应用)
@Valid注解和正则表达式校验输入:@PostMapping("/login")
public ResponseEntity login(@Valid @RequestBody LoginDTO dto) {
if (!dto.getUsername().matches("[a-zA-Z0-9_]{4,16}")) {
throw new InvalidParameterException("用户名包含非法字符");
}
// 其他验证逻辑
}
th:text自动编码:<div th:text="${userInput}"></div>
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers()
.contentSecurityPolicy("default-src 'self'; script-src 'self' 'unsafe-inline'") // 限制资源加载来源
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) // 启用CSRF Token
.and()
.requiresChannel()
.anyRequest()
.requiresSecure(); // 强制使用HTTPS
}
}
8. 定期安全审计与监控
/var/log/auth.log)和Java应用日志,识别异常行为(如频繁的登录失败、未授权的文件访问)。Fail2ban自动封禁多次登录失败的IP地址,使用Logwatch生成每日安全报告,及时发现潜在威胁。