Как отключить RMI в JBoss? - PullRequest
3 голосов
/ 20 июля 2011

Из-за различных эксплойтов RMI и того факта, что я все равно им не пользуюсь, я бы хотел отключить RMI на моем сервере JBoss хотя бы внешне, но я не уверен, как это сделать, не ломая вещи .

Я пытался отключить JRMP invoker, который, кажется, работает, но проблема в том, что я не могу запустить и остановить сервер, потому что команда:

sudo -u $JBOSS_USER $JBOSS_HOME/bin/shutdown.sh -S

возвращает ошибку:

Exception in thread "main" javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: invoker not bound]
    at org.jnp.interfaces.NamingContext.resolveLink(NamingContext.java:1215)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:758)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
    at javax.naming.InitialContext.lookup(InitialContext.java:351)
    at org.jboss.Shutdown.main(Shutdown.java:214)
Caused by: javax.naming.NameNotFoundException: invoker not bound
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
    at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
    at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
    at org.jnp.server.NamingServer.lookup(NamingServer.java:270)
    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:592)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
    at sun.rmi.transport.Transport$1.run(Transport.java:153)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
    at java.lang.Thread.run(Thread.java:613)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
    at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:667)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
    at javax.naming.InitialContext.lookup(InitialContext.java:351)
    at org.jnp.interfaces.NamingContext.resolveLink(NamingContext.java:1209)
    ... 4 more

Я не вижу ссылки на вызывающего в другом месте в /path/to/jboss/server/default/conf/jboss-service.xml, поэтому я не уверен, какие другие ссылки мне нужно будет удалить.

Есть идеи о том, что я делаю неправильно, или я просто прошу функциональность, которая является взаимоисключающей?

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

В JBoss 4 есть несколько ссылок на инициаторы RMI в:

conf/standardjboss.xml

Многие функции в JBoss используют RMI, даже если ваше приложение этого не делает.Самым простым решением было бы связать JBoss с адресом, который недоступен удаленно:

-b 127.0.0.1

Обновление

Если вы хотите, чтобы RMI был тольколокально, отредактируйте атрибуты BindAddress и RmiBindAddress в файле jboss-service.xml:

<mbean code="org.jboss.naming.NamingService" name="jboss:service=Naming">
    <attribute name="Port">1099</attribute>
    <attribute name="BindAddress">127.0.0.1</attribute>
    <attribute name="RmiPort">1098</attribute>
    <attribute name="RmiBindAddress">127.0.0.1</attribute>
</mbean>
1 голос
/ 21 июля 2011

Проблема в том, что shutdown.sh использует RMI для запроса выключения, поэтому, когда вы отключили JRMPInvoker, вы отключили shutdown.sh .

Один вариантможет быть, использовать HTTP-сообщение в JMXConsole для запроса того же.

>wget --post-data "action=invokeOp&methodIndex=0&name=jboss.system%3Atype%3DServer" \
[--user=admin --password=admin]
http://localhost:18080/jmx-console/HtmlAdaptor

Кажется, что работает нормально.

=== Обновление ===

Индекс methodIndex , который я использовал в этом URL, был 0, что означает shutdown , но я наблюдал пару проблем с этим, особенно при использовании собственного APR.Использование methodIndex of 2 (выход) работает намного более чисто.Кроме того, я добавил опции wget для timeout и попытки .Пересмотренная версия выглядит так:

wget --timeout=1 --tries=1 \
--post-data "action=invokeOp&methodIndex=2&name=jboss.system%3Atype%3DServer" \ [--user=admin --password=admin]
http://localhost:18080/jmx-console/HtmlAdaptor
...