Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]

Publicado por Filippe em 11/12/2012

[ Hits: 11.357 ]

 


Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]



O erro em si:
11:42:59,844 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.remoting.server.remoting-connector: org.jboss.msc.service.StartException in service jboss.remoting.server.remoting-connector: JBAS017113: Failed to start service
     at org.jboss.as.remoting.AbstractStreamServerService.start(AbstractStreamServerService.java:111)
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jbossmsc-1.0.2.GA.jar:1.0.2.GA]

     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_22]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_22]
     at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_22]
Caused by: java.net.SocketException: Permission denied
     at sun.nio.ch.Net.bind(Native Method) [rt.jar:1.6.0_22]
     at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119) [rt.jar:1.6.0_22]
     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) [rt.jar:1.6.0_22]
     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:52) [rt.jar:1.6.0_22]
     at org.xnio.nio.NioXnioWorker.createTcpServer(NioXnioWorker.java:287)
     at org.xnio.XnioWorker.createStreamServer(XnioWorker.java:135)
     at org.jboss.remoting3.remote.RemoteConnectionProvider$ProviderInterface.createServer(RemoteConnectionProvider.java:209)
     at org.jboss.as.remoting.AbstractStreamServerService.start(AbstractStreamServerService.java:101)
¿ 5 more


O erro acima ocorre porque o JBoss está tentando abrir um socket em uma porta menor que 1000. Por padrão, sistemas Unix like não permitem que usuários "mortais" (sem permissões) abram sockets nestas portas.

Para fazer um trace do erro, neste caso, não é necessário habilitar o debug do log para obter mais informações, somente com o log mostrando mensagens do nível INFO já conseguimos obter as informações necessárias.

Solução

Suba o JBoss como root:

# sh standalone.sh

Acompanhe os logs e procure pela linha do erro anterior destacado em negrito no trecho acima:

O erro destacado mostra que o erro ocorreu ao tentar subir o serviço remoting (org.jboss.as.remoting.AbstractStreamServerService.start).

Subindo o JBoss como root, verifique a linha semelhante:

[org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /106.116.152.176:447


Veja que conseguimos obter a porta que o JBoss estava tentando subir e que era a causadora do erro.

Para contornar esta situação, iremos alterar a porta deste serviço, para isso, edite o arquivo "standalone.xml" ou "domain.xml" e procure pelo bloco abaixo (geralmente no final do arquivo):

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port- offset:0}">
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8109"/>
<socket-binding name="http" port="8180"/>
<socket-binding name="https" port="8543"/>
<socket-binding name="osgi-http" interface="management" port="8190"/>
<socket-binding name="remoting" port="447"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>

Repare no serviço "remoting" no trecho acima, altere-o para alguma porta qualquer, eu optei para mudá-la para: 4447

<socket-binding name="remoting" port="4447"/>

Após salvar e fechar, inicie o JBoss novamente com o usuário que deseja, para mais fácil entendimento, eu sempre uso o usuário: jboss

# sudo -u jboss sh standalone.sh

Acompanhe os logs e veja que o erro não irá mais acontecer:
INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /103.113.152.176:4447


A dica na íntegra, encontra-se em:
Outras dicas deste autor

Iniciando mais de uma instância de memcached no mesmo servidor

Java Fedora 18/19: trusted.certs (No such file or directory)

Recuperando senhas de datasources encriptados em JBoss

VirtualBox Fedora 18/19: "WARNING: The vboxdrv kernel module is not loaded" [Resolvido]

Adicionar repositório RPM FORGE no CentOS

Leitura recomendada

Usando sockets em Java - Comunicação com um servidor

Transferência de arquivos binários em Java

Sinal EOF ou EOT com sockets

Sistemas Distribuídos - Aplicação simples Java RMI

Linux Mint bonito!

  

Comentários
[1] Comentário enviado por spolti em 25/07/2013 - 12:31h

O link foi alterado para:
http://www.hrstatus.com.br/2012/12/caused-by-java-net-socketexception-permission-denied-quando-inici...



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts