当前位置: 首页 > news >正文

JMX 和 JAAS 认证

JMX(Java Management Extensions)认证主要用于保护 JMX 远程管理接口,防止未经授权的访问。在 Java 应用程序中启用 JMX 远程访问时,可以使用用户名/密码认证SSL/TLS 加密来增强安全性。

JMX

1. 启用 JMX 远程管理

JAVA_OPTSJAVA_TOOL_OPTIONS 中添加以下 JVM 选项,启用 JMX 远程管理:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Djava.rmi.server.hostname=127.0.0.1
  • jmxremote.port=9000:JMX 监听的端口
  • jmxremote.ssl=false:禁用 SSL(生产环境建议开启)
  • jmxremote.authenticate=true:启用认证
  • java.rmi.server.hostname=127.0.0.1:指定访问 JMX 的主机

2. 配置 JMX 认证

JMX 认证通过 jmxremote.accessjmxremote.password 文件管理权限和用户密码。

(1) 配置 jmxremote.access(访问权限)

创建或修改 $JAVA_HOME/lib/management/jmxremote.access 文件,配置用户权限:

monitorRole readonly
controlRole readwrite
adminRole readwrite
  • readonly:仅可读取 JMX 信息
  • readwrite:可读取和修改 JMX 属性

(2) 配置 jmxremote.password(用户名和密码)

创建或修改 $JAVA_HOME/lib/management/jmxremote.password 文件:

monitorRole monitor123
controlRole control123
adminRole admin123

⚠️ 注意:

  • 该文件必须设置严格的权限,否则 JMX 不会启用认证:
    chmod 600 $JAVA_HOME/lib/management/jmxremote.password
    
  • 不建议在生产环境使用明文密码,推荐基于 JAAS 进行更安全的认证机制。

3. 启用 SSL(可选,增强安全性)

如果希望启用 SSL 保护 JMX 连接,可以增加以下 JVM 选项:

-Dcom.sun.management.jmxremote.ssl=true
-Dcom.sun.management.jmxremote.registry.ssl=true
-Djavax.net.ssl.keyStore=/path/to/keystore.jks
-Djavax.net.ssl.keyStorePassword=yourpassword

这样 JMX 只能通过 SSL 加密的方式访问,防止中间人攻击。

4. 连接 JMX

JConsoleVisualVM 连接 JMX 时,需要提供认证信息:

service:jmx:rmi:///jndi/rmi://127.0.0.1:9000/jmxrmi

输入 controlRole / control123 进行访问。

5. 生产环境建议

  • 强制认证:必须开启 jmxremote.authenticate=true
  • 使用 SSL:避免明文传输敏感信息
  • 限制 IP 访问:使用 iptablesfirewalld 允许特定 IP 访问 JMX 端口
  • 不暴露到公网:尽量限制 JMX 端口仅允许内网访问

总结

JMX 认证主要涉及 用户名/密码SSL 加密 两个方面。推荐在生产环境中启用 SSL,并仅允许受信任的 IP 访问,以防止 JMX 端口被攻击。

JAAS

JAAS(Java 认证与授权服务,全称 Java Authentication and Authorization Service)是 Java 提供的一套 认证(Authentication)和授权(Authorization) 机制,基于 Pluggable Authentication Module(PAM) 设计,可扩展支持多种身份认证方式,如 用户名/密码、Kerberos、LDAP、OAuth 等。

JAAS 主要用于:

  1. 认证(Authentication):验证用户身份,例如用户名和密码匹配。
  2. 授权(Authorization):控制用户对系统资源的访问权限。

JAAS 的核心组件

JAAS 由以下核心组件组成:

1. LoginModule(认证模块)

  • LoginModule 负责实现具体的身份认证方式,如数据库、LDAP、Kerberos 等。
  • Java 允许在 jaas.config 配置文件中定义多个 LoginModule,并支持级联认证。

2. Subject(主体)

  • Subject 代表被认证的用户,包括身份信息(Principal)和安全凭证(Credentials)。
  • Subject 可以携带多个 Principal(例如用户 ID、角色等)。

3. Principal(主体标识)

  • Principal 表示用户的身份,如用户名或角色信息。

4. Policy(权限策略)

  • Policy 定义用户或角色的权限,类似于 Java 的 SecurityManager 机制。

