Я пытаюсь запустить jetty как службу на Ubuntu 16.04 на порту 8010. Он завершается ошибкой SocketException: Permission denied.
Насколько мне известно, порты выше 1024 можно использовать бесплатно, поэтому мне интересно, почему я получаю эту ошибку и как ее исправить. Я уже пробовал порт 8080, который выдавал ту же ошибку и еще одну: java.net.BindException: Address already in use: bind. Вот почему я изменил его на порт 8010, который не используется.
Я знаю, что для портов <1024 нужен root-доступ, но, насколько мне известно, порты выше 1024 должны быть разрешены для использования без этого. Так как же мне предоставить своей службе право привязываться к порту?
Вот выдержка из журнала причала:
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)
решение1
Оказалось, что Jetty пытался привязаться к 2 портам: 8010 и 443, хотя в журнале отображался только 8010 с ошибкой.
Изменение порта SSL на значение выше 1024 решило проблему.
Я попытался предоставить службе полный root-доступ, но это все равно не позволило ей работать на порту ниже 1024.