如何限制对 JMX 的访问仅限某些 IP 地址?

问题描述 投票:0回答:1

我不想每次都为 SSL 和密码烦恼,但仍然不希望 LAN 上的其他人可以访问我的程序的 JMX 功能。

我这样填充我的

~/.java.policy

grant principal javax.management.remote.JMXPrincipal "*" {
    permission java.net.SocketPermission "127.0.0.1", "accept";
    permission java.net.SocketPermission "my.lan.ip.addr", "accept";
    permission java.net.SocketPermission "another.lan.ip.addr", "accept";
    permission java.net.SocketPermission "*", "resolve";
}

不幸的是,这似乎没有效果——当程序启动时:

  • -Djava.security.manager
  • -Dcom.sun.management.jmxremote.ssl=false
  • -Dcom.sun.management.jmxremote.authenticate=false
  • -Dcom.sun.management.jmxremote
  • -Dcom.sun.management.jmxremote.port=1234

其 JMX 功能仍然可以从任何地方访问,而不仅仅是从列出的少数 IP。

如何正确做?谢谢!

java jmx javapolicy
1个回答
0
投票

当然,所以您的目标是锁定对程序 JMX 功能的访问,而不需要深入研究 SSL 和密码,这是完全有道理的。有时简单就是游戏的名称! 🎮

通过修改

~/.java.policy
文件来授予特定 IP 地址的权限,您已经做了正确的事情。然而,有一个微小的调整可能会有所不同。不要处理
javax.management.remote.JMXPrincipal
主体,而是尝试向程序的 JMX 魔法所在的代码库授予权限。

经过如此时髦的调整,您的保单文件可能如下所示:

grant codeBase "file:/path/to/your/program.jar" {
    permission java.net.SocketPermission "127.0.0.1", "accept";
    permission java.net.SocketPermission "my.lan.ip.addr", "accept";
    permission java.net.SocketPermission "another.lan.ip.addr", "accept";
    permission java.net.SocketPermission "*", "resolve";
};

请记住将

/path/to/your/program.jar
替换为程序 JAR 文件的实际路径。修改策略文件后,请继续使用那些熟悉的命令行设置再次尝试您的程序。希望这个小调整能够解决问题并按照您想要的方式限制访问!

© www.soinside.com 2019 - 2024. All rights reserved.