JAAS 认证流程

  1. 创建 LoginContext 对象
    • LoginContext 负责管理认证流程,它会根据 jaas.config 配置文件加载 LoginModule 进行身份验证。
  2. 调用 login() 方法进行认证
    • LoginContext 调用 login(),触发 LoginModule 进行用户身份验证。
  3. 认证成功后获取 Subject
    • 认证通过后,LoginContext 会返回 Subject,包含用户身份信息和凭证。
  4. 执行授权操作
    • 使用 Subject.doAs() 以认证用户的身份执行某些操作,或进行权限验证。

示例:使用 JAAS 进行 JMX 认证

如果你希望使用 JAAS 代替默认的 jmxremote.password 文件 进行 JMX 认证,可以按照以下步骤操作。

1. 配置 jaas.config 文件

首先,在 $JAVA_HOME/lib/security/ 目录下创建 jmxjaas.config 文件:

JMXLogin {
    com.sun.security.auth.module.FileLoginModule required
    debug=true
    userFile="/etc/jmx/jmx_users.txt";
};
  • FileLoginModule:JAAS 内置的认证模块,从文件中读取用户名和密码。
  • userFile:存储用户名和密码的文件路径。

2. 创建用户认证文件 /etc/jmx/jmx_users.txt

文件内容格式:

admin admin123
monitor monitor123

⚠️ 确保文件权限

chmod 600 /etc/jmx/jmx_users.txt

3. 配置 JVM 选项

在 Java 进程启动时,添加以下 JVM 选项:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.login.config=JMXLogin
-Djava.security.auth.login.config=/path/to/jmxjaas.config
  • com.sun.management.jmxremote.login.config=JMXLogin:指定 JAAS 认证配置。
  • java.security.auth.login.config=/path/to/jmxjaas.config:指定 JAAS 配置文件路径。

4. 连接 JMX

JConsoleVisualVM 连接 JMX 时,需要输入 admin/admin123 进行身份认证。

JAAS 适用场景

  • JMX 认证(如上所述,使用 JAAS 代替 jmxremote.password)。
  • Web 应用认证(如 Tomcat、Spring Security 可集成 JAAS)。
  • LDAP/Kerberos 认证(企业级安全认证)。
  • Java 应用访问安全资源(如文件、数据库等)。

总结

JAAS 提供了一种可插拔的身份认证和授权机制,可以用于 JMX、Web 认证、LDAP/Kerberos 认证 等场景。在 JMX 认证中,JAAS 可以替代默认的 jmxremote.password 机制,使认证更加灵活和安全。

相关文章:

  • 【数据结构】栈和队列
  • 【NLP】 9. 处理创造性词汇 词组特征(Creative Words Features Model), 词袋模型处理未知词,模型得分
  • 3.4 基于TSX的渲染函数类型安全实践
  • Java中的I/O
  • Hive函数大全:从核心内置函数到自定义UDF实战指南(附详细案例与总结)
  • Python中的unittest库
  • Java 并发编程——BIO NIO AIO 概念
  • C语言:基于数组实现栈
  • 如何打包数据库mysql数据,并上传到虚拟机上进行部署?
  • pandas表格内容比较
  • 数据链路层协议
  • 共享内存通信效率碾压管道?System V IPC原理与性能实测
  • 求和23年蓝桥杯省赛
  • go程序运行Spaitalite踩坑记录
  • discuz门户文章允许游客评论
  • 爱普生 SG-8200CG可编程晶振在智能手表的应用
  • pyroSAR:开源的SAR数据处理与分析工具
  • Android Framework 之了解系统启动流程二
  • Java构造方法详解:从入门到实战
  • 数据结构篇——线性表
  • 复旦建校120周年大型义诊举行,百余名专家服务市民超三千人次
  • 外企聊营商|上海仲裁:化解跨国企业纠纷的“上海路径”
  • 精品消费“精”在哪?多在体验上下功夫
  • 沃尔玛上财季净利下滑12%:关税带来成本压力,新财季价格涨幅将高于去年
  • 再现五千多年前“古国时代”:凌家滩遗址博物馆今开馆
  • 证监会发布《上市公司募集资金监管规则》,6月15日起施行