Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
  ПредыдущийПредыдущий Содержание СледующийЗатем
 Глава 2

Контроль и управление Используя Технологию JMX

У виртуальной машины Java (Java VM) есть встроенный инструментарий, который позволяет Вам контролировать и управлять этим использующий Расширения управления Java (JMX) технология. Эти встроенные утилиты управления часто упоминаются как инструменты управления "из поля" для Java VM. Можно также контролировать любые соответственно инструментованные приложения, используя API JMX.

Установка Системных Свойств

Чтобы включить и сконфигурировать "из поля" агент JMX так, чтобы это могло контролировать и управлять Java VM, следует установить определенные системные свойства, когда Вы запускаете Java VM. Вы устанавливаете системное свойство на командной строке следующим образом.

java -Dproperty=value ...

Можно определить любой номер системных свойств таким образом. Если Вы не определяете значение для свойства управления, то свойство устанавливается с его значением по умолчанию. Полный комплект свойств управления "из поля" описывается в  Таблице 2-1 в конце этой главы. Можно также установить системные свойства в конфигурационном файле, как описано в Контроле "из Поля" и Свойств управления.


Отметьте - Чтобы выполнить Java VM из командной строки, следует добавить JRE_HOME/bin к своему пути, где JRE_HOME является каталогом, содержащим среду выполнения Java (JRE) реализация. Альтернативно, можно ввести полный путь, когда Вы вводите команду.


Следующие документы описывают синтаксис и полный комплект параметров командной строки, поддерживаемых Java HotSpot VMs.

Включение Управлению "из Поля"

Чтобы контролировать платформу Java, используя API JMX, следует сделать следующий.

  1. Включите агенту JMX (другое имя для платформы сервер MBean), когда Вы запускаете Java VM. Можно включить агенту JMX для:

    • Локальный контроль, для клиентского приложения управления, работающего на локальной системе.

    • Дистанционный мониторинг, для клиентского приложения управления, работающего на удаленной системе.

  2. Контролируйте Java VM с инструментом, который подчиняется к спецификации JMX, такой как JConsole. См.  Главу 3, Используя JConsole для получения дополнительной информации о Консоли.

Эти шаги описываются в следующих разделах.

Локальный Контроль и управление

При предыдущих выпусках Java платформа SE, чтобы предоставить клиентский доступ JMX к локальному Java VM, необходимо установить следующее системное свойство, когда Вы запустили Java приложение Java или VM.

com.sun.management.jmxremote

Установка этого свойства, зарегистрированного Java MBeans платформы VM и опубликованный Удаленный Вызов метода (RMI) соединитель через закрытый интерфейс, чтобы позволить клиентским приложениям JMX контролировать локальную платформу Java, то есть, Java работа VM той же самой машины как клиент JMX.

В Java SE 6 платформ больше не необходимо установить это системное свойство. Любое приложение, которое запускается на Java SE 6 платформ, будет поддерживать API Присоединения, и так будет автоматически сделано доступным для локального контроля и управления при необходимости.

Например, ранее, чтобы включить агенту JMX для Java пример приложения SE Notepad, необходимо бы выполнить следующие команды.

% cd JDK_HOME/demo/jfc/Notepad
% java -Dcom.sun.management.jmxremote -jar Notepad.jar

В вышеупомянутой команде JDK_HOME является каталогом, в котором устанавливается Комплект разработчика для Java (JDK). В Java SE 6 платформ необходимо бы просто выполнить следующую команду, чтобы запустить Notepad.

% java -jar Notepad.jar

Как только Notepad был запущен, клиент JMX, использующий API Присоединения, может тогда позволить агенту управления "из поля" контролировать и управлять приложением Notepad.


Отметьте - На платформах Windows для соображений безопасности, локальный контроль и управление только поддерживаются, если Ваш временный каталог по умолчанию находится на файловой системе, которая позволяет установку полномочий на файлах и каталогов (например на Новой Технологической Файловой системе (NTFS) файловая система). Это не поддерживается на Таблице размещения файлов (FAT) файловая система, которая обеспечивает недостаточные средства управления доступом.


Локальный Контроль и управление Используя JConsole

Локальный контроль с JConsole полезен для разработки и создающих прототипов. Используя JConsole локально не рекомендуется для продуктивных сред, потому что сам JConsole использует существенные системные ресурсы. Скорее следует использовать JConsole в удаленной системе, чтобы изолировать это от контролируемой платформы.

Однако, если Вы действительно хотите выполнить локальный контроль, используя JConsole, Вы запускаете инструмент, вводя jconsole в командном процессоре. Когда Вы запустите jconsole без любых параметров, он автоматически обнаружит все локальные приложения Java, и выведет на экран диалоговое окно, которое позволяет Вам выбрать приложение, которое Вы хотите контролировать. И JConsole и приложение должны выполняемым тем же самым пользователем, так как система контроля и система управления использует полномочия файла операционной системы.


Отметьте - Чтобы выполнить JConsole из командной строки, следует добавить JDK_HOME/bin к своему пути. Альтернативно, можно ввести полный путь, когда Вы вводите команду.


Для получения дополнительной информации см.  Главу 3, Используя JConsole.

Дистанционный мониторинг и управление

