2015-05-19 8 views
23

Я использую JConsole для доступа к запущенному MBean.Обход требования JConsole для имени пользователя/пароля - при использовании пользовательского модуля входа Jaas с JMX для обработки авторизации и аутентификации

MBean использует пользовательский JAAS модуля входа в систему и запускается с помощью следующей команды:

java -classpath UserLGUGroupHandlingApplication.jar;MBeanSecure.jar 
-com.sun.management.jmxremote.login.config=management.properties 
-Djava.security.auth.login.config=./sample_jaas.config 
com.test.running.RunningImplementation 

с файлом management.properties глядя, как это:

com.sun.management.jmxremote.access.file=jmxremote.access 
com.sun.management.jmxremote=true 
com.sun.management.jmxremote.authenticate=true 
com.sun.management.jmxremote.port=1234 
com.sun.management.jmxremote.login.config=Sample 
com.sun.management.jmxremote.ssl=false 
com.sun.management.jmxremote.ssl.need.client.auth=false 

и sample_jaas.config:

Sample { 
    test.module.AETTLoginModule required debug=true; 
}; 

, а затем пользователь получит доступ к этим работающим процессам путем входа в систему h JConsole из командной строки.

jconsole -debug //or just jconsole 

Пользователь выбирает «удаленное подключение», с RemoteProcess «LOCALHOST: 1234»

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

То, что я хочу, чтобы это произошло: enteres

  1. пользователя Jconsole в ЦМД
  2. открывается JConsole окно.
  3. Пользователь вводит адрес процесса, например. "localhost: 1234"
  4. Пользователь не введите имя пользователя или пароль (так как это не требуется, так как авторизация обрабатывается пользовательским модулем входа в jaas).
  5. Модуль определяет, имеет ли пользователь режим readwrite, readonly или no access.
  6. Открывается окно консоли для процесса или сбой входа в систему.

выпуск:

Чтобы получить доступ к процессу JMX в Jconsole окна I должен ввести фиктивное имя пользователя и пароль, например U: а, Р: а, в противном случае я получаю следующее сообщение об ошибке:

java.lang.SecurityException: Authentication failed! Credentials required 
    at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticationFailure(JMXPluggableAuthenticator.java:193) 
    at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticate(JMXPluggableAuthenticator.java:145) 
    at sun.management.jmxremote.ConnectorBootstrap$AccessFileCheckerAuthenticator.authenticate(ConnectorBootstrap.java:201) 
    at javax.management.remote.rmi.RMIServerImpl.doNewClient(RMIServerImpl.java:213) 
    at javax.management.remote.rmi.RMIServerImpl.newClient(RMIServerImpl.java:180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303) 
    at sun.rmi.transport.Transport$1.run(Transport.java:159) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:662) 
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) 
    at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source) 
    at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2327) 
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:277) 
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:225) 
    at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:334) 
    at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:296) 
    at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:280) 

Вопрос

Для модуля входа JAAS для запуска мне нужен следующий набор:

-Dcom.sun.management.jmxremote.authenticate=true 

Но , это также создает условие в JConsole, где поля имени пользователя и passowrd должны быть открыты в поле.

Если для этого параметра установлено значение false, модуль регистрации никогда не вызывается.

Можно либо расширить функциональные возможности Jconsole для конкретного экземпляра, применить параметр конфигурации, или включить модуль JAAS входа без необходимости устанавливать:

-Dcom.sun.management.jmxremote.authenticate=true 

Для того, чтобы предотвратить необходимость ввода имя пользователя и пароль в следующих областях выделены ниже:

enter image description here

Я ищу решение, аналогичное тому, продемонстрировал here. Но без необходимости ввода пользователем полей имени пользователя или пароля.

EDIT: Кроме того, чтобы уточнить, это необходимо сделать без изменения клиентской стороны JCONSOLE, поэтому, используя только изменения и настройки на стороне сервера.

ответ

4

Пройдите через это link. См. Дело 3, особенно это может вам помочь.

***** больше обновлений после получения дополнительных разъяснений по заданному вопросу *****************
Что в основном вы пытаетесь достичь - это обход (предоставлен JAAS) для конкретного клиентского соединения, которое является JCONSOLE в вашем случае .... Я бы предложил либо: - 1) Имейте два порта для сервера JMX: безопасный и незащищенный ... используйте незащищенный порт для JCONSOLE, или
2) в случае, если вы пишете свой собственный JAAS-модуль, попробуйте выполнить код, чтобы пропустить соединение для конкретного клиента в методе login(). Я не уверен, что это возможно, потому что, как вы узнаете контекст запрашивающего клиента ...

+1

Спасибо, однако, на мой вопрос конкретно на модификации Jconsole необходимость для пользователя ввод требований. В тематическом исследовании основное внимание уделяется JaasLoginModule и коду на стороне клиента. – Loco234

+0

Пожалуйста, свяжитесь только с ответами, так как ссылки могут сломаться. – NathanOliver

+0

Re: редактирование. Мне любопытно, существует ли более прямой подход к этому, поскольку использование модуля входа в систему Jaas является довольно распространенным требованием. Казалось бы странным ограничивать ввод учетных данных пользователя и пароля, используя поля в Jconsole. Я сразу же подумал, что нужно указать файл конфигурации jaas, установив com.sun.management.jmxremote.authenticate = false. Генерация контекста обрабатывается отдельным сценарием, который вызывается в модуле входа, эффективно минуя необходимость проверки учетных данных пользователей, поскольку они будут основаны на текущем зарегистрированном пользователе. – Loco234

0

Попробуйте следующее:

https://blogs.oracle.com/alanb/entry/one_password_to_rule_them предполагая следующее не то, что вы хотите (на основе ответа на @ ag112)

-J-Djmx.remote.x.password.file =/путь/к/файлу/jmx.password, а затем положить ваше имя пользователя/учетные данные с пробелом.

+0

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

+0

Из ссылки, не можете ли вы указать собственный модуль входа в систему? -Dcom.sun.management.jmxremote.login.config = SunConfig -Djava.security.auth.login.config = ldap.config – Optional

+0

Да, я могу указать свой собственный модуль входа, но могу активировать его только с помощью com.sun.management.jmxremote.authenticate = true. Проблема заключается в том, что Jconsole требует ввода пользователем ввода полей имени пользователя и пароля, даже если они не рассматриваются в модуле login. – Loco234

0

Я должен добавить еще один ответ, из примечаний, как я нашел ниже:

Перейдите к экземпляру сервера вы хотите подключиться удаленно (без идента/пароля). Перейдите к экземпляру сервера «server.xml». Посмотрите на тег, вы можете нашли, как показано ниже

Если это настраивается в экземпляре сервера, его можно контролировать без доступа:

Используйте ниже строки соединения для доступа к Jconsole для пульта дистанционного управления обработать.

служба: JMX: RMI: //10.10.10.11: 8082/JNDI/RMI: //10.10.10.11: 8081/сервер

 Смежные вопросы

  • Нет связанных вопросов^_^