保护JMX并防止远程客户端使用javax.management.loading.MLet注册任意MBean JMX

保护JMX并防止远程客户端使用javax.management.loading.MLet注册任意MBean JMX,java,jmx,mbeans,java-security,Java,Jmx,Mbeans,Java Security,上下文:在我们的场景中,我们不传递com.sun.management.jmxremote.port,因此我们只为本地监控运行JMX。 为了从客户端(称为y)远程监视prod主机(称为x),用户可以从x上的jmx服务端口创建ssh数据包转发(假设y的用户可以访问x上为jmx服务的公共端口) 如果我错了,请纠正我:由于用户可以访问X上的JMX服务端口,我假设这也让y上的用户能够使用javax.management.load.MLet在prod主机X上执行任意代码 从Orcales文档中可以安全地说

上下文:在我们的场景中,我们不传递
com.sun.management.jmxremote.port
,因此我们只为本地监控运行JMX。 为了从客户端(称为y)远程监视prod主机(称为x),用户可以从x上的jmx服务端口创建ssh数据包转发(假设y的用户可以访问x上为jmx服务的公共端口)

如果我错了,请纠正我:由于用户可以访问X上的JMX服务端口,我假设这也让y上的用户能够使用
javax.management.load.MLet
在prod主机X上执行任意代码

从Orcales文档中可以安全地说,如果我们对配置使用密码身份验证

com.sun.management.jmxremote.authenticate=true
com.sun.management.jmxremote.ssl=true
这是否使JMX访问安全,也就是说,用户将不能使用
javax.management.loading.MLet
在prod host x上执行代码,即使他们可以访问其上的JMX服务端口,这是否安全


关于保护JMX有什么更好的建议吗?

这是正确的,但请记住,除非用户拥有正确的凭据,否则他们将无法访问JMX服务。换句话说,您不仅阻止了MLet注册,还阻止了一切。您还应该仔细选择您的身份验证方法。如果使用属性文件,则具有文件系统SSH访问权限的用户可能能够获取凭据。

谢谢。在不启用SSL的情况下,这一切都能正常工作吗?我的意思是,仅仅使用密码身份验证也可以防止用户注册任意MBean?是的。SSL将确保不会欺骗呼叫者的凭据,并且飞行中的数据是加密的。使用JMX打开的RMI注册表端口如何,它仍然会保持公开状态?如果没有SSL,您仍然可以利用该端口进行攻击,尽管您知道通过该端口公开了哪些数据吗?RMI端口将提供远程存根以连接到jmx,但仍需要凭据才能发出jmx操作。但是不能使用此RMI端口获取这些凭据吗?这个RMI端口可以很容易地通过ssh解析到主机上,对吗?如果您不指定
com.sun.management.jmxremote.port
,那么是否有“x上的jmx服务端口”?或者你是说你正在考虑添加一个?