Чтобы позволить контролировать и управление от удаленных систем, следует установить следующее системное свойство, когда Вы запускаете Java VM.

com.sun.management.jmxremote.port=portNum

В свойстве выше, portNum является номером порта, через который Вы хотите включить соединениям RMI JMX. Убедитесь, что определили неиспользованный номер порта. В дополнение к публикации соединителя RMI для локального доступа, устанавливая это свойство публикует дополнительный соединитель RMI в частном реестре только для чтения в указанном порту, используя известное имя, "jmxrmi".


Отметьте - следует установить вышеупомянутое системное свойство в дополнение к любым свойствам, которые Вы могли бы установить для безопасности.


Дистанционный мониторинг и управление требуют безопасности, чтобы гарантировать, что неправомочные люди не могут управлять или контролировать Ваше приложение. Аутентификация по паролю по Уровню защищенных сокетов (SSL) и Безопасность Транспортного уровня (TLS) включается по умолчанию. Можно отключить аутентификацию по паролю и SSL отдельно, как описано в следующих разделах.

Для производственных систем используйте клиентские сертификаты SSL для аутентификации вместо паролей, или гарантируйте, что клиент получает удаленный объект соединителя надежно, например через безопасный сервер LDAP или файл в совместно используемой безопасной файловой системе. См., что темы Используют SSL и Используя Аутентификацию LDAP для получения дополнительной информации.

Платформа Java поддерживает сменные модули входа в систему для аутентификации. Можно включить любой модуль входа в систему в зависимости от инфраструктуры аутентификации в Вашей организации. Раздел, названный Используя Аутентификацию LDAP, описывает, как включить com.sun.security.auth.module.LdapLoginModule для Легкого Протокола Доступа Каталога (LDAP) базируемая аутентификация.

После того, как Вы включили агенту JMX для удаленного использования, можно контролировать свое приложение, используя JConsole, как описано в Дистанционном мониторинге с JConsole. Как соединиться с агентом управления, программно описывается в Соединении с Агентом JMX Программно.

Используя Аутентификацию по паролю

Используя Аутентификацию LDAP

Реализация JMXAuthenticator в агенте JMX основана на Службе Аутентификации и авторизации Java (JAAS) технология. Аутентификация выполняется, передавая удостоверения пользователя к JAAS javax.security.auth.spi. Объект LoginModule. com.sun.security.auth.module.LdapLoginModule класс включает аутентификации, используя LDAP. Можно заменить значение по умолчанию LoginModule класс с LdapLoginModule как описано затем.

Создайте конфигурационный файл JAAS, который работал бы в необходимой организации бизнеса. Пример конфигурационного файла (ldap.config) показывается затем:

ExampleCompanyConfig {
    com.sun.security.auth.module.LdapLoginModule REQUIRED
        userProvider="ldap://example-ds/ou=people,dc=examplecompany,dc=com"
        userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
        authzIdentity=monitorRole;
    };

Опции в конфигурационном файле кратко объясняются затем. См. документацию для com.sun.security.auth.module.LdapLoginModule класс для информации о параметрах конфигурации, показанных во фрагменте кода.

  • com.sun.security.auth.module.LdapLoginModule REQUIRED опция означает то использование аутентификации LdapLoginModule требуется для полной аутентификации быть успешным
  • userProvider опция идентифицирует сервер LDAP и позицию в дереве каталогов, где пользовательские записи располагаются
  • userFilter опция определяет поисковый фильтр, чтобы использовать, чтобы определить местоположение пользовательской записи в каталоге LDAP. Маркер {USERNAME} заменяется именем пользователя прежде, чем фильтр будет использоваться, чтобы искать каталог.
  • authzIdentity опция определяет роль доступа для autheticated пользователей. В примере аутентифицируемые пользователи будут иметь monitorRole. См. раздел Файлов Доступа для получения дополнительной информации.

Запустите свое приложение со следующего набора свойств на командной строке:

  • com.sun.management.jmxremote.login.config - Это свойство конфигурирует агент JMX, чтобы использовать указанную запись конфигурации JAAS.
  • java.security.auth.login.config - определяет путь к конфигурационному файлу JAAS.

Демонстрационную командную строку показывают затем.

java -Dcom.sun.management.jmxremote.port=5000
     -Dcom.sun.management.jmxremote.login.config=ExampleCompanyConfig
     -Djava.security.auth.login.config=ldap.config
     -jar MyApplication.jar
Используя Основанную на файле Аутентификацию по паролю

Основанный на файле механизм аутентификации по паролю, поддерживаемый агентом JMX, хранит пароль в открытом тексте и предназначается только для использования разработки. Для производственного использования строго рекомендуется, чтобы Вы использовали клиентские сертификаты SSL для аутентификации или включили безопасную конфигурацию входа в систему.


Предостережение - потенциальный вопрос безопасности был идентифицирован с аутентификацией по паролю для удаленных соединителей, когда клиент получает удаленный соединитель из небезопасного реестра RMI (значение по умолчанию). Если атакующий запускает поддельный реестр RMI на целевом сервере прежде, чем законный реестр будет запущен, то атакующий может украсть пароли клиентов. Этот сценарий включает случай, где Вы запускаете Java VM с удаленным включенным управлением, используя системное свойство com.sun.management.jmxremote.port=portNum, даже когда SSL включается. Хотя такие атаки, вероятно, будут замечены, это - однако уязвимость.


