温馨提示×

如何确保CentOS Java配置的安全性

小樊
32
2026-01-02 01:55:21
栏目: 编程语言

CentOS 上 Java 配置的安全基线

一 基础加固

  • 使用 LTS 版本(如 OpenJDK 11/17),通过系统包管理器安装并统一版本,避免混装。
  • 清理旧版本与残留:用 alternatives 查看与切换默认 Java,对不再使用的版本执行 yum remove 并清理安装目录,随后更新 JAVA_HOME/PATH 指向新版本,避免被旧版组件误用。
  • 运行身份最小化:为应用创建专用系统用户与组,仅授予必要权限;应用目录建议权限 750,属主属组指向该专用用户,减少被其他进程篡改的风险。
  • 环境变量安全:优先在应用启动脚本或 systemd 服务中设置 JAVA_HOMEPATH,避免写入全局 /etc/profile 影响所有用户;必要时限制可写范围与继承关系。

二 权限与访问控制

  • 启用 Java 安全管理器(SecurityManager) 并配套最小权限策略文件(java.policy)。示例策略仅授予应用目录只读:
    • 策略文件片段:
      grant codeBase "file:/opt/myapp/-" {
          permission java.io.FilePermission "/opt/myapp/conf/*", "read";
          permission java.util.PropertyPermission "file.encoding", "read";
          permission java.lang.RuntimePermission "getenv.*";
      };
      
    • 启动参数:
      java -Djava.security.manager -Djava.security.policy=/opt/myapp/security.policy -jar /opt/myapp/app.jar
      
    • 注意:从 JDK 17 起部分发行版默认不再内置 SecurityManager,需评估是否改用容器/沙箱/进程隔离等替代方案。
  • 强化 SELinux:保持 SELINUX=enforcing,为应用目录设置合适类型(如 httpd_exec_t 用于 web 组件,或自定义策略),避免直接 chcon -t java_home_t 这类不严谨做法;变更后用 restorecon -Rsemanage fcontext 持久化。
  • 网络访问控制:仅开放必要端口,使用 firewalld 精细化放行。例如仅放行 8080/tcp
    sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
    sudo firewall-cmd --reload
    
    对内网服务可进一步结合 zonesource 限制来源网段。

三 运行环境与加密

  • 熵源与启动性能:在 $JAVA_HOME/jre/lib/security/java.security 中将 securerandom.source=file:/dev/urandom(或 file:/dev/./urandom 兼容写法)以避免阻塞,提升启动稳定性与安全性(注意这是可用性与安全性的权衡)。
  • 加密协议与算法:在 java.security 中禁用不安全套件与协议(示例思路)
    • 禁用弱 TLS 版本与匿名套件:
      jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA
      
    • 视应用需要启用 FIPS 140-2 模式或限定 TLSv1.2+ 与强哈希/密钥交换算法。
  • 内存与 GC 调优:为服务进程设置内存上限(如 -Xmx)、开启 Metaspace 限制(如 -XX:MaxMetaspaceSize),减少被 OOM 攻击或资源耗尽的风险;结合 GC 日志与监控告警建立容量基线。

四 部署与运维

  • systemd 托管应用,使用专用用户运行,声明 WorkingDirectoryExecStartRestart=on-failure,并通过 ReadOnlyDirectoriesProtectHomePrivateTmp 等隔离选项降低攻击面;日志写入 journald 或受限目录。
  • 制品与依赖可信:仅从可信仓库获取 JDK/依赖库,对 JAR/WAR签名校验哈希校验;上线前在隔离环境进行 SAST/DAST 与依赖漏洞扫描(如 OWASP Dependency-Check)。
  • 变更与回滚:版本升级采用 蓝绿/金丝雀 发布;保留最近 2–3 个可回滚版本与配置快照;变更窗口外禁止远程调试与 JMX 暴露。
  • 审计与监控:开启 auditd 记录关键文件与进程事件;采集 JVM GC/线程/内存系统资源 指标并设置阈值告警;定期复盘 /var/log/securejournald 中的异常登录与权限变更。

0