【问题标题】:Disabling Local JMX Connections on JVM在 JVM 上禁用本地 JMX 连接
【发布时间】:2023-04-04 02:18:02
【问题描述】:

我们正在编写一个将密码保存在内存中的 java 程序。不幸的是,用户可以很容易地使用 jconsole 或 jmap 创建一个堆转储文件并打开它来查找密码。我认为 jconsole 使用本地套接字连接 jvm。我想知道,即使对于本地用户,有什么方法可以禁用 jmx 吗?有没有办法完全禁用堆转储?由于用户可以访问内存段,因此无论如何都可以访问密码。但是,我想禁用这样做的标准方法,以使操作尽可能昂贵。

【问题讨论】:

    标签: java memory heap-memory dump jconsole


    【解决方案1】:

    最后,我找到了禁用 jconsole 连接的解决方案。它还阻止 jmap 创建转储文件。我找到了解决方案here。我也在这里引用答案:

    您可以防止诸如 jconsole 和其他人通过连接 与运行 -XX:+DisableAttachMechanism 选项。请注意,此选项不 记录/支持,但应该这样做 你想要什么。也就是说,即使有 这没有什么可以阻止你 连接 gdb 或其他调试/过程 基于程序

    但是,很明显内存段可以在本地访问。但是,有没有人知道一种工具可以通过直接访问内存来制作标准内存转储?

    【讨论】:

    • 不一定是标准的内存转储格式,但您可以使用例如 HxD 十六进制编辑器 (mh-nexus.de/en/hxd) 访问任何本地进程的内存(给予足够的权限)。
    • -XX:+DisableAttachMechanism 似乎没有禁用 JMX。我仍然能够使用 jvisualvm 进行连接。它对你有用吗? @mohsen
    【解决方案2】:

    将最大连接计数设置为零会关闭 JMX

    -Dsun.rmi.transport.tcp.maxConnectionThreads=0
    

    如果还需要统计,简单读取对应的hsperfdata_*文件

    编辑: 我在 github 上发布了我的hsperf munin plugin

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多