По умолчанию, когда Вы включаете агенту JMX для дистанционного мониторинга, он использует аутентификацию по паролю. Однако, способ, которым Вы устанавливаете это, зависит от того, являетесь ли Вы в однопользовательской среде или многопользовательской среде.

Так как пароли сохранены в открытом тексте в файле пароля, не желательно использовать Ваше имя и пароль обычного пользователя для того, чтобы контролировать. Вместо этого используйте имена пользователей, определенные в файле пароля, такие как monitorRole и controlRole. Для получения дополнительной информации см. Используя Файлы Пароля и Доступа.

Однопользовательская Среда Устанавливать Однопользовательскую Среду

Вы устанавливаете файл пароля в каталоге JRE_HOME/lib/management следующим образом.

  1. Скопируйте шаблонный файл пароля, jmxremote.password.template, к jmxremote.password.
  2. Полномочия файла набора так, чтобы только владелец мог считать и записать файл пароля.
  3. Добавьте пароли для ролей, таких как monitorRole и controlRole.
Многопользовательская Среда Устанавливать Многопользовательскую Среду

Вы устанавливаете файл пароля в каталоге JRE_HOME/lib/management следующим образом.

  1. Скопируйте шаблонный файл пароля, jmxremote.password.template, к Вашему корневому каталогу и переименуйте это к jmxremote.password.
  2. Полномочия файла набора так, чтобы только можно было считать и записать файл пароля.
  3. Добавьте пароли для ролей, таких как monitorRole и controlRole.
  4. Установите следующее системное свойство, когда Вы запускаете Java VM.
    com.sun.management.jmxremote.password.file=pwFilePath
    

    В вышеупомянутом свойстве pwFilePath является путем к файлу пароля.

Отключение Аутентификации по паролю

Аутентификация по паролю для дистанционного мониторинга включается по умолчанию. Чтобы отключить это, установите следующее системное свойство, когда Вы запускаете Java VM.

com.sun.management.jmxremote.authenticate=false

Предостережение - Эта конфигурация небезопасна. Любой удаленный пользователь, который знает (или предположения) Ваш номер порта JMX и имя хоста, будет в состоянии контролировать и управлять Вашим приложением Java и платформой. В то время как это может быть приемлемо для разработки, это не рекомендуется для производственных систем.


Когда Вы отключаете аутентификацию по паролю, можно также отключить SSL, как описано в Отключении Безопасности. Можно также хотеть отключить пароли, но аутентификацию клиента SSL использования, как описано во Включении Аутентификации клиента SSL.

Используя SSL

SSL включается по умолчанию, когда Вы включаете дистанционному мониторингу и управлению. Чтобы использовать SSL, Вы должны установить цифровой сертификат на системе, куда агент JMX (сервер MBean) работает, и затем сконфигурируйте SSL должным образом. Вы используете утилиту keytool командной строки, чтобы работать с сертификатами. Общая процедура следующие.

Установите SSL Устанавливать SSL
  1. Если у Вас уже нет пары ключей и сертификата установленными на сервере:
  2. Сконфигурируйте SSL на системе сервера.

    Полное объяснение конфигурирования и настройки SSL выходит за рамки этого документа, но Вы обычно должны установить системные свойства, описанные в списке ниже.

    Системное Свойство

    Описание

    javax.net.ssl.keyStore

    Расположение Keystore.

    javax.net.ssl.keyStoreType

    Значение по умолчанию keystore тип.

    javax.net.ssl.keyStorePassword

    Значение по умолчанию keystore пароль.

    javax.net.ssl.trustStore

    Расположение базы доверенных сертификатов.

    javax.net.ssl.trustStoreType

    Тип базы доверенных сертификатов по умолчанию.

    javax.net.ssl.trustStorePassword

    Пароль базы доверенных сертификатов по умолчанию.

    Для получения дополнительной информации об установке системных свойств, см. Системные Свойства Установки выше, или консультируйтесь со следующими документами.

Включение Аутентификации Реестра RMI

Устанавливая соединения для того, чтобы контролировать удаленные приложения, можно дополнительно связать тупик соединителя RMI с реестром RMI, который защищается SSL. Это позволяет клиентам с соответствующими сертификатами SSL получать тупик соединителя, который регистрируется в реестре RMI. Чтобы защитить реестр RMI, используя SSL, следует установить следующее системное свойство.

com.sun.management.jmxremote.registry.ssl=true

Когда это свойство будет установлено в true, реестр RMI, защищенный SSL, будет создаваться и конфигурироваться агентом управления "из поля", когда Java VM запускается. Значением по умолчанию этого свойства является false. Если это свойство устанавливается в true, чтобы иметь полную безопасность тогда, аутентификация клиента SSL должна также быть включена, как описано в следующем разделе.

Включение Аутентификации клиента SSL

Чтобы включить аутентификации клиента SSL, установите следующее системное свойство, когда Вы запускаете Java VM.

com.sun.management.jmxremote.ssl.need.client.auth=true

