Ubuntu + Jetty: Erlaubnis für Service über Port 1024 erforderlich?

490
BluE

Ich versuche, Anlegesteg als Dienst auf Ubuntu 16.04 auf Port 8010 auszuführen. Es schlägt mit einer SocketException fehl: Berechtigung verweigert.

Soweit ich weiß, können Ports über 1024 frei verwendet werden. Ich frage mich, warum ich diesen Fehler bekomme und wie ich ihn beheben kann. Ich hatte vorher Port 8080 ausprobiert, der den gleichen Fehler und einen anderen gab: java.net.BindException: Adresse bereits verwendet: bind. Deshalb habe ich es auf Port 8010 geändert, der nicht verwendet wird.

Ich weiß, dass Ports <1024 root-Zugriff benötigen, aber soweit ich weiß, sollten Ports über 1024 ohne diese Berechtigung verwendet werden dürfen. Wie kann ich meinem Dienst das Recht geben, an den Port zu binden?

Dies ist ein Auszug aus dem Stegprotokoll:

2017-09-28 06:24:57.287:INFO:oejs.AbstractConnector:main: Started ServerConnector@48b22fd4 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) 
0

1 Antwort auf die Frage

0
BluE

Es stellte sich heraus, dass Jetty versuchte, sich an zwei Ports zu binden: 8010 und 443, obwohl im Protokoll nur 8010 mit dem Fehler angezeigt wurde.

Durch Ändern des SSL-Ports auf etwas über 1024 wurde das Problem behoben.

Ich hatte versucht, dem Dienst vollen Root-Zugriff zu gewähren. Dies erlaubte jedoch immer noch nicht, dass der Dienst auf einem Port unter 1024 ausgeführt werden konnte.

Möglicherweise handelt es sich um ein SELinux-Problem: Es kann verhindern, dass sich ein Bootsanleger an den Port bindet. user996142 vor 6 Jahren 0