我们正在编写一个将密码保存在内存中的 java 程序。不幸的是,用户可以轻松地使用 jconsole 或 jmap 来创建堆转储文件并打开它以查找密码。我认为 jconsole 使用本地套接字连接 jvm。我想知道,即使对于本地用户,有什么方法可以禁用 jmx 吗?有没有办法完全禁用堆转储?由于用户可以访问内存段,因此无论如何都可以访问密码。但是,我想禁用这样做的标准方法,以使操作尽可能昂贵。
mohsen
问问题
7251 次
2 回答
6
最后,我找到了禁用 jconsole 连接的解决方案。它还阻止 jmap 创建转储文件。我在这里找到了解决方案。我也在这里引用答案:
您可以通过运行 -XX:+DisableAttachMechanism 选项来阻止 jconsole 等工具和其他工具进行连接。请注意,此选项未记录/支持,但应该执行您想要的操作。也就是说,即使这样,也没有什么可以阻止您连接 gdb 或其他基于调试/proc 的程序
但是,很明显内存段可以在本地访问。但是,有没有人知道一种工具可以通过直接访问内存来制作标准内存转储?
于 2009-08-11T10:28:51.813 回答
3
将最大连接计数设置为零会关闭 JMX
-Dsun.rmi.transport.tcp.maxConnectionThreads=0
如果还需要统计,简单读取对应的 hsperfdata_* 文件
编辑:我在 github 上发布了我的hsperf munin 插件。
于 2016-01-06T09:52:46.257 回答