SSL должен быть позволен (значение по умолчанию), использовать клиентскую аутентификацию SSL. Эта конфигурация требует, чтобы у клиентской системы был допустимый цифровой сертификат. Следует установить сертификат и сконфигурировать SSL на клиентской системе, как описано в Использовании SSL. Как утверждено в предыдущем разделе, если защита SSL реестра RMI включается, то клиентская аутентификация SSL должна быть установлена в true.

Отключение SSL

Чтобы отключить SSL, контролируя удаленно, следует установить следующее системное свойство, когда Вы запускаете Java VM.

com.sun.management.jmxremote.ssl=false

Аутентификация по паролю будет все еще требоваться, если Вы не отключите ее, как определено в Отключении Аутентификации по паролю.

Отключение Безопасности

Чтобы отключить и аутентификацию по паролю и SSL (а именно, чтобы отключить всю безопасность), следует установить следующие системные свойства, когда Вы запускаете Java VM.

com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false

Предостережение - Эта конфигурация небезопасна: любой удаленный пользователь, который знает (или предположения) Ваш номер порта и имя хоста, будет в состоянии контролировать и управлять Вашими приложениями Java и платформой. Кроме того возможный вред не ограничивается операциями, которые Вы определяете в своем MBeans. Удаленный клиент мог создать javax.management.loading.MLet MBean и использовать его, чтобы создать новый MBeans из произвольных URL, по крайней мере если нет никакого менеджера безопасности. Другими словами удаленный клиент жулика мог подать Вашу заявку Java, выполняют произвольный код.

Следовательно, в то время как отключение безопасности могло бы быть приемлемым для разработки, строго рекомендуется, чтобы Вы не отключили безопасность для производственных систем.


Дистанционный мониторинг с JConsole

Можно удаленно контролировать приложение, используя JConsole, с или без включенной безопасности.

Дистанционный мониторинг с JConsole с Отключенным SSL

Чтобы контролировать удаленное приложение с отключенным SSL, Вы запустили бы JConsole со следующей команды.

% jconsole hostName:portNum

Можно также опустить имя хоста и номер порта, и ввести их в диалоговое окно, которое обеспечивает JConsole.

Дистанционный мониторинг с JConsole с Включенным SSL

Чтобы контролировать удаленное приложение с включенным SSL, Вы должны установить базу доверенных сертификатов на системе, куда JConsole работает, и сконфигурируйте SSL должным образом. Например, можно создать keystore как описано в Руководстве по JSSE и запустить Ваше приложение (названный Server в этом примере) со следующими командами.

% java -Djavax.net.ssl.keyStore=keystore \
  -Djavax.net.ssl.keyStorePassword=password Server

Если бы Вы создали keystore и запустили Server как показано выше, то необходимо бы запустить JConsole следующим образом.

% jconsole -J-Djavax.net.ssl.trustStore=truststore \
  -J-Djavax.net.ssl.trustStorePassword=trustword

Вышеупомянутая конфигурация аутентифицирует сервер только. Если аутентификация клиента SSL будет установлена, то Вы должны будете обеспечить подобный keystore для ключей JCONSOLE, и соответствующую базу доверенных сертификатов для приложения.

См. Настройку Баз ключей По умолчанию и Баз доверенных сертификатов, Типов Хранилища, и Паролей Хранилища в Руководстве по JSSE для информации.

Для получения дополнительной информации об использовании JConsole см.  Главу 3, Используя JConsole.

Используя Файлы Пароля и Доступа

Пароль и файлы доступа управляют безопасностью для дистанционного мониторинга и управления. Эти файлы располагаются по умолчанию в JRE_HOME/lib/management и находятся в стандартном формате файла свойств Java. Для получения дополнительной информации по формату см. ссылку API для пакета java.util.Properties.

Файлы пароля

Файл пароля определяет различные роли и их пароли. Файл управления доступом (jmxremote.access по умолчанию) определяет разрешенный доступ для каждой роли. Чтобы быть функциональной, у роли должна быть запись и в пароле и в файлах доступа.

Реализация JRE содержит шаблон файла пароля под названием jmxremote.password.template. Скопируйте этот файл в JRE_HOME/lib/management/jmxremote.password или в Ваш корневой каталог, и добавьте пароли для ролей, определенных в файле доступа.

Следует гарантировать, что только владелец считал и пишет полномочия на этом файле, так как он содержит пароли в открытом тексте. Для соображений безопасности система проверяет, что файл только читаем владельцем и выходами с ошибкой, если это не. Таким образом в многопользовательской среде, следует хранить файл пароля в частном расположении, таком как Ваш корневой каталог.

Имена свойства являются ролями, и присваиваемое значение является паролем роли. Например, следующее демонстрационные записи в файле пароля.

Пример 2-1 Файл Пароля В качестве примера
# specify actual password instead of the text password
monitorRole password
controlRole password

На Солярисе и системах Linux, можно установить полномочия файла для файла пароля, выполняя следующую команду.

chmod 600 jmxremote.password

Для получения инструкций по тому, как установить полномочия файла на платформах Windows, см. Приложение A , Дополнительную информацию о Безопасности Для Microsoft Windows.

Файлы доступа

По умолчанию файл доступа называют jmxremote.access. Имена свойства являются идентификационными данными от того же самого пространства как файл пароля. Присваиваемым значением должен быть или readonly или readwrite.

