禁用JVM上的本地JMX连接

11
我们正在编写一个Java程序,该程序将密码保存在内存中。不幸的是,用户可以轻易地使用jconsole或jmap创建堆转储文件并打开它以查找密码。我认为jconsole使用本地套接字连接jvm。请问,是否有任何方法可以禁用jmx,即使对于本地用户也是如此?是否有任何方法可以完全禁用堆转储?由于用户可以访问内存段,因此无论如何都可以访问密码。但是,我想禁用标准的操作方式以尽可能增加操作成本。
2个回答

6
最终,我找到了一个禁用jconsole连接的解决方案。这也可以防止jmap创建转储文件。我在这里找到了解决方案。我在这里引用答案:
“您可以通过使用-XX:+DisableAttachMechanism选项运行来防止类似jconsole等工具的连接。请注意,该选项未得到记录/支持,但应该能够实现您想要的功能。话虽如此,即使有了这个选项,也��法阻止您连接gdb或其他基于调试/proc的程序。”
然而,很明显,内存段可以在本地访问。但是,有人知道一种直接访问内存并进行标准内存转储的工具吗?

1
不一定是标准的内存转储格式,但您可以使用例如 HxD 十六进制编辑器(http://mh-nexus.de/en/hxd/)来访问任何本地进程的内存(如果有足够的特权)。 - Grey Panther
1
-XX:+ DisableAttachMechanism 似乎无法禁用JMX。我仍然可以使用jvisualvm连接。你试过了吗? @mohsen - Gaurav Parek

3
将最大连接数设置为零会关闭JMX。
-Dsun.rmi.transport.tcp.maxConnectionThreads=0

如果您仍需要统计数据,只需阅读相应的hsperfdata_*文件即可。
编辑: 我在github上发布了hsperf munin插件

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接