контроль доступа к локальному мониторингу JMX - PullRequest
1 голос
/ 16 декабря 2010

Я хочу написать непривилегированную (не доступ с правами root) клиентскую программу JMX, которая отслеживает привилегированное (работающее как root) приложение с включенным локальным доступом JMX -Dcom.sun.management.jmxremote.

По крайней мере в MacOSX, jconsole (и jps) не видят корневые процессы, когда я работаю как я.

Это просто факт жизни здесь, или есть какой-то способ настроить это?

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Если вашему клиенту не разрешено видеть корневой процесс, вы не можете подключиться по PID. Вам нужно, чтобы корневое приложение загрузило JMXServer, который будет прослушивать порт [> 1024], а затем вы можете подключаться через порт, а не через PID. Самый простой способ сделать это - указать пару дополнительных системных свойств, которые будут запускать JVM для автоматической загрузки сервера JMX. Например (это все небезопасно):

  • -Dcom.sun.management.jmxremote.authenticate = false
  • -Dcom.sun.management.jmxremote.ssl = false
  • -Dcom.sun.management.jmxremote.port = 7777

См. Свойства управления и мониторинга JMX .

Чтобы создать JMXServer программно, см. JavaDoc для javax.management.remote . Есть действительно хорошее руководство / учебник по этой теме здесь .

1 голос
/ 16 декабря 2010

JMX использует простой порт TCP, который можно определить с помощью некоторых параметров командной строки. Если порт открыт, его может увидеть любой (включая непривилегированных пользователей).

Что касается самого процесса, jps не может видеть процесс другого пользователя, но вы можете увидеть это с помощью "ps aux".

...