Файл доступа определяет роли и их уровни доступа. По умолчанию файл доступа определяет два после основных ролей.

  • monitorRole, который предоставляет доступ только для чтения для того, чтобы контролировать.

  • controlRole, который предоставляет доступ для чтения-записи для контроля и управления.

Элемент списка управления доступом состоит из ролевого имени и связанного уровня доступа. Ролевое имя не может содержать пробелы или вкладки и должно соответствовать записи в файле пароля. Уровень доступа может быть любой одним из следующих.

  • readonly, который предоставляет доступ, чтобы считать атрибуты MBEAN. Для того, чтобы контролировать, это означает, что удаленный клиент в этой роли может считать измерения, но не может выполнить действие, которое изменяет среду рабочей программы. Удаленный клиент может также слушать уведомления MBean.

  • readwrite, который предоставляет доступ, чтобы считать и записать атрибуты MBEAN, вызвать операции на них, и создать или удалить их. Этот доступ должен быть предоставлен только доверяемым клиентам, так как они могут потенциально вмешаться в работу приложения.

У роли должна быть только одна запись в файле доступа. Если у роли нет никакой записи, у нее нет никакого доступа. Если у роли есть многократные записи, то последняя запись имеет приоритет. Типичные предопределенные роли в файле доступа напоминают следующий.

Пример 2-2 Файл Доступа В качестве примера
# The "monitorRole" role has readonly access.
# The "controlRole" role has readwrite access.
monitorRole readonly
controlRole readwrite

Контроль "из Поля" и Свойств управления

Можно установить контроль "из поля" и свойств управления в конфигурационном файле или на командной строке. Свойства, определенные на командной строке, переопределяют свойства в конфигурационном файле. Расположение по умолчанию для конфигурационного файла является JRE_HOME/lib/management/management.properties. VM Java читает этот файл, если любое из свойств com.sun.management.jmxremote или com.sun.management.jmxremote.port командной строки устанавливается. Управление через Простой Сетевой Протокол управления (SNMP) использует тот же самый конфигурационный файл. Для получения дополнительной информации о контроле SNMP, см.  Главу 5, Контроль SNMP и управление.

Можно определить различное расположение для конфигурационного файла со следующим параметром командной строки.

com.sun.management.config.file=ConfigFilePath

В свойстве выше, ConfigFilePath является путем к конфигурационному файлу.

 Таблица 2-1 описывает весь контроль "из поля" и свойств управления.

 Таблица 2-1, Контролирующая "из Поля" и Свойств управления

Свойство

Описание

Значения

com.sun.management.jmxremote

Включает JMX удаленный агент и локальный контроль через соединитель JMX, опубликованный на закрытом интерфейсе, используемом JConsole и любыми другими локальными клиентами JMX, которые используют API Присоединения. JConsole может использовать этот соединитель, если это запускается тем же самым пользователем как пользователь, который запустил агент. Никакой пароль или файлы доступа не проверяются на запросы, прибывающие через этот соединитель.

true / false. Значением по умолчанию является true.

com.sun.management.jmxremote. port

Включает JMX удаленный агент и создает удаленный соединитель JMX, чтобы слушать через указанный порт. По умолчанию SSL, пароль, и свойства файла доступа используются для этого соединителя. Это также включает локальному контролю как описано для свойства com.sun.management.jmxremote.

Номер порта. Никакое значение по умолчанию.

com.sun.management.jmxremote. registry.ssl

Связывает тупик соединителя RMI с реестром RMI, защищенным SSL.

true / false. Значением по умолчанию является false.

com.sun.management.jmxremote. ssl

Включения безопасный контроль через SSL. Если false, то SSL не используется.

true / false. Значением по умолчанию является true.

com.sun.management.jmxremote. ssl.enabled.protocols

Разграниченный запятой список версий протокола SSL/TLS, чтобы включить. Используемый в соединении с com.sun.management.jmxremote.ssl.

Версия протокола SSL/TLS по умолчанию.

com.sun.management.jmxremote. ssl.enabled.cipher.suites

Разграниченный запятой список комплектов шифра SSL/TLS, чтобы включить. Используемый в соединении с com.sun.management.jmxremote.ssl.

Комплекты шифра SSL/TLS по умолчанию.

com.sun.management.jmxremote. ssl.need.client.auth

Если этим свойством будет true, и свойством com.sun.management.jmxremote.ssl является также true, то аутентификация клиента будет выполняться.

true / false. Значением по умолчанию является true.

com.sun.management.jmxremote. authenticate

Если этим свойством является false тогда, JMX не использует файлы доступа или пароли: все пользователи предоставляются весь доступ.

true / false. Значением по умолчанию является true.

com.sun.management.jmxremote. password.file

Определяет расположение для файла пароля. Если com.sun.management.jmxremote.authenticate является false, то это свойство и пароль и файлы доступа игнорируются. Иначе, файл пароля должен существовать и быть в допустимом формате. Если файл пароля является пустым или несуществующим, то никакой доступ не предоставляется.

JRE_HOME/lib/management/ jmxremote.password

com.sun.management.jmxremote. access.file

