Estou tentando executar o jetty como um serviço no Ubuntu 16.04 na porta 8010. Ele falha com um SocketException: Permissão negada.
Pelo que eu sei, as portas acima de 1024 são de uso gratuito, então estou me perguntando por que recebo esse erro e como corrigi-lo. Já havia tentado a porta 8080 antes, que deu o mesmo erro e outro: java.net.BindException: Endereço já em uso: bind. É por isso que mudei para a porta 8010, que não está em uso.
Eu sei que as portas <1024 precisam de acesso root, mas até onde eu sei, as portas acima de 1024 devem poder ser usadas sem isso. Então, como concedo ao meu serviço o direito de vinculação na porta?
Este é um extrato do registro do cais:
2017-09-28 06:24:57.287:INFO:oejs.AbstractConnector:main: Started ServerConnector@48b22fd4{HTTP/1.1,[http/1.1]}{0.0.0.0:8010}
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.jetty.start.Main.invokeMain(Main.java:215)
at org.eclipse.jetty.start.Main.start(Main.java:458)
at org.eclipse.jetty.start.Main.main(Main.java:76)
Caused by: java.net.SocketException: Keine Berechtigung
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
Responder1
Acontece que o jetty estava tentando vincular a 2 portas: 8010 e 443, embora no log mostrasse apenas 8010 com o erro.
Alterar a porta SSL para algo acima de 1024 resolveu o problema.
Eu tentei dar ao serviço acesso root total, mas isso ainda não permitiu que o serviço fosse executado em uma porta abaixo de 1024.