Ubuntu 16.04 のポート 8010 で jetty をサービスとして実行しようとしています。SocketException: Permission denied で失敗します。
私の知る限り、1024 を超えるポートは自由に使用できるので、なぜこのエラーが発生するのか、またそれを修正するにはどうすればよいのか疑問に思っています。以前、ポート 8080 を試しましたが、同じエラーが発生し、さらに次のエラーも発生しました: java.net.BindException: アドレスは既に使用中です: bind。そのため、使用されていないポート 8010 に変更しました。
1024 未満のポートにはルート アクセスが必要であることはわかっていますが、私の知る限り、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
ログにはエラーとともに 8010 のみが表示されていましたが、実際には jetty は 8010 と 443 の 2 つのポートにバインドしようとしていたことが判明しました。
SSL ポートを 1024 より大きい値に変更すると、問題は解決しました。
サービスに完全なルートアクセス権を与えようとしましたが、それでも 1024 未満のポートでサービスを実行することはできませんでした。