Определяет расположение для файла доступа. Если com.sun.management.jmxremote.authenticate является ложью, то это свойство и пароль и файлы доступа игнорируются. Иначе, файл доступа должен существовать и быть в допустимом формате. Если файл доступа является пустым или несуществующим, то никакой доступ не предоставляется.

JRE_HOME/lib/management/ jmxremote.access

com.sun.management.jmxremote.login.config

Определяет имя Службы Аутентификации и авторизации Java (JAAS) запись конфигурации входа в систему, чтобы использовать, когда агент JMX аутентифицирует пользователей. При использовании этого свойства, чтобы переопределить конфигурацию входа в систему по умолчанию, именованная запись конфигурации должна быть в файле, который загружается JAAS. Кроме того, модули входа в систему, определенные в конфигурации, должны использовать обратные вызовы имени и пароля, чтобы получить учетные данные пользователя. Для получения дополнительной информации см. документацию API для javax.security.auth.callback.NameCallback и javax.security.auth.callback.PasswordCallback.

Конфигурация входа в систему по умолчанию является основанной на файле аутентификацией по паролю.

Ошибки конфигурации

Если какие-либо ошибки произойдут во время запуска сервера MBean, реестра RMI, или соединителя, Java, то VM выдаст исключение и выход. Ошибки конфигурации включают следующий.

  • Отказ связать с номером порта.

  • Файл неверного пароля.

  • Недопустимый файл доступа.

  • Файл пароля читаем пользователями кроме владельца.

Если Ваше приложение выполняет менеджера безопасности, то дополнительные полномочия требуются в файле прав доступа.

Соединение с Агентом JMX Программно

Как только Вы включили агенту JMX, клиент может использовать следующий URL, чтобы получить доступ к контрольной службе.

service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi

Клиент может создать соединитель для агента, инстанцируя объекта javax.management.remote.JMXServiceURL использование URL, и затем создание соединения, используя метод JMXConnectorFactory.connect, показанный в Примере 2-3.

Пример 2-3 Создания Соединения Используя JMXConnectorFactory.connect
MXServiceURL u = new JMXServiceURL(
  "service:jmx:rmi:///jndi/rmi://" + hostName + ":" + portNum +  "/jmxrmi");
  JMXConnector c = JMXConnectorFactory.connect(u); 

Установка Контроля и управления Программно

Как утверждено ранее, в Java версия 6 платформы SE, можно создать клиент JMX, который использует API Присоединения, чтобы позволить контролировать "из поля" и управления любыми приложениями, которые запускаются на Java SE 6 платформ, не имея необходимость конфигурировать приложения для того, чтобы контролировать, когда Вы запускаете их. API Присоединения обеспечивает путь к инструментам, чтобы присоединить к и запустить агенты в целевом приложении. Как только агент работает, клиенты JMX (и другие инструменты) в состоянии получить адрес соединителя JMX для того агента через список свойств, который сохраняется Java VM от имени агентов. Свойства в списке доступны от инструментов, которые используют API Присоединения. Так, если агент запускается в приложении, и если агент создает свойство, чтобы представить часть конфигурационной информации, то та конфигурационная информация доступна инструментам, которые присоединяют к приложению.

Агент JMX создает свойство с адресом локального сервера соединителя JMX. Это позволяет инструментам JMX присоединять к и получать адрес соединителя агента, если он работает.

Пример 2-4 выставочных кода, которые могли использоваться в инструменте JMX, чтобы присоединить к целевому VM, получите адрес соединителя агента JMX и подключения к нему.

Пример 2-4 Присоединения инструмента JMX к соединителю и получению адреса агента
static final String CONNECTOR_ADDRESS =
 "com.sun.management.jmxremote.localConnectorAddress";
 
// attach to the target application
VirtualMachine vm = VirtualMachine.attach(id);
 
// get the connector address
String connectorAddress =
    vm.getAgentProperties().getProperty(CONNECTOR_ADDRESS);
 
// no connector address, so we start the JMX agent
if (connectorAddress == null) {
   String agent = vm.getSystemProperties().getProperty("java.home") +
       File.separator + "lib" + File.separator + "management-agent.jar";
   vm.loadAgent(agent);
 
   // agent is started, get the connector address
   connectorAddress =
       vm.getAgentProperties().getProperty(CONNECTOR_ADDRESS);
}
 
// establish connection to connector server
JMXServiceURL url = new JMXServiceURL(connectorAddress);
JMXConnector = JMXConnectorFactory.connect(url);

Пример 2-4 использования метод attach() класса com.sun.tools.attach.VirtualMachine, чтобы присоединить к данному Java VM так, чтобы это могло считать свойства, которые целевой Java VM поддерживает от имени любых агентов, работающих в этом. Если агент уже работает, то метод getAgentProperties() класса VirtualMachine вызывают, чтобы получить адрес агента. Метод getAgentProperties() возвращает строковое свойство для локального адреса соединителя com.sun.management.jmxremote.localConnectorAddress, который можно использовать, чтобы соединиться с локальным агентом JMX.

Если никакой агент уже не работает, то каждый загружается VirtualMachine из JRE_HOME/lib/management-agent.jar, и его адрес соединителя получается getAgentProperties().

Соединение с агентом тогда устанавливается, вызывая JMXConnectorFactory.connect на службе JMX URL, который был создан из этого адреса соединителя.

