2011-07-20 28 views
3

由於各種RMI漏洞以及我沒有使用它的事實,我想至少在外部禁用JBoss服務器上的RMI,但我不知道如何在不破壞事情的情況下如何做到這一點。如何在JBoss中禁用RMI?

我已經試過禁用JRMP調用,這似乎是工作,但問題是,我無法再啓動和停止我的服務器,因爲該命令:

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的其他地方看到調用者被引用,所以我不確定我需要刪除哪些其他引用。

任何想法我做錯了或我只是要求功能是互斥的?

+3

爲什麼不阻止外部應用程序通過阻塞端口通過RMI連接到您的服務器? –

+0

這會工作,但我希望有一個更優雅的解決方案: -/ –

+1

您使用的是哪個版本的JBoss? – Mikaveli

回答

2

在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> 
+0

將JBoss綁定到本地主機不起作用,因爲我希望JBoss仍然接受對我公開的服務的請求。 –

+1

@Jay。查看更新。 :) – Mikaveli

+1

我真的結束了這個基於你以前的回答,並已回來發佈它。謝謝您的幫助。 –

1

的問題是,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,這是關機,但我沒有看到一對夫婦的問題與,尤其是使用時本地APR。使用2(exit)的methodIndex工作更乾淨。另外,我添加了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 
+0

適合我。不知道還有什麼會因爲擺脫RMI而在JBoss中搞砸了,所以我稍後可能會放棄它,但到目前爲止這麼好。 –

+0

我最終遇到了我們的部署者腳本的麻煩,說實話,只是想解決這個問題,所以我放棄了禁用RMI。 –

+0

這將是我新書的標題:「我如何學會停止擔心和愛RMI」 – Nicholas