CentOS Java安全设置最佳实践
小樊
44
2025-11-27 17:49:03
CentOS 上 Java 安全设置最佳实践
一 基础环境与系统加固
- 保持系统与 JDK 的及时更新:定期执行系统与安全补丁更新,并优先使用带有长期支持与安全修复的 LTS 版本 JDK,及时修补已知漏洞。
- 最小权限运行:为 Java 应用创建专用的系统账号与组,避免使用 root 直接启动;设置目录与文件的属主与权限,仅授予必要访问。
- 强化网络边界:启用并正确配置 firewalld,仅开放必要端口(如 HTTP/HTTPS 或应用端口),对管理口限制来源网段。
- 启用 SELinux:保持 SELinux enforcing,通过策略与布尔值精细化约束 Java 进程与文件访问,确有冲突时优先调整策略而非直接关闭。
- 远程访问最小化:对 SSH 实施基于密钥的认证、禁用 root 登录、限制可登录用户与来源 IP。
二 JVM 启动参数与加密配置
- 基础安全与稳定性参数示例:
- 使用服务器模式:
-server
- 堆内存:
-Xms 与 -Xmx 设为相同值(如 -Xms2g -Xmx2g),避免运行期扩缩引发停顿
- 熵源优化:
-Djava.security.egd=file:/dev/./urandom(加快启动、降低阻塞)
- 字符集:
-Dfile.encoding=UTF-8
- 远程调试仅限内网:如必须开启,绑定到 127.0.0.1 并使用临时开关,避免对外暴露(生产环境不建议长期开启)。
- 精细权限控制:在需要沙箱隔离的场景启用 Java Security Manager 并配套策略文件;对高并发服务评估其对性能的影响。
- 加密套件与协议:在 JSSE 或框架(如 Tomcat/Spring Boot)中限制为 TLS 1.2+,禁用 SSLv3/TLS1.0/TLS1.1 与弱哈希(如 MD5/SHA-1),优先使用 AES-GCM 等 AEAD 套件。
三 应用服务器安全配置要点
- 禁用目录浏览:在 Web 容器(如 Tomcat)中关闭目录列表,防止敏感文件泄露。
- 管理接口访问控制:限制管理应用的访问来源 IP;使用强口令或基于角色的访问控制(RBAC),及时移除默认账户与示例应用。
- 示例(Tomcat,仅示意):在应用的 web.xml 中对
/* 的 GET 方法配置空的 <auth-constraint/> 以禁用目录列表;在 tomcat-users.xml 中仅保留必要角色与强口令。
- 运行身份隔离:以专用低权限用户运行应用进程,文件与目录权限最小化,日志目录仅对运行用户可写。
四 文件与权限最小化实践
- 专用系统账号与权限:
- 创建账号与组:
sudo groupadd java_app_group && sudo useradd -g java_app_group java_app_user
- 设置属主属组:
sudo chown -R java_app_user:java_app_group /opt/myapp
- 目录与文件权限:
sudo chmod -R 750 /opt/myapp(目录),可执行文件按需设置 755,敏感配置 600
- 策略文件权限:自定义 .policy 文件权限设为 600,仅对运行用户可读写。
- SELinux 细粒度控制:保持 SELinux enforcing,必要时为应用目录与进程设置合适的类型/布尔值,避免直接改为 permissive/disabled。
五 安全策略与持续运维
- Java 安全管理器与策略文件:
- 创建策略文件(示例路径 /opt/myapp/security.policy),仅授予必要权限,避免过度授权(如
<<ALL FILES>>、exec.*)。
- 启动参数启用:
-Djava.security.manager -Djava.security.policy=/opt/myapp/security.policy
- 系统级策略:必要时在 /etc/java--openjdk/security/java.security 调整全局策略,变更后重启应用生效。
- 网络访问控制:通过 firewalld 仅开放业务端口(如 8080/8443),对管理端口限制来源;变更后执行
firewall-cmd --reload。
- 持续更新与审计:定期更新 Java/JDK 与应用依赖,监控与审计访问日志、应用日志与系统安全事件,形成变更与漏洞修复闭环。