Ich versuche, Jetty als Dienst unter Ubuntu 16.04 auf Port 8010 auszuführen. Es schlägt mit einer SocketException fehl: Zugriff verweigert.
Soweit ich weiß, sind Ports über 1024 frei verwendbar, daher frage ich mich, warum ich diesen Fehler bekomme und wie ich ihn beheben kann. Ich habe zuvor Port 8080 ausprobiert, das hat den gleichen Fehler und noch einen weiteren ergeben: java.net.BindException: Adresse bereits in Verwendung: bind. Deshalb habe ich es auf Port 8010 geändert, der nicht verwendet wird.
Ich weiß, dass Ports <1024 Root-Zugriff benötigen, aber meines Wissens sollten Ports über 1024 auch ohne Root-Zugriff nutzbar sein. Wie erteile ich meinem Dienst also das Recht, an den Port zu binden?
Hier ein Auszug aus dem Logbuch der Anlegestelle:
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)
Antwort1
Es stellte sich heraus, dass Jetty versuchte, eine Bindung zu zwei Ports herzustellen: 8010 und 443, obwohl im Protokoll nur 8010 mit dem Fehler angezeigt wurde.
Das Ändern des SSL-Ports auf einen Wert über 1024 löste das Problem.
Ich habe versucht, dem Dienst vollen Root-Zugriff zu gewähren, aber dadurch konnte der Dienst immer noch nicht auf einem Port unter 1024 ausgeführt werden.