Pular para o conteúdo

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

Dica publicada em Java / Rede
Filippe spolti
Hits: 12.071 Categoria: Java Subcategoria: Rede
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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>
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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:
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Crash ao executar Eclipse no Fedora 19 x86_64 [Resolvido]

Recuperando senhas de datasources encriptados em JBoss

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

Introdução e configuração básica e rápida do iptables

Configuração de internet móvel 3G CTBC no Ubuntu

Transferência de arquivos binários em Java

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

Sinal EOF ou EOT com sockets

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

Instalação manual do Java (JRE) em 4 passos

Contribuir com comentário

Entre na sua conta para comentar.