Имитация Управлению Используя "из Поля" JMX Удаленный API

Как объяснено выше, удаленный доступ к агенту управления "из поля" защищается аутентификацией и авторизацией, и шифрованием SSL, и вся конфигурация выполняется, устанавливая системные свойства или определяя файл management.properties. В большинстве случаев использование агента управления "из поля" и конфигурирование этого через файл management.properties более чем достаточны обеспечить безопасное управление удаленным Java VMs. Однако, в некоторых случаях большие уровни безопасности требуются, и в других случаях определенные конфигурации системы не позволяют использование файла management.properties. Такие случаи могли бы включить экспорт удаленных объектов сервера RMI по определенному порту, чтобы позволить проход через брандмауэр, или экспорт удаленных объектов сервера RMI, используя определенный сетевой интерфейс в многосетевых системах. Для таких случаев поведению агента управления "из поля" можно подражать при использовании JMX Удаленный API непосредственно, чтобы создать, сконфигурировать и развернуть агент управления программно.

Пример Имитации Управлению "из Поля"

Этот раздел обеспечивает пример того, как реализовать агент JMX, который тождественно подражает агенту управления "из поля". Точно таким же образом как агент управления "из поля", агент, создаваемый в Примере 2-5, будет работать на порту 3000, будет иметь файл пароля под названием password.properties, файл доступа под названием access.properties, и это реализует конфигурацию по умолчанию для Фабрик Сокета RMI SSL/TLS-based, требуя аутентификации сервера только. Этот пример предполагает, что keystore был уже создан, как описано в Использовании SSL. Информация о том, как установить конфигурацию SSL, может быть найдена в Справочнике JSSE.

Чтобы позволить контролировать и управление на приложении под названием com.example.MyApp, используя "из поля" агент JMX с конфигурацией, описанной выше, Вы выполнили бы com.example.MyApp со следующей командой.

% java -Dcom.sun.management.jmxremote.port=3000 \
     -Dcom.sun.management.jmxremote.password.file=password.properties \
     -Dcom.sun.management.jmxremote.access.file=access.properties \
     -Djavax.net.ssl.keyStore=keystore \
     -Djavax.net.ssl.keyStorePassword=password \
     com.example.MyApp

Отметьте - свойства com.sun.management.jmxremote.*, возможно, были определены в файле management.properties вместо того, чтобы передать их в командной строке. В этом случае системное свойство -Dcom.sun.management.config.file=management.properties было бы обязано определять расположение файла management.properties.


Пример 2-5 шоу код, который Вы должны были бы записать, чтобы создать программно агент JMX, который позволит точно тот же самый контроль и управление на com.example.MyApp, как было бы возможное использование команды выше.

Пример 2-5 Имитаций "из Поля" Агент JMX Программно
package com.example;

import java.lang.management.*;
import java.rmi.registry.*;
import java.util.*;
import javax.management.*;
import javax.management.remote.*;
import javax.management.remote.rmi.*;
import javax.rmi.ssl.*;

public class MyApp {

    public static void main(String[] args) throws Exception {

        // Ensure cryptographically strong random number generator used
        // to choose the object number - see java.rmi.server.ObjID
        //
        System.setProperty("java.rmi.server.randomIDs", "true");

        // Start an RMI registry on port 3000.
        //
        System.out.println("Create RMI registry on port 3000");
        LocateRegistry.createRegistry(3000);

        // Retrieve the PlatformMBeanServer.
        //
        System.out.println("Get the platform's MBean server");
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

        // Environment map.
        //
        System.out.println("Initialize the environment map");
        HashMap<String,Object> env = new HashMap<String,Object>();

        // Provide SSL-based RMI socket factories.
        //
        // The protocol and cipher suites to be enabled will be the ones
        // defined by the default JSSE implementation and only server
        // authentication will be required.
        //
        SslRMIClientSocketFactory csf = new SslRMIClientSocketFactory();
        SslRMIServerSocketFactory ssf = new SslRMIServerSocketFactory();
        env.put(RMIConnectorServer.RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE, csf);
        env.put(RMIConnectorServer.RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE, ssf);

        // Provide the password file used by the connector server to
        // perform user authentication. The password file is a properties
        // based text file specifying username/password pairs.
        //
        env.put("jmx.remote.x.password.file", "password.properties");

        // Provide the access level file used by the connector server to
        // perform user authorization. The access level file is a properties
        // based text file specifying username/access level pairs where
        // access level is either "readonly" or "readwrite" access to the
        // MBeanServer operations.
        //
        env.put("jmx.remote.x.access.file", "access.properties");

        // Create an RMI connector server.
        //
        // As specified in the JMXServiceURL the RMIServer stub will be
        // registered in the RMI registry running in the local host on
        // port 3000 with the name "jmxrmi". This is the same name the
        // out-of-the-box management agent uses to register the RMIServer
        // stub too.
        //
        System.out.println("Create an RMI connector server");
        JMXServiceURL url =
            new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:3000/jmxrmi");
        JMXConnectorServer cs =
            JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs);

        // Start the RMI connector server.
        //
        System.out.println("Start the RMI connector server");
        cs.start();
    }
}

Запустите это приложение со следующей команды.

java -Djavax.net.ssl.keyStore=keystore \
     -Djavax.net.ssl.keyStorePassword=password \
     com.example.MyApp

Приложение com.example.MyApp включит агенту JMX и будет в состоянии контролироваться и управляться точно таким же образом, как будто агент управления платформы Java "из поля" использовался. Однако, есть одно небольшое, но важное различие между реестром RMI, используемым агентом управления "из поля" и тем, используемым агентом управления, который подражает этому. Реестр RMI, используемый агентом управления "из поля", только для чтения, а именно, единственная запись может быть связана с этим и когда-то связывала эту запись, не может быть несвязанным. Это не верно для реестра RMI, создаваемого в Примере 2-5.

Кроме того оба реестра RMI небезопасны, поскольку они не используют SSL/TLS. Реестры RMI должны быть созданы, используя SSL/TLS-based фабрики сокета RMI, которые требуют аутентификации клиента. Это будет препятствовать тому, чтобы клиент отправил его учетные данные жулику сервер RMI, и будет также препятствовать тому, чтобы реестр RMI предоставил доступ к тупику сервера RMI недоверяемому клиенту.

Реестры RMI, которые реализуют SSL/TLS фабрики сокета RMI, могут быть созданы, добавляя следующие свойства к Вашему файлу management.properties.

com.sun.management.jmxremote.registry.ssl=true
com.sun.management.jmxremote.ssl.need.client.auth=true

Пример 2-5 подражает основному поведению "из поля" агент JMX, но не тиражирует все существующие свойства в файл management.properties. Однако, Вы могли добавить другие свойства, изменяя com.example.MyApp соответственно.

Контроль Приложений через Брандмауэр

Как указано выше код в Примере 2-5 может использоваться, чтобы контролировать приложения через брандмауэр, который не мог бы быть возможным, если Вы используете контролирующее решение "из поля". Свойство управления com.sun.management.jmxremote.port определяет порт, где Реестр RMI может быть достигнут, но порты, куда RMIServer и удаленные объекты RMIConnection экспортируются, выбирается стеком RMI. Чтобы экспортировать удаленные объекты (RMIServer и RMIConnection) к данному порту, Вы должны создать свой собственный сервер соединителя RMI программно, как описано в Примере 2-5. Однако, следует определить JMXServiceURL следующим образом:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://localhost:" + 
      port1  + "/jndi/rmi://localhost:" + port2 + "/jmxrmi");

В URL выше, port1 является номером порта, на котором экспортируются RMIServer и удаленные объекты RMIConnection, и port2 является номером порта Реестра RMI.

Используя Класс Агента Инструмента Приложение

Платформа SE Java предоставляет услуги, которые позволяют агентам языка программирования Java инструментовать программы, работающие на Java VM. Создание агента инструментария означает, что Вы не должны добавить новый код к своему приложению, чтобы позволить этому контролироваться. Вместо того, чтобы реализовать контроль и управление в статическом методе main Вашего приложения Вы реализуете это в отдельном классе агента, и запускаете Ваше приложение с определенной опции -javaagent. См. справочную документацию API для java.lang.instrument пакета для полного изложения о том, как создать класс агента, чтобы инструментовать Ваши приложения.

Следующая процедура показывает, как можно адаптировать код com.example.MyApp, чтобы сделать агент, чтобы инструментовать любое другое приложение для контроля и управления.

Создание Класса Агента Создание Класса Агента Инструмента Приложение

  1. Создайте класс com.example.MyAgent.

    Создайте класс под названием com.example.MyAgent, объявляя метод premain, а не метод main.

    package com.example;
    
    [...]
    
    public class MyAgent {
        
        public static void premain(String args) throws Exception {
        
        [...]
    

    Остальная часть кода для класса com.example.MyAgent может быть точно тем же самым как классом com.example.MyApp, показанным в Примере 2-5.

  2. Скомпилируйте класс com.example.MyAgent.
  3. Создайте файл манифеста, MANIFEST.MF, с записью Premain-Class.

    Агент развертывается как архив Java (JAR) файл. Атрибут в декларации файла JAR определяет класс агента, который будет загружен, чтобы запустить агент. Создайте файл под названием MANIFEST.MF, содержа следующую строку.

    Premain-Class: com.example.MyAgent
    
  4. Создайте файл JAR, MyAgent.jar.

    Файл JAR должен содержать следующие файлы.

    • META-INF/MANIFEST.MF

    • com/example/MyAgent.class

  5. Запустите приложение, определяя агент, чтобы обеспечить службы управления и контроль.

    Можно использовать com.example.MyAgent, чтобы инструментовать любое приложение для контроля и управления. Этот пример использует приложение Notepad.

    % java -javaagent:MyAgent.jar -Djavax.net.ssl.keyStore=keystore \
          -Djavax.net.ssl.keyStorePassword=password -jar Notepad.jar
    

    Агент com.example.MyAgent определяется, используя опцию -javaagent, когда Вы запускаете Notepad. Кроме того, если Ваше приложение com.example.MyAgent тиражирует тот же самый код как приложение com.example.MyApp, показанное в Примере 2-5, то Вы должны будете обеспечить keystore и password, потому что сервер соединителя RMI защищается SSL.

ПредыдущийПредыдущий Содержание СледующийЗатем

Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами